- 締切済み
このVBAコードの解説をお願いします。
特定の行の中で同じものが続いたらセルを結合する、ということがやりたくて 以下のコードをネット上から探してきました。 上記の動作は実現できたのですが、自分でこのコードをみてもイマイチわかりません。 お分かりになる方、できれば1行ずつ解説してください。 よろしくお願いします。 Sub Sample() Dim myRng As Range, myRow As Long Set myRng = Range("A1") For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(myRow, 1) If .Value = .Offset(1).Value Then Set myRng = Union(myRng, .Offset(1)) Else Application.DisplayAlerts = False myRng.Merge Application.DisplayAlerts = True Set myRng = .Offset(1) End If End With Next End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
コメントのないコードは読みにくいものですね。 A列の入力されている範囲を対象にして、連続して同じ値のセルがあれば結合しています。 Sub Sample() '変数宣言 myRngはセル。myRow は数値(行番号、Long型) Dim myRng As Range, myRow As Long '変数myRngにセルA1を定義 Set myRng = Range("A1") '1行目から、A列の入力された最後のセルの行まで繰り返す ' Cells(Rows.Count, 1)=Cells(65536, 1) <Excel97以降なら> ' これはA列の一番下のセル。 ' 一番下のセルから上方向に登録されたセルに動いた<End(xlUp)>セルの行を求めている For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'Cells(myRow, 1)=セルA? を基準にして '以下With~End With 間にある『.』の前にはCells(myRow, 1)が省略されている With Cells(myRow, 1) 'セルA?の値が1つ下のセルの値と等しければ If .Value = .Offset(1).Value Then '変数myRngにその時点のmyRngに1つ下のセルを合わせた範囲を再定義している Set myRng = Union(myRng, .Offset(1)) Else 'セルA?の値が1つ下のセルの値と等しくなければ、 '以下で、セルを結合して、新たな基準セルを定義している 'マクロ実行中の警告やメッセージを非表示にする Application.DisplayAlerts = False '変数myRngに定義されたセル範囲を結合 myRng.Merge 'マクロ実行中の警告やメッセージを表示するようにする Application.DisplayAlerts = True '新たな基準セルを定義 Set myRng = .Offset(1) End If End With Next End Sub