ぼくらの勉強

ぼくらのための勉強をしていきます。

【VBA】2つのセルの内容を組み合わせて別のセルに出力する

      2016/12/11

VBA

スポンサーリンク

コード内容

セル内のデータが改行で区切られている場合

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操作を覚えるのに一番良いと思う本(ぼくはこれで覚えました)

 - VBA