コンテンツを削除せずに結合セルの一番左の列を削除するにはどうすればよいですか?
たとえば、range("A1:C1")
とマージされます.value="Hi"
をrange("A2").EntireColumn.delete(xlLeft)
実行しても、結合されたセルは失われません (現在は になりますがrange("A1:B1")
、その内容は失われます。
一時変数に値を保持しない理由:
Sub DeleteColumnRetainMergedCellValue()
'Select merged cells, then run this subroutine.
Dim v As String
v = Selection.Cells(1, 1).Value
Selection.Cells(1, 1).EntireColumn.Delete
Selection.Cells(1, 1).Value = v
End Sub
これはあなたが探しているものですか?そうでない場合は、もう少し説明してください。
マージされたセルのアドレスが不明であることに対処する必要がありました。以下は、可変範囲の私のソリューションです。
'' The Microsoft Scripting Runtime must be activated for this to work
'' Assumes rngDelete contains only one column
Sub DeleteColumnRetainMergedCellValues(rngDelete As Range)
Dim dicMerged As Dictionary
Set dicMerged = New Dictionary
Dim key As Variant
Dim rngCell As Range
Dim rngColumn As Range
Dim rngOptimizedColumn As Range
'' optimize the search range
Set rngColumn = rngDelete.EntireColumn
Set rngOptimizedColumn = Range( _
rngColumn.Cells(1, 1), _
rngColumn.Cells(rngColumn.Rows.Count, 1).End(xlUp))
'' find all merged cells, store their addresses and values
For Each rngCell In rngOptimizedColumn.Cells
If rngCell.MergeArea.Cells.Count > 1 Then
dicMerged.Add _
rngCell.MergeArea.Cells(1, 1).Address, _
rngCell.MergeArea.Cells(1, 1).Value
End If
Next rngCell
'' delete the column
rngDelete.EntireColumn.Delete (xlLeft)
'' paste back the value in the merged cells
For Each key In dicMerged
Range(key).Value = dicMerged(key)
Next key
End Sub