【VBA】2つのセルの内容を組み合わせて別のセルに出力する
2017/02/26
コード内容
セル内のデータが改行で区切られている場合
2つのセルの内容(セルAに入力している内容とセルBに入力している内容)を組み合わせてセルCに出力するマクロです。
最初の例として紹介するのはA列、B列に入力している内容は改行(vbLf)で区切ってある場合です。
アメリカ産 日本産 ベトナム産 |
りんご みかん バナナ |
アメリカ産 りんご アメリカ産 みかん アメリカ産 バナナ 日本産 りんご 日本産 みかん 日本産 バナナ ベトナム産 りんご ベトナム産 みかん ベトナム産 バナナ |
こんな感じで変換することが目的です。
2つのセル内にある改行で区切りられているデータの掛け合わせ(組み合わせ)パターンを別のセルに出力する場合のマクロを先に紹介します。
たぶんこのパターンが一番やっかい……といか困っている方が多いと思うので。
Option Explicit Sub Program1() Dim a() As String Dim b() As String Dim temp As String Dim i As Integer Dim j As Integer Dim k As Long Dim MaxRow As Long MaxRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row For k = 1 To MaxRow a = Split(Range("A" & k), vbLf) b = Split(Range("B" & k), vbLf) temp = "" For i = 0 To UBound(a) For j = 0 To UBound(b) temp = temp & a(i) & " " & b(j) & vbLf Next j Next i If Range("B" & k).Value = "" Then Cells(k, 3).Value = Cells(k, 1).Value ElseIf Range("A" & k).Value = "" Then Cells(k, 3).Value = Cells(k, 2).Value Else Cells(k, 3).Value = Left(temp, Len(temp) - 1) End If Next k End Sub
セル内のデータが@(アットマーク)や/(スラッシュ)で区切られている場合
今度は改行コードではなく@でデータ区切られている場合のコードを例として載せておきます。
Option Explicit Sub Program2() Dim a() As String Dim b() As String Dim temp As String Dim i As Integer Dim j As Integer Dim k As Long Dim MaxRow As Long MaxRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row For k = 1 To MaxRow a = Split(Range("A" & k), "@") b = Split(Range("B" & k), "@") temp = "" For i = 0 To UBound(a) For j = 0 To UBound(b) temp = temp & a(i) & " " & b(j) & "@" Next j Next i If Range("B" & k).Value = "" Then Cells(k, 3).Value = Cells(k, 1).Value ElseIf Range("A" & k).Value = "" Then Cells(k, 3).Value = Cells(k, 2).Value Else Cells(k, 3).Value = Left(temp, Len(temp) - 1) End If Next k End Sub
上のコードの@の部分をスラッシュや全角スペース等に変えることでいろんな区切り文字に対応できます。
コードの説明
Split関数を使って、Aセルに入力されている内容を分解します。
それとセルの最後に区切り文字(今回で言えばvbLfや@)が入力されている場合はそれを削除します。
まぁ目的がシンプルなので、そこまで悩むことはないと思われますがあると便利なので備忘録的に残しておくことに。ご参考まで。
注意書き
このマクロを使ったことで何か損害や不利益を被ったとしてもこちらで責任は負いかねます。そこは利用者個人の責任で何卒お願いしたく候。
あと個別のサポートとかもできませぬ。あしからず。
参照設定
デフォルトのままでOKです。
VBAのIE操作を覚えるのに一番良いと思う本(ぼくはこれで覚えました)
近田 伸矢,植木 悠二,上田 寛 インプレス 2013-04-19