次のような一連のセルがあるとします。
A
1 Foo
2 Bar
3 Hello
4 World
5 Random Text
私がやりたいのは、数式の結果を別のセルに入力することです:
Foo, Bar, Hello, World, Random Text
これで、2 つのセルを次のように連結する方法がわかりました。
=A1&", "&A2
しかし、シリーズ全体で同じことを行うにはどうすればよいですか?
次のような一連のセルがあるとします。
A
1 Foo
2 Bar
3 Hello
4 World
5 Random Text
私がやりたいのは、数式の結果を別のセルに入力することです:
Foo, Bar, Hello, World, Random Text
これで、2 つのセルを次のように連結する方法がわかりました。
=A1&", "&A2
しかし、シリーズ全体で同じことを行うにはどうすればよいですか?
B1で=A1
、次に=B1&", "&A2
B2 で、コピー ダウンするとうまくいくようです。
セル B1 にカンマとスペースを入れて、次の式を使用します。
=CONCATENATE(A1,B1,A2,B1,A3,B1,A4, B1, A5)
次の質問には、VBA オプションや数式など、いくつかの回答を試すことができます。
使えそうな機能をご紹介します。これをワークブック コード モジュールに入れるだけで、次のようにセルに入力できます。
=JoinRange(A1:A6)
または=JoinRange(A2:D15)
、など
Public Function JoinRange(ByVal rng As Range) As String
Dim dlmt As String: dlmt = ","
Dim multiRow As Boolean: multiRow = rng.Rows.Count > 1
Dim r As Long, c As Long
Select Case rng.Columns.Count
Case 1
If multiRow Then
JoinRange = Join(Application.WorksheetFunction.Transpose(rng), dlmt)
Else:
'a single cell
JoinRange = rng
End If
Case Is > 1
If multiRow Then
'a 2d range of cells:
For r = 1 To rng.Rows.Count
For c = 1 To rng.Columns.Count
JoinRange = JoinRange & rng(r, c) & dlmt
Next
Next
JoinRange = Left(JoinRange, Len(JoinRange) - 1)
Else:
JoinRange = Join(Application.WorksheetFunction.Transpose( _
Application.WorksheetFunction.Transpose(rng)), dlmt)
End If
Case Else
End Select
End Function