'結合セルの各値を取得
With Range("A1").MergeArea
Debug.Print .Rows.Count '行数
Debug.Print .Columns.Count '列数
Debug.Print .Cells(1, 1).Address '1行1列目のアドレス
Debug.Print .Cells(.Rows.Count, 1).Address '最終行の1列目のアドレス
Debug.Print .Cells(1, .Columns.Count).Address '1行目の最終列のアドレス
Debug.Print .Cells(.Count).Address '最終行の最終列のアドレス
End With
では、それぞれ値を取得してみます。
結合セルの行数
結合セルの行数を取得してみます。
Sub TEST10()
'結合セルの行数
Debug.Print Range("A1").MergeArea.Rows.Count
End Sub
結合セルの行数を取得します。
結合セルを用意
実行してみます。
結合セルの「行数」を取得
結合セルの行数を取得できました。
結合セルの列数
結合セルの列数を取得してみます。
Sub TEST11()
'結合セルの列数
Debug.Print Range("A1").MergeArea.Columns.Count
End Sub
結合セルの列数を取得します。
結合セルを用意
実行します。
結合セルの「列数」を取得
結合セルの列数を取得できました。
結合セルの1行目の1列目
結合セルの1行目の1列目のアドレスを取得してみます。
Sub TEST12()
'結合セルの1行1列目のアドレス
With Range("A1").MergeArea
Debug.Print .Cells(1, 1).Address
End With
End Sub
結合セルの1行1列目のアドレスを取得します。
結合セルを用意
実行してみます。
結合セルの「1行1列目」のアドレス
結合セルの1行1列目のアドレスを取得できました。
結合セルの最終行
結合セルの最終行のアドレスを取得してみます。
Sub TEST13()
'結合セルの最終行1列目のアドレス
With Range("A1").MergeArea
Debug.Print .Cells(.Rows.Count, 1).Address
End With
End Sub
結合セルの最終行のアドレスを取得します。
結合セルを用意
実行します。
結合セルの「最終行」のアドレス
結合セルの最終行のアドレスを取得できました。
結合セルの最終列
結合セルの最終列のアドレスを取得してみます。
Sub TEST14()
'結合セルの1行目最終列のアドレス
With Range("A1").MergeArea
Debug.Print .Cells(1, .Columns.Count).Address
End With
End Sub
結合セルの最終列のアドレスを取得します。
結合セルを用意
実行します。
結合セルの「最終列」のアドレス
結合セルの最終列のアドレスを取得できました。
結合セルの最終行の最終列
結合セルの最終行で最終列のアドレスを取得してみます。
Sub TEST15()
'結合セルで、最終行の最終列のアドレス
With Range("A1").MergeArea
Debug.Print .Cells(.Count).Address
End With
End Sub
結合セルの最終行最終列のアドレスを取得します。
結合セルを用意
実行します。
結合セルの「最終行最終列」のアドレス
結合セルの最終行最終列のアドレスを取得できました。
こんな感じで、結合セルの各値を取得できます。
ちょっと応用
結合セルについて、ちょっと応用したものです。
すべての結合セルを色付け
すべての結合セルを色付けしてみます。
手順は、
セルをループして結合セルを探す
セルを塗りつぶしする
という流れです。
Sub TEST16()
For i = 1 To 9
'セル結合されている場合
If Cells(i, "A").MergeCells Then
'背景色を設定
Cells(i, "A").Interior.Color = RGB(255, 255, 155)
End If
Next
End Sub
結合セルを用意しておきます。
結合セルを用意
実行してみます。
結合セルの塗りつぶしができた
結合したセルの塗りつぶしができました。
すべての結合セルのアドレスを取得
すべての結合セルのアドレスを取得してみます。
手順は、
値が入力されているセルを探す
結合セルかを判定する
結合セルの場合はアドレスを取得
という流れです。
Sub TEST17()
For i = 1 To 10
'値が入力されている場合
If Cells(i, "A") <> "" Then
'セル結合されている場合
If Cells(i, "A").MergeCells Then
'結合セルの範囲を取得
Debug.Print Cells(i, "A").MergeArea.Address
End If
End If
Next
End Sub
結合セルを用意しておきます。
結合セルを用意
実行してみます。
結合セルのアドレスを取得
結合セルのアドレスを取得できました。
結合セルを検索して値を取得
結合セルを検索して値を取得してみます。
手順は、
値が入力されているセルを探す
結合セルの範囲をループする(結合されていない場合は1行だけ)
一つ右の値を取得する
という感じです。
Sub TEST18()
For i = 1 To 9
'セルの値が「"C"」の場合
If Cells(i, "A") = "C" Then
'結合セルの範囲をループ(結合されていない場合は1行だけ)
For Each A In Cells(i, "A").MergeArea
'「型番」の値を取得
Debug.Print A.Offset(0, 1)
Next
Exit For
End If
Next
End Sub
結合セルを含む表を用意しておきます。
結合セルを含む表を用意
実行してみます。
結合セルを検索して値を取得
結合セルを検索して値を取得できました。
セル結合を解除して同じ値を入力
セル結合を解除して同じ値を入力してみます。
手順は、
セルをループして結合セルを探す
セル結合の範囲を保存
セル結合を解除
元の結合の範囲に値を入力
という流れです。
Sub TEST19()
Dim A, B
'データをループ
For Each A In Range("A2:A10")
'セル結合されている場合
If A.MergeCells Then
'セル結合の範囲を保存
Set B = A.MergeArea
'セル結合を解除
A.UnMerge
'セル結合されていた範囲に値を入力
B.Value = A.Value
End If
Next
End Sub
Sub TEST20()
'作業列に値を貼り付け
Range("C2:C9").Value = Range("A2:A9").Value
'重複を削除
Range("C2:C9").RemoveDuplicates Columns:=1
Dim A
'重複しないリストをループ
For j = 2 To 5
Flag = 0 'フラグをオフ
A = Empty '初期値を入力'結合するリストをループ
For i = 1 To 9
'重複しないリストと一致した場合
If Cells(i, "A") = Cells(j, "C") Then
'最初の場合
If IsEmpty(A) Then
'範囲を保存
Set A = Cells(i, "A")
'2回目以降
Else
'範囲を追加で保存
Set A = Union(A, Cells(i, "A"))
End If
End If
Next
Application.DisplayAlerts = False '警告を非表示'結合する
A.Merge
A.VerticalAlignment = xlCenter '上下中央揃え
A.HorizontalAlignment = xlCenter '左右中央揃え
Application.DisplayAlerts = True '警告を表示
Next
'作業列をクリア
Range("C2:C9").Clear
End Sub