0

次のようなテーブルがあります。

102938 bob
038128 Marc
398401 Tom
298421 Jim
102938 Alex
102938 Junior
209381 Rex
398401 Oby

=sumif(A:A, 102938,B:B)結果として「bobAlexJunior」を返すようなものを作りたいです。sumただし、文字列ではなく数値で機能するため、これは機能しません。ルックアップを使用すると、文字列で機能しますが、すべての行ではなく最初の行のみが検索されます。

この問題を解決する方法についてのアイデアはありますか?

4

3 に答える 3

0

私の他の回答に対するあなたのコメントを考慮した別のアプローチがあります(1つはコード付きの名前のリストを含み、もう1つは名前の連結リストを含む一意のコードのリストを含む2つのシートがあると説明しました) 。

範囲とコードを受け入れ、連結された名前の文字列を返すカスタム関数を作成できます。

次のVBAをモジュールに貼り付けます(カスタム関数の作成に慣れていない場合は、このリンクを参照してください)。

Function NamesWithCode(PeopleCodes As Range, CodeToMatch As String)
    Dim Result As String
    For Each Row In PeopleCodes.Rows
        If Row = CodeToMatch Then
            Result = Result & Row.Offset(0, 1)
        End If
    Next
    NamesWithCode = Result
End Function

最初のワークシートが「名前」と呼ばれ、指定したような2つの列があるとします。

102938  bob
38128   Marc
398401  Tom
298421  Jim
102938  Alex
102938  Junior
209381  Rex
398401  Oby

2番目のワークシート(「コード」など)では、新しいNamesWithCode関数を使用して、最初のワークシートからテーブル全体と各行を検索するコードを渡すことにより、各コードの名前リストを検索できます。

=NamesWithCode(Names!$A$1:$A$8, A2)

したがって、出力は次のようになります。

Code    Names With Code
102938  bobAlexJunior
38128   Marc
398401  TomOby
298421  Jim
于 2012-11-19T00:59:36.840 に答える
0

これは必ずしも特に洗練されたものではありませんが、出発点としては適切かもしれません。あなたの要件を正しく理解している場合、それは次の目標に要約されます。

  1. 特定の行を連結文字列に含めるかどうかを決定します (たとえば、左の列 = 102938 の場合)

  2. 2 列目のテキストを連結します (ただし、条件に一致する行のみ)。

Excel の CONCATENATE 関数は範囲を受け入れないようです (各パラメーターの個々のセル参照のみ)。多数の行の場合、各セルを手動で入力するのは明らかに面倒なので、段階的に機能する別の列を追加することを検討します。

たとえば、列 A の数値と列 B の名前を使用して、累積連結文字列となる 3 番目の列を作成します。

セル C1:

=IF(A1=102938,B1,"")

セル C2:

=IF(A2=102938,CONCATENATE(C1, B2),C1)

セル C3、C4 などは、C2 の数式を下方向に繰り返します。

したがって、テーブルは次のようになります。

102938      bob     bob
38128       Marc    bob
398401      Tom     bob
298421      Jim     bob
102938      Alex    bobAlex
102938      Junior  bobAlexJunior
209381      Rex     bobAlexJunior
398401      Oby     bobAlexJunior

次に、最後の行を結果として選択するだけです。

于 2012-11-18T23:00:27.823 に答える