0

任意の助けをいただければ幸いです。これはよくある質問のように見えますが、vba では見つかりませんでした。これが私のベストショットです:

Dim oppositeRow As Long
.....
oppositeRow = WorksheetFunction.Match(ddate & campaign, "A3:B62", 0)
4

2 に答える 2

6

一致する結果が 1 つしかないことがわかっている場合は、Excel の数式として次の操作を実行できます。

=SUMPRODUCT(ROW(A2:A5), N("john"=A2:A5), N("smith"=B2:B5))

次のワークシートに適用されます。

      AB
1 最初最後
2 ボブ・スミス
3 ジョン・スミス    
4 ジョン・ブラウン
5サムブラウン

これは 3 を返します (john smith は 3 行目にあるため)。ヘッダー行があるため、テーブルにインデックスを取得するには 1 を引く必要があります。

これは、3 つのベクトルを乗算することで機能します。

  1. 最初の ROW(A2:A5) は {2,3,4,5} です。
  2. 2 番目の N("john"=A2:A5) は {0,1,1,0} です。N() はベクトル {false,true,true,false} を取り、それを数値に変換します。
  3. 3 番目の N("smith"=B2:B5) は {1,1,0,0} です。N() と同じ扱いです。

ベクトルを要素ごとに乗算すると {0,3,0,0} が得られ、その合計は 3 です。

このような複雑な式を VBA で表現するのはやや面倒なので、純粋に VBA で行いたい場合は、カウンターを使用してループを実行し、条件に一致する行が見つかったインデックスを記録することをお勧めします。

編集:ここにいくつかのVBAコードがあります:

Dim index as Integer
For index = 1 to 4
    If Range("A1").Offset(index).Value = "john" And Range("B1").Offset(index).Value = "smith" Then
        Exit For
    End If
Next index
于 2013-03-01T20:05:24.810 に答える
3

DGET行番号を表すために使用される列をワークシートに追加する限り、式を使用してこれを実現できます。

行 ID 列 1 列 2
1 ああああ
2 ビービー
3cc
4 D dd
5 ええ

式は次のとおりです。

=DGET(A1:C6;1;E1:F2)

これは、上記のデータが次の場所にあることを前提としてA1:C6 います。検索条件を含む以下のデータ ブロックは、次の場所に配置されています。E1:F2

列 1 列 2
Ccc

上記の式の戻り値DGETは「3」です。

数式を実行する前に、VBA メソッドが適切な検索条件をセルに配置する場合は、純粋に VBA でこれを行うことができますE2F2DGET

于 2013-03-01T20:24:57.103 に答える