Sub TEST1()
'作業列に値を貼り付け
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
同じ値がある表を用意します。
同じ値がある表を用意
実行手順をひとつずつ確認しながら、みていきましょう。
実行手順
実行手順です。
作業列に値を転記します。
作業列に値を転記
重複を削除します。
重複を削除
重複しないリストをループして結合する表に一致する値があるかをループしていきます。
一致する値があるかをループする
一致するセル範囲を保存していきます。
一致したらセル範囲を保存
一致する値があったらセル範囲を保存します。
2回目以降に一致する値があったらUnionでセル範囲をくっつけていきます。
こんな感じで、重複しないリストに一致するセル範囲を保存していきます。
最後までループしたら、セルを結合して中央揃えにします。
セルを結合して中央にする
一致する値を探し終わったら、作成したセル範囲を結合します。
上下と左右の中央揃えをします。
同じように他の値でもループしていって、結合していきます。
他の値もループしていく
最後に作業列をクリアします。
作業列をクリア
これで、同じ値をセル結合できます。
同じ値をセル結合できた
同じ値をセル結合できました。
空白をみつけてセル結合する
空白をみつけてセル結合することもできます。
やりたいこと
やりたいことは、空白をみつけてセル結合したい、ということです。
イメージは、こんな感じです。
空白をみつけてセル結合したい
では、空白をみつけてセル結合してみます。
VBAコード
VBAコードからみてみましょう。
手順は、
IF関数で同じ値を作成して、値に変換
結合するリストに転記
重複を削除
重複しないリストと一致する値を探す
一致する値のセル範囲を保存
2回目以降のセル範囲はUnionでくっつけていく
セル範囲を結合する
中央に揃える
作業列をクリア
という流れです。
最初に「IF関数」で同じ値を作成するところを追加しています。
Sub TEST2()
'同じ値を作成
Range("C2:C9") = "=IF(A2<>"""",A2,C1)"
Range("C2:C9").Value = Range("C2:C9").Value '値に変換'結合するリストに転記
Range("A2:A9").Value = Range("C2:C9").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