• 締切済み

この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

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

コメントのないコードは読みにくいものですね。 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

関連するQ&A