このガイドでは、VBAマクロを使用して結合セルの内容をクリアし、それらを解除する手順(シート全体に適用し、すべてのセルに同一の値を設定)を紹介します。
主要な手法として、
.MergeCells
.MergeArea
のプロパティを活用します。
また、この説明では初心者の方にも理解しやすいように、変数名を一風変わったものにしていますが、実際に使う際はもっと一般的な英語の変数名に変更することをお勧めします。
さあ、詳細な手順を見ていきましょう!
VBAマクロを使ってD列の結合セルをクリアして解除する方法(解除後に上部セルのデータを挿入)
次に、VBAマクロを利用してD列の結合セルをクリアし、解除する手順を紹介します。解除後には上部のセルの値を該当セルに入力します。
Alt + F11を押してVBE画面を開き、次のコードをコピー&ペーストしてください。
Sub aaaaketsugoukaijyoDranaaaaaa()
‘結合解除マクロ、D列に適用、上の値を入力
Dim aaaashiitomeiaaaa As String
aaaashiitomeiaaaa = ActiveSheet.NameDim aaaaaisaikiaaaa As Long
Dim aaaaagenzaihyouaaaa As Range
Dim aaaaakaijyogoaaaaa As Range‘シートの最終行まで繰り返し
With Worksheets(aaaashiitomeiaaaa)
aaaaaisaikiaaaa = .Cells(.Rows.Count, “D”).End(xlUp).Row
‘シートのD列をセット
Set aaaaagenzaihyouaaaa = .Range(“D1:D” & aaaaaisaikiaaaa)‘D列の結合セルを解除
For Each aaaaakaijyogoaaaaa In aaaaagenzaihyouaaaa
If aaaaakaijyogoaaaaa.MergeCells Then
With aaaaakaijyogoaaaaa
.MergeArea.Cells(1, 1).Copy
.UnMerge
.PasteSpecial Paste:=xlPasteValues
End With
End If
Next aaaaakaijyogoaaaaa
End With
End Sub
以下はコピー&ペーストしなくてよいです。
“`vba
Sub ClearAndUnmergeCellsInColumnD()
‘ D列での結合セルのクリアと解除、上部の値を挿入
Dim activeSheetName As String
activeSheetName = ActiveSheet.NameDim lastRowInD As Long
Dim columnDRange As Range
Dim cellInD As Range‘ 最終行までの処理
With Worksheets(activeSheetName)
lastRowInD = .Cells(.Rows.Count, “D”).End(xlUp).Row
‘ D列の範囲を設定
Set columnDRange = .Range(“D1:D” & lastRowInD)‘ D列の結合セルを一つずつ処理
For Each cellInD In columnDRange
If cellInD.MergeCells Then
With cellInD
.MergeArea.Cells(1, 1).Copy
.UnMerge
.PasteSpecial Paste:=xlPasteValues
End With
End If
Next cellInD
End With
End Sub
“`
コードを挿入した後、Alt+F8を押してマクロ選択画面から`ClearAndUnmergeCellsInColumnD`関数を実行します。
このスクリプトは以下の操作を実行しています。
1. `activeSheetName` 変数で現在アクティブなシートの名前を保持します。
2. `lastRowInD` 変数にD列の最終行の番号を保存します。
3. `columnDRange` 変数でD列のD1セルから最終行までの範囲を指定します。
4. D列の各セル(`cellInD`として指定)に対して以下の操作を行います:
・ セルが結合されている場合、その結合セル範囲の最初のセルから値をコピーします。
・ 結合を解除します。
・ コピーした値を貼り付けます。この操作により、解除後の先頭セルにだけ値が設定され、他のセルは空白のままです。
具体的に、`.MergeArea.Cells(1, 1).Copy`は結合セル範囲の左上セルから値をコピーし、`.UnMerge`で結合を解除し、`.PasteSpecial Paste:=xlPasteValues`でコピーした値を貼り付ける処理を担います。これにより、結合解除後の各セル範囲の先頭セルにのみ元の値が入力されます。
VBAマクロを用いて結合セルをクリアし解除する方法(全シート対象:解除後に元の値を再配置)
このセクションでは、VBAマクロを活用してシート全体の結合セルをクリアして解除し、解除後に各セルに同じ値を再入力する手順を紹介します。
Alt + F11キーでVBEエディタを開き、以下のコードをコピー&ペーストしてください。
Sub aaaaketsugoukaijyozenbuaaaa()
‘結合解除マクロ、シート全体に適用、同じ値を入力
Dim aaaashiitomeiaaaa As String
aaaashiitomeiaaaa = ActiveSheet.NameDim aaaaagenzaihyouaaaa As Range
Dim aaaaakaijyogoaaaaa As RangeWith Worksheets(aaaashiitomeiaaaa)
‘シート全体をセット
Set aaaaagenzaihyouaaaa = .Cells‘シート全体の結合セルを解除
For Each aaaaakaijyogoaaaaa In aaaaagenzaihyouaaaa
If aaaaakaijyogoaaaaa.MergeCells Then
With aaaaakaijyogoaaaaa.MergeArea
.Cells(1, 1).Copy
.Cells.PasteSpecial Paste:=xlPasteValues
aaaaakaijyogoaaaaa.UnMerge
End With
End If
Next aaaaakaijyogoaaaaa
End With
End Sub
以下はコピー&ペーストしなくてよいです。
“`vba
Sub UnmergeAndReplicateValuesAcrossSheet()
‘シート全体に適用する結合解除マクロ、値を再入力
Dim sheetName As String
sheetName = ActiveSheet.NameDim entireSheet As Range
Dim cellToProcess As RangeWith Worksheets(sheetName)
‘シート全体のセル範囲を設定
Set entireSheet = .Cells‘全結合セルの解除と値のコピー
For Each cellToProcess In entireSheet
If cellToProcess.MergeCells Then
With cellToProcess.MergeArea
.Cells(1, 1).Copy
.Cells.PasteSpecial Paste:=xlPasteValues
cellToProcess.UnMerge
End With
End If
Next cellToProcess
End With
End Sub
“`
このマクロの実行は、Alt+F8を押してマクロ選択画面から`UnmergeAndReplicateValuesAcrossSheet`関数を起動することで行います。
このスクリプトは以下の手順を実行しています。
1. `sheetName` 変数で現在アクティブなシートの名前を保存します。
2. `entireSheetRange` 変数を用いてシート全体の範囲を指定します。
3. シートの全セル(`cellInProcess` として指定)に対して次の操作を行います:
・ セルが結合されている場合、その結合セル範囲の最初のセルから値をコピーします。
・ コピーした値を結合セル範囲全体に貼り付けます。
・ 結合を解除します。
総括:VBAマクロを用いて結合セルの解除と値の再設定を行う方法(全シート対象)
このセクションでは、VBAマクロを使用して結合セルの内容をクリアし、それらを解除する手順(各セルに同一の値を設定する方法、シート全体に適用)を詳しく説明しました。
マクロの使い方に慣れて、より効率的なデータ管理を目指しましょう!