- ベストアンサー
エクセルで配列の中から指定文字を検索
エクセルで配列の中から指定の文字を検索し、そのセルのアドレスを求めたいのですが、マクロを使わず一般の関数で出来ないでしょうか? 既にある質問かも知れませんが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#03です。同じ値が複数ある場合に対応するようにしました。 A1:D3の配列でA8セルの値と一致する一番左上のセルのアドレスを表示する式です。 =IF(COUNTIF(A1:D3,A8)=0,"該当なし",ADDRESS(SUMPRODUCT((A1:D3=A8)*ROW(A1:D3)),MATCH(A8,INDIRECT("R"&SUMPRODUCT((A1:D3=A8)*ROW(A1:D3)),0),0),1,1))
その他の回答 (3)
- zap35
- ベストアンサー率44% (1383/3079)
A1:D3の配列でA8セルの値と一致するセルのアドレスを表示するなら、次の式です。 =ADDRESS(SUMPRODUCT((A1:D3=A8)*ROW(A1:D3)),SUMPRODUCT((A1:D3=A8)*COLUMN(A1:D3)),1,1) でも一致する値がなかったり、複数ある場合は期待通りにならないので以下のようなエラー処理が必要です =IF(COUNTIF(A1:D3,A8)=0,"該当なし",IF(COUNTIF(A1:D3,A8)=1,ADDRESS(SUMPRODUCT((A1:D3=A8)*ROW(A1:D3)),SUMPRODUCT((A1:D3=A8)*COLUMN(A1:D3)),1,1),"複数あります")) やはりマクロを使用するほうが制約なくできると思います。
- maron--5
- ベストアンサー率36% (321/877)
A B C D E 1 あ A a C B3 2 い B b 3 う C c 4 え D e ◆同じ文字が無ければ ★D1の文字のアドレスです E1=ADDRESS(SUM(INDEX(EXACT(A1:C5,D1)*ROW(A1:C5),)),SUM(INDEX(EXACT(A1:C5,D1)*COLUMN(A1:C5),)),4)
お礼
maron-5さま ありがとうございました。 一つずつ関数を理解しながら使用してみます。
- ham_kamo
- ベストアンサー率55% (659/1197)
配列、というのは複数の行列にわたるセルのことでしょうか。 たとえばA列だけの中から"A"という文字を検索するのであれば、 =IF(COUNTIF(A:A,"A")>0,ADDRESS(MATCH("A",A:A,0),1,4),"") という感じでできます。行列が複数に及ぶのであれば、ちょっとわかりません。(マクロでユーザ定義関数を作れば別ですが)
お礼
ham_kamoさま 早速回答いただきまして有り難うございます。 今回は1列だけなのでそのまま使用させて貰います。 やはりマクロを勉強しないとダメですね。
お礼
zap35さま 早速の回答、感謝に堪えません。 特殊な技を教えて戴いたような気がします。