0

私はマクロを書くのが初めてなので。セル値「TLA」の間で行の範囲をソートするマクロを作成する際に支援が必要です。次に例を示します。

Column A   
  TLA  
   23
    6
   32
  TLA
  TLA
    5
   21
   16
   40
  TLA

このフォーラムから閲覧したマクロを変更しようとしましたが、行を選択できません。任意のポインタまたは支援は、私にとって非常に役立ちます. VB:

Sub Sort_column_TLA() 

    Dim r As Long 
    Application.ScreenUpdating = False 
    ActiveSheet.DisplayPageBreaks = False 
    r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row 
    For r = r To 2 Step -1 

        Select Case Cells(r, 1) 
        Case "TLA" 
             'do nothing
        Case Else 
            Range(r & ":" & r ).Select 

             'Rows(r).Select
        End Select 
    Next r 
End Sub 
4

2 に答える 2

0

あなたの構成は非常に奇妙に見えます:

r =Range("A"& ActiveSheet.Rows.Count).End(xlUp).Row  
For r = r To 2 Step -1 

カウンターを上から下に動かすと、より透明になると思います(逆に移動する特定の理由はありますか?)。たとえば、別のカウンターを使用します。lCnt(限り)。それが途中であなたを助けることを願っています。

たとえば、範囲を別の方法で設定します

set oRange = thisworkbook.sheets("<Name>").usedrange    'Declare oRange as excel.range
for each oRow in oRange.rows   
    lCnt = lCnt + 1
    select case oRow.cells(lcnt, 1)
        case "TLA" 
        oRow.select 
        'etc... 
    end select
next oRange 
于 2012-06-27T10:53:55.460 に答える
0

実際に値を並べ替えていないことを除いて、コードに問題はありません。
選択に関する限り、コードをデバッグして段階的に実行すると、行が選択されていることがわかります。

以下は、昇順で「TLA」の間のすべての値をソートします

Function a()
    Dim r, r2 As Long

    r2 = 0

    Application.ScreenUpdating = False
    ActiveSheet.DisplayPageBreaks = False
    r = Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row
    For r = r To 1 Step -1

        If (Cells(r, 1) = "TLA") Then
            If (r2 <> 0) Then
                If (r2 - r >= 2) Then
                    With Range(r + 1 & ":" & r2)
                        .Sort Key1:=Range("A" & r + 1), _
                                Order1:=xlAscending, _
                                Orientation:=xlTopToBottom
                    End With
                End If
            End If
        r2 = r - 1
        End If

    Next r
End Function
于 2012-06-27T11:10:48.917 に答える