Excel

【Excel】VBAマクロで結合したセルに値を入れる方法(Range、Cellsの使い方)【MergeArea、Value、Offset】

当サイトでは記事内に広告を含みます。

この記事では、VBAマクロで結合したセルに値を入れる方法(Range、Cellsの使い方)【MergeArea、Value、Offset】について解説していきます。

ポイントとしては、

・Range関数やCells関数を使用して結合セルを特定すること

・MergeArea関数で結合範囲を取得すること

・Value関数で値を設定すること

です。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

 

VBAマクロで結合したセルに値を入れる方法(B列の結合セルに8を入れる)

それではまず、VBAマクロで特定の列の結合セルに値を入れる方法について解説していきます。

具体的には、B列の結合セルに8を入れる仕様としております。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaaBretsugoukankiaaaaa()
    
    'B列の行数を取得
    Dim aaaaalastRowaaaaa As Long
    aaaaalastRowaaaaa = Cells(Rows.Count, "B").End(xlUp).Row
    
    'B列の1行目から最終行まで繰り返し処理
    Dim aaaaagyouaaaaa As Long
    For aaaaagyouaaaaa = 1 To aaaaalastRowaaaaa
        
        'セル範囲がマージ範囲かどうかチェック
        If Not Range("B" & aaaaagyouaaaaa).MergeCells Then
            '非結合セルの場合は次の行へ
            GoTo NextGyou
        End If
        
        'マージ範囲の左上セルに8を入れる
        Range("B" & aaaaagyouaaaaa).MergeArea.Cells(1, 1).Value = 8
        
NextGyou:
    Next aaaaagyouaaaaa
    
End Sub

 

コードのAlt+F8を押し、マクロ選択画面でaaaaaBretsugoukankiaaaaa関数を実行します。

このコードでは、以下のような処理を行っています。

 

1. B列の最終行番号を取得し、aaaaalastRowaaaaaa変数に格納します。

2. aaaaagyouaaaaa変数を1からaaaaalastRowaaaaaまで1ずつ増やしながら、B列の各行に対して以下の処理を繰り返します。

3. 現在の行のB列のセルが結合セルかどうかをMergeCellsプロパティで判定します。

4. 結合セルでない場合は、NextGyouラベルに飛んで次の行の処理に移ります。

5. 結合セルの場合は、MergeAreaプロパティで結合範囲を取得し、その左上のセル(Cells(1, 1))のValueプロパティに8を設定します。

これにより、B列の結合セルにのみ8が入力されます(^^)/

 

VBAマクロで結合したセルに値を入れる方法(シート全体の結合セルに上のセルの値を入れる)

続いては、シート全体の結合セルに、その上のセルの値を入れる方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaazensheetsウエセルいれるaaaaa()

    '全シートを処理
    Dim aaaaamySheetaaaaa As Worksheet
    For Each aaaaamySheetaaaaa In ThisWorkbook.Sheets
    
        With aaaaamySheetaaaaa
            '処理対象シートのセル範囲を取得
            Dim aaaaaallRangeaaaaa As Range
            Set aaaaaallRangeaaaaa = .Cells.SpecialCells(xlCellTypeConstants)
            
            '取得したセル範囲から結合セルのみ抽出
            Dim aaaaamergedRangeaaaaa As Range
            For Each aaaaamergedRangeaaaaa In aaaaaallRangeaaaaa
                If aaaaamergedRangeaaaaa.MergeCells Then
                    '結合セルの1つ上のセルの値を取得
                    Dim aaaaaueセルちaaaaa As Range
                    Set aaaaaueセルちaaaaa = aaaaamergedRangeaaaaa.MergeArea.Cells(1, 1).Offset(-1, 0)
                    
                    '結合セル全体に上のセルの値を設定
                    aaaaamergedRangeaaaaa.MergeArea.Value = aaaaaueセルちaaaaa.Value
                End If
            Next aaaaamergedRangeaaaaa
            
        End With
        
    Next aaaaamySheetaaaaa
    
End Sub

 

コードのAlt+F8を押し、マクロ選択画面でaaaaazensheetsウエセルいれるaaaaa関数を実行します。

このコードでは、以下のような処理を行っています。

1. ThisWorkbook.Sheetsで全シートを取得し、aaaaamySheetaaaaa変数に1つずつ代入しながら以下の処理を繰り返します。

2. 処理対象シートの使用範囲のセルを、SpecialCellsメソッドとxlCellTypeConstants引数を使って取得し、aaaaaallRangeaaaaa変数にセット。

3. 取得したセル範囲から、For Each文とMergeCellsプロパティを使って結合セルのみを抽出します。

4. 結合セルの1つ上のセルをOffset関数で取得し、aaaaaueセルちaaaaa変数にセットします。

5. 結合セル全体のMergeArea.Valueプロパティに、aaaaaueセルちaaaaaa変数の値を設定します。

こうすることで、ブック内の全シートについて、結合セルにその上のセルの値が入力されます。

 

まとめ VBAマクロで結合したセルに値を入れる方法(Range、Cellsの使い方)【MergeArea、Value、Offset】

ここでは、VBAマクロで結合したセルに値を入れる方法(Range、Cellsの使い方)【MergeArea、Value、Offset】について確認しました。

マクロの処理に慣れ、さらに快適な生活を送っていきましょう!