多くの行があるワークシートがあります。一部の行は参照番号を共有しています(たとえば、列Aに含まれています)。私がやりたいのは、ある行が別の行と参照番号を共有している場合、たとえば列Bに含まれるデータを、それらの両方の行のデータを、たとえば列Cの新しいセルに連結したいということです。 。
例:
Col A Col B Col C
12345 Robert Robert, David
12345 David Chris
54321 Chris
これがVBAアプローチです。 Excel2007以降を想定しています。リボン以前のバージョンのExcelを使用している場合、最初のいくつかの手順は異なります。
リボンの[開発者]タブで[VisualBasic]をクリックします
「VBAProject(whatever-your-sheet-is-named.xls *)」を右クリックし、コンテキストメニューで[挿入]-> [モジュール]を実行します
このコードを貼り付けます
_Option Explicit
Function allquixotic(param As Variant, search As Range, values As Range, Optional absolute As Boolean = False) As String
Dim sep As String, retval As String
Dim i As Integer, rownum As Integer
Dim look As Range, j As Range
sep = ", "
retval = ""
For i = 1 To search.Rows.Count
Set look = search.Cells(i, 1)
If absolute Then
rownum = look.Row
Else
rownum = i
End If
If look.Value = param Then
If absolute Then
Set j = values.Worksheet.Cells(rownum, values.Column)
Else
Set j = values.Cells(i, 1)
End If
retval = IIf(retval = "", retval & j.Value, retval & sep & j.Value)
End If
Next
allquixotic = retval
End Function
_
次のような式を使用して、ワークシート関数を使用します(名前を変更してください)。
_=allquixotic(A1,$A$1:$A$15,$B$1:$B$15,true)
_
塗りつぶしハンドルを使用して、すべてのセルに数式を入力します
パラメータは次のとおりです。
=allquixotic(look_cell, key_range, value_range, absolute)
_look_cell
_:最初のパラメーターは、単一セルまたは値リテラルである必要があります。有効な入力には、_3
_、_$6.25
_、_"Hello"
_などが含まれます。これは、_key_range
_で検索しようとしている値です。
_key_range
_:これはrangeのセル(複数のセル)である必要があります。 absolute
がtrueの場合、これがcontiguousの範囲でない限り、非常に奇妙な結果が得られます(すべての値が連続した行にあります)。
_value_range
_:これはrangeのセル(複数のセル)である必要があります。 absolute
がtrueの場合、これがcontiguousの範囲でない限り、非常に奇妙な結果が得られます(すべての値が連続した行にあります)。
absolute
:trueの場合、_key_range
_の各「見つかった」行の絶対行番号(スプレッドシート全体の行数に対して)を使用します_value_range
_から値を抽出する行を決定します。 falseの場合、相対数を使用します。たとえば、_key_range
_のthird行で一致が見つかった場合、_value_range
_のthird行から値を抽出します。推奨値はFALSEです。または、省略してデフォルトに設定することもできます。
注:この関数は、キーと値の範囲が列にある場合をサポートしていませんが、それに合わせるのはかなり簡単です。
また、key_rangeまたはvalue_rangeのいずれかに複数の列を指定すると、左端の列のみが使用されます。