電子書籍の厳選無料作品が豊富!

特定の行の中で同じものが続いたらセルを結合する、ということがやりたくて
以下のコードをネット上から探してきました。
上記の動作は実現できたのですが、自分でこのコードをみてもイマイチわかりません。
お分かりになる方、できれば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

A 回答 (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
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!