Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
空白が上にくるようにソートしたい
投稿日時: 20/03/18 19:25:50
投稿者: vaioyuki

いつもお世話になっております。
 
現在、並び替えに苦戦しております。
A列には空白はないのですが、
C列、E列には空白があり、それを優先したいので空白にはスペースを入れるようにしています。
そのあとソートをするのですが、
 
.Add Key:=.Range("A2"), Order:=xlAscending
 
部分で、
「実行時エラー438
 オブジェクトはこのプロパティまたはメソッドをサポートしていません。」
 
のエラー表示が出ます。
 

With Worksheets(5)

    r_cntB = .Range("A1").CurrentRegion.Rows.Count
    
    For i = 3 To r_cntB
        If .Cells(i, 3) = "" Then
            .Cells(i, 3) = " "
        End If
        
        If .Cells(i, 5) = "" Then
            .Cells(i, 5) = " "
        End If
    Next
    Stop
    With .Sort
        With .SortFields
            .clear
            .Add Key:=.Range("A2"), Order:=xlAscending
            .Add Key:=.Range("C2"), Order:=xlAscending
            .Add Key:=.Range("E2"), Order:=xlAscending
        End With

        .SetRange.Range ("A2:F" & r_cntB)
        .Header = xlYes
        .DataOption = xlSortNormal
        .Apply
    End With
        
End With

 
A列を第一基準、C列を第二基準、E列を第三基準にして、昇順に並び替えをしたいです。
数値や文字列が混じっているので「.DataOption = xlSortNormal」を入れました。
 
よろしくお願いします。

回答
投稿日時: 20/03/18 21:59:31
投稿者: simple

引用:
With .Sort
        With .SortFields
            .clear
            .Add Key:=.Range("A2"), Order:=xlAscending

となっていますが、これだと
Key:= Worksheets(5).Sort.SortFields.Range("A2")
と指定したことになります。再考が必要。

投稿日時: 20/03/18 22:42:33
投稿者: vaioyuki

なるほど。
 

.Add Key:=Worksheets(5).Range("A2"), Order:=xlAscending

 
になるんですかね。
withがあるから大丈夫だと思ったら、入れ子?でそんな形になるんですね。。。
 
明日やってみます!!
 
また報告します!!

投稿日時: 20/03/19 11:04:06
投稿者: vaioyuki

Sub kakunin()
Dim ws As Worksheet
Dim i As Long
Dim r_cntB As Long

Set ws = Worksheets(5)

With ws


    r_cntB = .Range("A1").CurrentRegion.Rows.Count

    For i = 3 To r_cntB
        If .Cells(i, 3) = "" Then
            .Cells(i, 3) = " "
        End If

        If .Cells(i, 5) = "" Then
            .Cells(i, 5) = " "
        End If
    Next

    With .Sort
        With .SortFields
            .clear
            .Add Key:=ws.Range("A2"), Order:=xlAscending, DataOption:=xlSortNormal
            .Add Key:=ws.Range("C2"), Order:=xlAscending, DataOption:=xlSortNormal
            .Add Key:=ws.Range("E2"), Order:=xlAscending, DataOption:=xlSortNormal
        End With

        .SetRange ws.Range("A2:F" & r_cntB)
        .Header = xlYes
        .Apply
    End With  
End With

End Sub

 
上記でうまく作動しました!!
ありがとうございました!!