0

誰かが私を助けてくれるのではないかと思います。

以下のコードを使用して、ブックを閉じる前に並べ替えを実行しています。

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Sheets("Input").Protect "password", UserInterFaceOnly:=True 
    With ThisWorkbook.Worksheets("Input") 

        If .Range("B7").Value = "" Then Exit Sub 
        .Range("B7:AH400").Sort Key1:=.Range("B7"), _ 
        Order1:=xlAscending, _ 
        Header:=xlGuess, _ 
        OrderCustom:=1, _ 
        MatchCase:=False, _ 
        Orientation:=xlTopToBottom, _ 
        DataOption1:=xlSortNormal 
    End With 
End Sub 

コードは正常に動作しますが、機能をもう少し拡張して、「名前を入力してください」というテキスト値をソートから除外したいので、列 B のこの値を持つセルは常にすべてのデータの下の最後の行になります行。

解決策を見つけるのに 1 週​​間ほど費やしましたが、残念ながら解決できませんでした。また、Microsft サイトを見て、「Range.sort」メソッドに組み込み関数があるかどうかを確認しましたが、これについても空白にしました。

これが可能かどうかさえわかりませんが、誰かがこれを見て、どうすればこれを達成できるかについてのガイダンスを提供できるかどうか疑問に思いました.

多くの感謝と親切な敬意

クリス

4

1 に答える 1

0

除外したいデータは範囲の一番下にあるため、単純にソート範囲を「適切なサイズ」にして除外することができます。.endメソッドとメソッドを使用して、.rowデータの量を把握します

Dim EndRow as long

if文追加後

'find last row of data
EndRow = Range("B7").end(xldown).row -1

新しく計算された最後の行を使用するように範囲を変更します。

.Range("B7:AH400")

になる

.Range("B7:AH" & EndRow)
于 2013-02-12T02:38:21.760 に答える