web-dev-qa-db-ja.com

Excel-参照番号が一致するセルを連結する

多くの行があるワークシートがあります。一部の行は参照番号を共有しています(たとえば、列Aに含まれています)。私がやりたいのは、ある行が別の行と参照番号を共有している場合、たとえば列Bに含まれるデータを、それらの両方の行のデータを、たとえば列Cの新しいセルに連結したいということです。 。

例:

Col A      Col B         Col C                    
12345     Robert      Robert, David      
12345     David        Chris                    
54321     Chris                                     

4
Lewes Dev

これがVBAアプローチです。 Excel2007以降を想定しています。リボン以前のバージョンのExcelを使用している場合、最初のいくつかの手順は異なります。

  1. [開発者]タブを有効にする

  2. リボンの[開発者]タブで[VisualBasic]をクリックします

  3. 「VBAProject(whatever-your-sheet-is-named.xls *)」を右クリックし、コンテキストメニューで[挿入]-> [モジュール]を実行します

  4. このコードを貼り付けます

    _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
    _
  5. 次のような式を使用して、ワークシート関数を使用します(名前を変更してください)。

    _=allquixotic(A1,$A$1:$A$15,$B$1:$B$15,true)
    _
  6. 塗りつぶしハンドルを使用して、すべてのセルに数式を入力します

パラメータは次のとおりです。

=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のいずれかに複数の列を指定すると、左端の列のみが使用されます。

2
allquixotic