• ベストアンサー

エクセルの文字列検索

Office2003のエクセルで例えば   A B 1 一 山 2 一 山 3 一 川 4 二 海 5 二 海 というような表があるとします。下のように  C D E 1一 山 川 2二 海 C1のセルに「一」を入力すると、対応する山と川をD1とE1の セルに表示してくれるような関数は無いでしょうか? 配列関数など色々探しましたが良いのが分かりません。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#79209
noname#79209
回答No.6

チョットだけシートの変更をすれば... A列とB列の間に列を挿入します。 1行目の上に1行、表題行を挿入します。 B2に以下の数式を入れ,、下までコピーします。 =IF(ROW()<>1,IF(A1=A2,B1+IF(C1<>C2,1,0),1),1)   A    B   C   キー1    キー2 1 一      山 2 一      山 3 一      川 4 二      海 5 二      海 A列B列C列を選択し、「データ」-「並び替え」をクリック。 第一優先列をA列、第一優先列をC列、「範囲の先頭行」で「タイトル行」をクリックして「・」を付け「OK」をクリックします。 E2に次の式を入れます。 =VLOOKUP(1,INDIRECT("$B$"&MATCH($D2,$A$2:$A$7,0)+1,TRUE):INDIRECT("$C$"&MATCH($D2,$A$2:$A$7,1)+1,TRUE),2,FALSE) F2に次の式を入れます。 =VLOOKUP(2,INDIRECT("$B$"&MATCH($D2,$A$2:$A$7,0)+1,TRUE):INDIRECT("$C$"&MATCH($D2,$A$2:$A$7,1)+1,TRUE),2,FALSE) E2とF2の違いは、「=VLOOKUP(1,」と「=VLOOKUP(2,」の違いだけです。 G2以降にも入れる場合は「=VLOOKUP(3,」などと1づつ増加させてください。 ただ、検索した値がないと「#N/A」が表示されてしまいます。

adam9021
質問者

お礼

おおっ!すごい!できました! 一旦この列だけを別シートにコピーしてやってます! 「#N/A」はISERROR関数で消します。 助かりましたー^^ありがとうございます!!

その他の回答 (10)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.11

#8です。 >元データは触りたくないので、一旦別シートにコピーした後にマクロでできますか? 一旦別シートにコピーすることを含めて、マクロでできます。 しかし、私もvizzarさんの意見がもっともだと思いますので、 紹介は控えます。

adam9021
質問者

お礼

回答ありがとうございます。 今回は関数で何とか解決できましたので 良しとします! ありがとうございました^^

noname#79209
noname#79209
回答No.10

#6です。 これは私だけのポリシーなのですが、エクセルでは出来うる限りマクロは使用せずすませるようにしています。 自分だけで使うなら良いのですが、他のエンドユーザーが使うような場合、使用しているPCのセキュリティーレベルによっては、 「マクロが入っている。ウイルスかもしれない。」という警告メッセージが表示されてしまいます。 エンドユーザーの中には、この「ウイルス」という語句に過剰反応して、「ウイルスが入っている!!」と騒ぐ人が必ずいますので...

adam9021
質問者

お礼

確かにvizzarさんのおっしゃられる通りだと思います。 私もユーザーからのヘルプではマクロを組むべきか悩む時があります。 ユーザーから、「前任者が作ってくれたマクロだけど、うまく動かないから見て」と言われたことがあって困った経験があります。 ユーザーヘルプの場合、必ず「これは私の特例ですので、別の方は対応できないです」と一言言ってますねー。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.9

#8で回答したものです。 もし、検索することが目的ではなく、 C,D,E・・列のようなデータ形式に変換したいという内容であれば、 エクセルの「並べ替え」「フィルタ」「マクロ」を使えば、 比較的簡単にできますが・・・ やっぱり、エクセルの関数で検索することが目的なのでしょうか?

adam9021
質問者

お礼

ふむふむ。。。 関数にこだわってはいないです。 関数だと無駄な処理なくすぐに表示されるから、他のユーザーにも 使えるかなって思いまして。。。 元データは触りたくないので、一旦別シートにコピーした後にマクロでできますか?

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.8

やっぱり、エクセル上で検索できないとダメですか? 検索した結果を使って、次の処理をする予定ですか? もし、そうではなく単に検索だけを簡単に実行できればいいのであれば、 私ならフリーの辞書ソフトPDIC用の辞書ファイルとして 変換して使います。 1)エクセルデータを,(カンマ)区切りのCSVファイルで保存 2)テキストエディターで[,]を[ /// ]に置換(1行テキスト形式) 3)PDICの辞書のコンバートでPDIC形式に変換   ここで、重複データは自動で削除され、同一見出しの複数データは   マージさせる事ができます。    とんちんかんな回答かも。その場合は無視してください。

adam9021
質問者

お礼

回答ありがとうございます! 一応No6さんの方法でできました。 CSVで保存するという方法は思いつきませんでしたー。 色々あるんですねー。 ただ、できればエクセルだけで解決したいところです。。。

noname#79209
noname#79209
回答No.7

#6です。補足を... B列が見えてしまって見栄えが悪いとお思いなら、数式を入力して下へコピーした後、B列の幅をゼロにしておけば良いでしょう。 E2、F2・・・に入れる式は、 =VLOOKUP(1,INDIRECT("$B$"&MATCH($D2,$A:$A,0)+1,TRUE):INDIRECT("$C$"&MATCH($D2,$A:$A,1)+1,TRUE),2,FALSE) と 「MATCH($D2,$A$2:$A$7,0)」の部分を2箇所「MATCH($D2,$A:$A,0)」とした方が、 行が限定されなくて良いでしょう。

adam9021
質問者

お礼

なるほどー こちらの関数を使ったほうが良さそうですね。 こちらにしてみますー^^ ありがとうございます!

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.5

#3です。 失礼しました。 重複するものは、一つにして表示させることも 条件にあったのを見落としていました。 ただ、関数だけでは、重複するものを除くことは、 非常に難しいと思われます。 作業セルを用いても、ネストの関係で限界があるのでは。 マクロなら、出来そうですが、 人に教えられるほど、知識が無いので、 アドバイスだけにしておきます。 changeイベントマクロというのが使えるかも。 参考までに

adam9021
質問者

お礼

ありがとうございます! そうなんですよー重複が厳しいですねー。 マクロですね。chengeイベントマクロというのは初めて聞きました。 勉強してみます!ありがとです^^

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

NO2です。 ご質問の解釈を誤りました事、お詫びします。 一つの同一項目を抽出する数式の為、山・山・川となりますので読み捨て下さい。

adam9021
質問者

お礼

いえいえ。回答ありがとうございます^^ もう少しなのですが、惜しい感じでした! まだ解決には至っていないですが、関数では厳しそうですねー

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.3

下記の数式で如何でしょう。 =IF(COLUMN()-3>COUNTIF($A:$A,$C1),"",INDIRECT("R"&MATCH($C1,$A:$A,0)-1+COLUMN()-3&"C2",0)) 必要なだけ縦横にコピーしてください。

adam9021
質問者

お礼

回答ありがとうございます! やはりNo.2さんと同じく、コピーしても E1が山になります・・・。川にはできないのでしょうか・・・。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

長い数式ですが、次の方法は如何でしょうか。 D1セルに=IF(COLUMN(A1)-1<COUNTIF(Sheet1!$A$1:$A$200,$C1), INDEX(Sheet1!$B$1:$B$200,SMALL(IF(Sheet1!$A$1:$A$200=$C1, ROW(Sheet1!$A$1:$A$200),999),COLUMN(A1))),"") を設定し、縦横にコピーして下さい。 数式は、配列数式の為、入力完了時にshift+crtl+enterキーを同時押下して下さい。

adam9021
質問者

お礼

回答ありがとうございます! 配列を横にコピーしてみましたが、E1に川が 出ません。E1も山になります。 なぜでしょう??

回答No.1

[vlookup]関数でできるのですが、 E1の川は表示できません。 A,Bのところのデータベース配列を見直すことをお勧めします。 そうすれば[vlookup]で十分対応できます。

adam9021
質問者

お礼

早速の回答ありがとうございます。 このままの表では難しいですか・・・。 元の表は変更することができないので、このままで 何とかできないかと模索中です。 ありがとうございました!

関連するQ&A

  • エクセルについて

    【sheet1】     A    B   C    D    E    F   G 1   1    ★   ●   ■   ◆    ☆   ◎ 2   2    海   山   川   陸    水   土 3   3    (1)   (2)   (3)   (4)    (5)   (6) 【sheet2】     A    B   C    D    E    F   G 1                      ◆  2   ☆              ★ 3   ■                  ●       ◎    sheet1に必要事項を記入します。 で、例えばですがsheet1のあるセルに「1」と入力すると、 行No.1に記入してある「★●■◆☆◎」がsheet2の一定のセルに自動的に 反映させたいのですが、関数で可能でしょうか? あるセルに「2」と入力した場合は、行No.2に該当するデータがsheet2に反映されます。 「★のところは→海」「●のところは→山」「■のところは→川」…といった感じで 自動的に反映させたいのですが。

  • エクセル数字と文字が入った列の積は?

    エクセルで下のような数字と文字が入ったセルがあります。    A  B  C D(A~Cの合計) E(重量) F(D×E)    1  2 | 2 | 2 | 6 | 2.5 | 15.0      2  - | - | - | 1SET | 21.0 | 21.0 3  4 | 4 | 4 | 12 | 3.0 | 36.0 2行目のが問題なのですが、SETの部分だけ省いてEの重量とかけてくれるような関数ってありますか?

  • 一定条件でセルの色が自動的に変わる(エクセル)

        A     B     C     D     E 1   ★ 2   海    あ    い     う     え 3   山    か    き     く     け 4   川    さ     し     す     せ 5   陸    た    ち     つ     て A1セルの★に「海」や「山」や「川」や「陸」と入力します。 例えば、★に「海」を入力したら、その横列にある「あ」「い」「う」「え」のセルに 自動的に色がつくようにすることは可能でしょう? ★に「山」を入力したら、その横列にある「か」「き」「く」「け」のセルに色が、 ★に「川」を入力したら、その横列にある「さ」「し」「す」「せ」のセルに色が、 ★に「陸」を入力したら、その横列にある「た」「ち」「つ」「て」のセルに色が、 といった感じにしたいのです。 恐らく「条件付き書式」を使用するのだと思いますが、 自動的にセルの色を変えたい行が500行近くあります。 なので、その条件付き書式をコピペ出来るとありがたいのですが。 どなたか教えてください!!!

  • エクセルの文字列の検索に関して

    また、エクセルに関しての質問です。 例えば  A B C D 1あ 1 2い 2 3う 3 4え 4 5お 5 6か 6 7き 7 8く 8 このような漢字で文字列が縦に入力されていて、  A B C D E 1あ 1   お 5 2い 2   う 3 3う 3 4え 4 5お 5 6か 6 7き 7 8く 8 このようにD列にある文字に対してA列にある文字で該当する文字を発見し横のBセルにある番号を取ってくるということがしたいです。 この場合だとD1は「お」なので、A列の上から見ていくとA5に「お」があるので、B5の数字「5」をEに入力といったような具合です。簡単なように見えますが、複数の文字列を横断的に検索することができません。 誰か詳しいお方お教え願います。

  • エクセル関数を使ってこんな事できますか?

    どなたかご存知の方がいらっしゃったら教えてください。 各セルに、下記の様なテキストが入力してあったとします。 A        B  C  D 山 川 海 太陽 川  海  山 太陽 Aの中から、B、Cに入力されているテキストを削除してDに表示 させることってできるのでしょうか? その場合、Dにはどんな数式を入れたらよいのでしょうか? 知っている方、よろしくお願いいたします。

  • エクセル: ジャンプで教えて下さい

    エクセル初心者です。教えて下さい。 Sheet1にデーターがあります。 A  B  C  D  E 1  2  3  4  5 山  川  海  花  木 Sheet2でデーターを抽出するようにしています。 (セルA1に数値入力するとA2にデーターを検索して表示。) A  B  C 4  花  ◎ ここでお教えいただきたいのですが、Sheet2のC1をクリックするとSheet2のA1セル「4」を認識してSheet1のD2のセル[花]にジャンプさせるにはどのようにすれば良いのでしょうか。マクロを使わない方法でお願いします。

  • エクセルの文字列と文字列のたし方。

    エクセルでb列の文字列とc列の文字列をたすしてd列に表す方法教えてください 例 b列  山  c列 川  d列 山川

  • エクセルで文字をカウントしたいのですが…

    どの関数を使えばいいのか分からなかったので質問させて頂きました。 例えばA1セル~D1セルに 1,2,3,4と入力した場合E1セルに「4」 1,1,1,2と入力した場合E1セルに「2」 2,2,3,4と入力した場合E1セルに「3」 となるような関数はないでしょうか? ようはA1,B1,C1,D1の4つのセルに何種類の数字が あるかをE1セルに出したいのです。 宜しくお願いします。

  • Excelで文字列を独自の二進数で表したい。

    A,B,C,D,Eのいずれかを含む文字が順不同でセルに入っているものから、 A=10000 B=1000 C=100 D=10 E=1 と置換して足した、二進数であらわしたり、逆にその二進数から文字列に戻したりしたいです。 (例:DAなら10010、EBCなら1101) VBAの自作関数を含めてExcelの関数でできる方法があればお教えくださると助かります。

  • ある文字の入ってる行の個数を求めたい。

      A  B  C         D 1  海  山  川    =OR(A1="山",B1="山",C1="山" 2  山  山  海    =OR(A2="山",B2="山",C2="山" 3  川  海  海    =OR(A3="山",B3="山",C3="山" 4               =COUNTIF(D1:D3),TRUE           上記の表で"山"が有るセルを含む行の個数を表示したい。 今は上記の表の脇に次のようにしてますが、もっと良い方法が、 あるかと思い質問します。宜しくお願いします。 =OR(A1="山",B1="山",C1="山" 1の行に"山"が有ればTRUEとして これを各行で行い=COUNTIF(D1:D3),TRUEで結果、”2”と行の個数を 求めてます   

専門家に質問してみよう