この記事では、VBAマクロを使用して、結合セルの内容をクリアし、それを個別に分割して同じ値を各セルに再入力する方法について説明します。
重要な機能として、
.MergeCells
.MergeArea
のプロパティが必要です。
この説明では初心者の方にも理解しやすいように、特に変わった名前で変数を示しています。
実際に使う際には、より一般的な英語名に変更してみてください。
さあ、それでは具体的な手順を一緒に見ていきましょう!
VBAマクロを活用して結合セルのクリアと解除を行う方法(D列に適用:解除後は上の値を再入力)
ここでは、D列に対して結合セルをクリアおよび解除するVBAマクロの使い方を説明します。解除後、セルには上部の値が自動で入力されます。
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 ClearAndUnmergeCellsInDColumn()
‘ D列での結合セルのクリアと解除、上のセルの値をコピーして再入力
Dim sheetName As String
sheetName = ActiveSheet.NameDim lastRow As Long
Dim currentColumn As Range
Dim cellToUnmerge As Range‘ シートの最終行まで処理
With Worksheets(sheetName)
lastRow = .Cells(.Rows.Count, “D”).End(xlUp).Row
‘ D列を範囲指定
Set currentColumn = .Range(“D1:D” & lastRow)‘ D列の結合セルを解除
For Each cellToUnmerge In currentColumn
If cellToUnmerge.MergeCells Then
With cellToUnmerge
.MergeArea.Cells(1, 1).Copy
.UnMerge
.PasteSpecial Paste:=xlPasteValues
End With
End If
Next cellToUnmerge
End With
End Sub
“`
このコードを使用するには、Alt + F8を押し、マクロ選択画面から`ClearAndUnmergeCellsInDColumn`関数を実行してください。
このスクリプトは以下の操作を実行します。
1. `sheetName` 変数に現在アクティブなシートの名前を保存します。
2. `lastRow` 変数にシートのD列の最終行の番号を格納します。
3. `currentColumn` 変数にD列の最初のセルから最終行までの範囲を指定します。
4. `cellToUnmerge` を使用してD列の各セルに対し次の処理を繰り返します:
・ セルが結合されていれば、その結合セル範囲の左上セルから値をコピーします。
・ 結合を解除します。
・ コピーした値を先頭セルに貼り付けます(これにより、結合解除後の先頭セルのみに値が設定され、残りは空白のままです)。
具体的に、`.MergeArea.Cells(1, 1).Copy` は結合セル範囲の左上セルから値をコピーし、`.UnMerge` はセルの結合を解除し、`.PasteSpecial Paste:=xlPasteValues` はコピーした値を貼り付ける処理を担います。
この一連の操作により、D列の結合セルが解除された後、先頭セルにのみ元の値が再入力され、他のセルは空の状態が保たれます。
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 UnmergeAndClearAllCells()
‘全シートの結合セルをクリアし、解除するマクロ、値を再入力
Dim sheetName As String
sheetName = ActiveSheet.NameDim wholeSheet As Range
Dim cellToProcess As RangeWith Worksheets(sheetName)
‘全シートのセルを選択
Set wholeSheet = .Cells‘結合されたセルを解除して値を再配置
For Each cellToProcess In wholeSheet
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を押してマクロ選択画面を開き、`UnmergeAndClearAllCells`関数を実行してください。
このスクリプトは以下の手順で動作します。
1. `sheetName` 変数でアクティブなシートの名前を保存します。
2. `entireSheet` 変数を用いてシート全体を範囲として指定します。
3. シートの各セル(`cellToUnmerge`)に対し、次の操作を行います:
・ セルが結合されている場合、その結合セル範囲の最初のセルの値をコピーします。
・ 結合された範囲全体にその値を貼り付けます。
・ 結合を解除します。
総括 全シートの結合セルを分割し、元の値を維持するVBAマクロの活用法
この記事では、VBAマクロを使用してシート全体の結合セルを解除しつつ、各セルに元の値を保持させる方法を詳細に説明しました。
マクロの操作に慣れ、作業効率を高めることで、より効率的なデータ管理を目指しましょう!