• ベストアンサー

Excelの質問です。VLOOKUP関数とOR検索を、組み合わせて用いるようなことはできないでしょうか?

Excelの質問です。今、以下のようなデータがA列とB列に、1000行ぐらいずらっと並んでいます。 sp1|春の季語[あしび(馬酔木)] sp2|春の季語[かげろふ(陽炎)] sp3|春の季語[きじ(雉子)] sp4|春の季語[ざんせつ(残雪)] sp5|春の季語[ふぢのはな(藤の花)] sp6|春の季語[やまぶき(山吹)] ・ ・ ・ su1|夏の季語[あぢさい(紫陽花)] su2|夏の季語[かたつむり(蝸牛)] su3|夏の季語[くものみね(雲の峰)] su4|夏の季語[ころもがへ(衣替)] su5|夏の季語[さみだれ(五月雨)] su6|夏の季語[ばんりょく(万緑)] su7|夏の季語[ひまはり(向日葵)] su8|夏の季語[ほたる(蛍)] su9|夏の季語[ほととぎす(時鳥)] ・ ・ ・ au1|秋の季語[あかとんぼ(赤蜻蛉)] au2|秋の季語[あまのがわ(天の川)] au3|秋の季語[いわしぐも(鰯雲)] au4|秋の季語[かまきり(蟷螂)] au5|秋の季語[きり(霧)] au6|秋の季語[すすき(薄)] au7|秋の季語[まんじゅしゃげ(曼珠沙華)] au8|秋の季語[めいげつ(明月)] ・ ・ ・ wi1|冬の季語[おちば(落ち葉)] wi2|冬の季語[かも(鴨)] wi3|冬の季語[かれの(枯れ野)] wi4|冬の季語[こがらし(木枯し)] wi5|冬の季語[ゆきのこる(雪残る)] ・ ・ ・ シート名は<季語・枕詞>、ブック名は『俳句.xls』です。 A列には「sp1、sp2・・・su1、su2・・・au1、au2、・・・wi1、wi2・・・」といったIDのようなデータ、B列には「春の季語・・・」「夏の季語・・・」「秋の季語・・・」「冬の季語・・・」といったデータが入っています。 皆さまのお助け↓ http://okwave.jp/qa5096109.html により、このデータの中から「春の季語」「夏の季語」「秋の季語」「冬の季語」といった、“種類のデータ”のみを抽出する方法は、理解することはできました。 その節はありがとうございました(>_<) ただ、実は隣の列も、抽出しなければならない事態が生じまして(ToT) 皆様に教えていただいた方法により、別シート<季語・枕詞の種類>のA列に、「春の季語」「夏の季語」「秋の季語」「冬の季語」・・・といった“種類のデータ”は、並べることができました。 ここから、<季語・枕詞>シートのB列(季語のデータ)と、<季語・枕詞の種類>シートのA列(種類のデータ)を比較し、データが一致(完全一致ではなく部分一致でも構いません)すれば、<季語・枕詞の種類>シートのB列に、<季語・枕詞>シートのA列(ID)を、転記することはできないでしょうか? 例えば種類のデータとして<季語・枕詞の種類>シートのA列にある 「夏の季語」 に、部分一致する<季語・枕詞>シートのB列のデータは、 su1|夏の季語[あぢさい(紫陽花)] su2|夏の季語[かたつむり(蝸牛)] su3|夏の季語[くものみね(雲の峰)] ・ ・ ・ と、膨大にあります。 その膨大なデータ中の、一つだけでもいいのです。例えば、検索を開始して、最初に部分一致したデータが「su3|夏の季語[くものみね(雲の峰)]」であったならば、<季語・枕詞の種類>シートのA列とB列には、 夏の季語|su3 というように、転記したいのです。 “su”という情報が欲しいだけなので、三文字目の番号は、特に何でも構わないのです。 VLOOKUP関数を使おうと思ったのですが、部分一致検索で、VLOOKUPを使おうとしてもうまくいきませんでして・・・(ToT) どうすれば、<季語・枕詞の種類>シートのB列に、<季語・枕詞>シートのA列(ID)を、転記できるでしょうか? 皆様のお力をお借しいただければ幸いです<m(__)m>

  • dj-s
  • お礼率81% (228/280)

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

回答5です。 =IF(OR(A1="",COUNTIF(季語・枕詞!B:B,A1&"*")=0),"",LEFT(INDIRECT("季語・枕詞!A"&MATCH(A1&"*",季語・枕詞!B:B,0)),2)) LEFT関数はLEFT(文字列、文字数)のように使われますね。 上式ではINDIRECT関数を使ってその文字列を季語・枕詞のシートから取り出しています。そこでAとあるのはA列を意味しており、MATCH関数でA1セルに書かれた文字を先頭に含む文字を季語・枕詞のシートのB列で検索し、その行を取り出しています。 表示したINDIRECT関数の全体では季語・枕詞シートのA列でのその行を求め、そこにある文字列を取り出していることになります。 INDIRECT関数を使うことでA列の例えば3行、4行を取り出す場合には単に=A3や=A4とすればよいのですが3や4が定まっていない場合、例えばB1セルに入力された数値の行でA列でのデータを取り出したい場合には普通の書き方ではできません。その場合には、例えば=INDIRECT("A"&B1)のような式を使うことで解決することができます。この場合に""を省略することはできません。

dj-s
質問者

お礼

なんとなくわかりました! "季語・枕詞!A"と、MATCH(A1&"*",季語・枕詞!B:B,0)は、“&”でペアになっており、「MATCH(A1&"*",季語・枕詞!B:B,0)を満たすA列のデータを返す。」という意味ですね(^_^;) ありがとうございます<m(__)m>

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#4です。 式 =IF(AND(A2="夏の季語",COUNTIF(C2,"*かたつむり*")>=1),MAX($E$1:E1)+1,"") は(最初に式を入れる行は) E2セルに入れるのです。E1に入れているので循環参照になるのです。

dj-s
質問者

お礼

私の勘違いでした、すいません(>_<) うまくいきました、ありがとうございます<m(__)m>

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答No3です。春、夏、秋、冬だけが表示されていたので、簡単な式で済むような気がしました。 たくさんの種類があるのでしたら季語・枕詞の種類のシートでB1セルには次の式を入力し、下方にオートフィルドラッグします。 =IF(OR(A1="",COUNTIF(季語・枕詞!B:B,A1&"*")=0),"",LEFT(INDIRECT("季語・枕詞!A"&MATCH(A1&"*",季語・枕詞!B:B,0)),2)) この式ではIDの頭の2文字が表示されるようになっています。 3文字のケースがあるのでしたらそれを考慮した式にすることが必要です。

dj-s
質問者

お礼

うまくいきました(^_^;) ありがとうございます<m(__)m> A1セルが空白、もしくは<季語・枕詞>シートに“A1&*”の文字列が一つもない(=0)場合、空白を返して、偽の場合は、LEFT関数で左から2文字切り取るみたいですね・・・でも、INDIRECT関数の使い方が、よくわかりませんでして・・・「"季語・枕詞!A"」とは、どういう意味なのでしょうか? よくわからないので、 LEFT(INDIRECT(MATCH(A1&"*",季語・枕詞!B:B,0)),2)) と、削除してみたら、エラーになってしまいました(ToT) 普通に<季語・枕詞>シートのA列全部を選択しようとしたら、「季語・枕詞!A:A」となり、これまたエラーになってしまいました・・・「"季語・枕詞!A"」における、一つだけポツンとある“A”は、一体何なのでしょうか? すいません、お暇な時で構いませんので、再度ご回答いただれば幸いです(>_<)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#1です補足して貰っても、質問の内容(何がやりたいか)のことは十分書かず、自分の場合のことばかり(こんなの不要)書いている。 ーー A列「夏の季語」で、C列「かたつむり」を含む!行を抜き出したいと 勝手に解釈して、 例データ Sheet1 A列   B列(空白  C列 E列 第2行目からデータとする 夏の季語 かたつむり(蝸牛)の姿 1 秋の季語 すすき 夏の季語 とんぼのはね 冬の季語 雁の群れ 秋の季語 かたつむりの色 夏の季語 歩むかたつむり 2 E列は =IF(AND(A2="夏の季語",COUNTIF(C2,"*かたつむり*")>=1),MAX($E$1:E1)+1,"") と入れて下方向に式複写。 条件に合った行に連番を振った。 Sheet2で A2の式 =INDEX(Sheet1!$A$1:$D$100,MATCH(ROW()-1,Sheet1!$E$1:$E$100,0),1) B2の式 =INDEX(Sheet1!$A$1:$D$100,MATCH(ROW()-1,Sheet1!$E$1:$E$100,0),3) 最後の引数はSheet1での、データの有る列の番号を意味する。 以上「imogasi方式」。

dj-s
質問者

お礼

う~ん、うまくいかないですね(>_<) imogasiさんのおっしゃる通りに、A列に種類名のデータ、B列は空白、C列に区切り文字“[”で区切った、種類名より後ろの文字列のデータ、D列は空白、E列に、 =IF(AND(A2="夏の季語",COUNTIF(C2,"*かたつむり*")>=1),MAX($E$1:E1)+1,"") を入力したのですが、循環参照の警告が出てきてしまいまして・・・

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

季語・枕詞の種類のシートのB1セルに次の式を入力して下方にオートフィルドラッグすればよいでしょう。 =IF(A1="","",IF(A1="春の季語","sp",IF(A1="夏の季語","su",IF(A1="秋の季語","au",IF(A1="冬の季語","wi","")))))

dj-s
質問者

お礼

これまたすごい関数ですね、IF関数がすごい絡み合ってます・・・こんなの初めてみました(^_^;) もし、A1が空白であれば、空白をそのまま返して、空白ではなく「春の季語」という文字列があれば、“sp”を返して、ない場合は・・・というように続いていくみたいですね。 ただ、私の質問の仕方が悪かったのですが、種類が100や200もありそうな状況ですと、関数を入力する手間が、ものすごく大変なような気がします・・・

回答No.2

リンク先はよくわからなかったが、たたき台で D1セルに 検索文字(夏の季語) E1セルに =IF($D1="","",LEFT(INDEX(A:A,MATCH("*"&$D1&"*",$B:$B,0)),2)) C1:D1セルを別シートへ切りとって貼りつけ

dj-s
質問者

お礼

すごいやり方ですね! INDEX関数は詳しく知らなかったので、調べたところ、 INDEX(配列,行番号,列番号,領域番号) http://excel.onushi.com/function/f-index.htm ということみたいで(^_^;) CoalTarさんが回答していただいた関数は、列番号と領域番号が省略されているみたいですね・・・A列のデータの中から、B列が"*"&$D1&"*"にマッチする行があれば、A列の行のデータを、Left関数で左から2文字切り取って、Eに表示させるのですね~ありがとうございます(>_<)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問文が長すぎて、読む気もしない。何とか簡略に。 例の数を減らし、1例でよいから、どういう思考プロセスでデータがどうだから、こうしたいと言うふうに説明を短くしてほしい。 VLOOUP関数(のTRUE型に限って)は第1引数の語句が、第3引数の検索データを探す関数であるのは知ってますね。 また部分一致検索はと出来ません。 その場合第1引数の内容によって検索表を切り替えたい場合は有るでしょう。その場合は第1引数でIF関数で判断して表が2,3程度に分かれるなら、VLOOKUP関数式の中に組み込めるでしょう。 === この質問は何なんだ?と読んでみると、A列の「AuXX」(Auがついている行)を別シートに、A,B列とも抜き出したいのか。 それならエクセルの関数の、抜き出し問題で、毎日のように質問がある、見飽きた問題だ。 そうなら質問の書き方がガラっと変わるべき。前半など要らない。 Googleで「imogasi方式」で照会すれば、何百と同類の質問と、imogasi方式でない他の方の解法も出てくる。 ===== ●抜き出し問題なのかどうか補足してください。 ーー それなら例は a 千葉市 b 横浜市 a 甲府市 c 藤沢市 からaの分を抜き出し a 千葉市 a 甲府市 を(別シートに)出したいと書くとおなじだよ。 自分の例を抽象化して、パターン化せよ。

dj-s
質問者

お礼

すいません、もっと短くするように気をつけます<m(__)m> やっぱVLOOKUは使えないみたいですね・・・。 確かに、ただの抜き出し問題かもしれませんね・・・(^_^;) <季語・枕詞の種類>シートのA列は、 春の季語 夏の季語 秋の季語 ・ ・ ・ と並んでいますが、隣のB列は、空白の状態です。 <季語・枕詞>シートから、データを抜き出したいのですが、<季語・枕詞>のB列には、「夏の季語[かたつむり(蝸牛)]」など、種類だけでなく、余計な部分([かたつむり(蝸牛)]等)がくっついているんですよね・・・。 でも、imogasiさんの助言で思いつきました、削除すればいいんですよね。“[*]”を“空白”に置換して、<季語・枕詞>シートのB列を、種類だけの文字列にして、IDのある<季語・枕詞>シートのA列も、後ろの数字の部分を削除すれば、ちょっと時間がかかりそうですが、VLOOKUP関数でもうまくいきそうです(^_^;)

関連するQ&A

  • 春、夏、秋、冬の季語を教えてください?

    春、夏、秋、冬を4つをテーマに詩や俳句などを書きたいと思います。 春、夏、秋、冬で詩や俳句にしやすい季語を教えてください。 また、分かりやすく見やすい季語辞典があれば教えてください。

  • エクセルのVLOOKUP関数で・・・

    3時間ほど色々頑張ったのですが、もうお手上げなので教えて下さい・・・。 エクセルでシートが2つあり、シート2から一致するデータのみをシート1に持って行きたいのです。 具体的にはシート1には「F列/カナ氏名・G列/漢字氏名・H列/顧客番号・I列/生年月日」が設定されています。 ただしH列には顧客番号が入力されていません。 シート2より生年月日をキーにして引っ張ってくる予定です。 シート1には1000件データがあり、シート2に載っている該当者が200件程ヒットする予定です。 シート2には「A列/生年月日・B列/カナ氏名・C列/漢字氏名・E列/顧客番号」が設定されています。 仮に1行目からデータが入っているものとして、シート1のH1のセルに次の式を入れました。 =VLOOKUP(I1,'シート2'!範囲,5,FALSE) 範囲には実際の範囲を指定し、5列目がシート2の生年月日なので合ってると思うのですが・・・。 エラーは#N/Aというのが出てしまいます。 何処に問題があるのか分かりません。 説明が下手かもしれませんが、分かる方教えて下さい!

  • 「春」「夏」「秋」「冬」はそのまま季語ですか?

    タイトルの通りですが、 「春」「夏」「秋」「冬」はそのまま季語ですか? よく「 秋の夜」などの季語を見かけますが、 季節もそのままで季語になるのでしょうか。

  • エクセル MATCH関数について

    エクセル2013の練習でMATCH関数とINDEX関数を利用した データを作っていました。 添付した画像のD79でMATCH関数を使って番号を表示しています。 D79に入力した式は=MATCH(C79,B73:B76)です。 指定の行はB73~B76までの4行で、春、夏、秋、冬の順番で並んでいますが C79に春と入力すると、順番としては1番目の春が何故か3と表示されます。 他の夏、秋、冬は順番通り2,3,4と結果が表示されます。 シートの設定を変にしてしまったのかもしれないと新規で開いて試しましたが結果は同じでした。 MATCH関数の検索を行ではなく列側に変えて試しもしましたが、結果は同じでした。 春以外の言葉や数字だとこのようなことは起こりません。 また、リストにしても直接打ち込みにしても同じ結果でした。 この現象を春を使用しない以外に回避する方法がありますでしょうか? 宜しくお願い致します。

  • 関数 or マクロ(エクセル)

    行の項目と列の項目を検索して重なる部分のデータを拾いたいのですがどうもうまくいきません。初歩的なことかもしれませんが、VLOOKUPとHLOOKUP関数をあわせたようなもの。LOOKUPウィザードでもやってみるのですがうまくいかないのでよろしくお願いします。(最終的にVBAでやりたいです) 元のデータは、(Sheet3)にあって(Sheet2)で項目を並べ縦と横の項目に一致するデータを持ってきたいです。 Sheet3にあるデータは、別のブックよりVBAで検索したデータを持ってきています。 また、Sheet1、2ともその都度行数(検索項目数)が変わるので、できればデータシートの行数にあわせて行きたいのですが・・・こうなるとVBAになると思い挑戦しているのですがこれがまたうまくいきません。 で、データの行数にあわせて拾い出し、A列で最終行を検索して、L列~W列の各列の3行目に、5行目~最終行までの合計を取ろうと思っています。 説明が下手ですみませんが、よろしくお願いします。 環境:Win2000、98 Office2000です。

  • エクセルのVLOOKUP関数についての質問です。

    エクセルのVLOOKUP関数についての質問です。 Sheet1、Sheet2、Sheet3が3種類あります。 例えば、Sheet3は$B$5:$E$54まで下記のようなデータが入っています。 B       C     D      E 東京ホテル  品川   03-111222  03-111333 大阪ホテル  梅田   06-555666  06-555777  ~ Sheet1のB1にドロップダウンを作り、Sheet3のB列にあるホテル名を選べるようにする。(ここまではできています。) ドロップダウンで「東京ホテル」と選ぶと、Sheet3のD1の情報(03-111222)をSheet2のH1のところに自動表示したい。 追伸 Sheet2のH1に記載すべきVLOOKUPプログラムが誤っているため、 Sheet2のH1には#N/AというエラーMSGが出ます。 今日丸1日色々と試したのですが、実現できませんので、 何卒お力をお貸しください。

  • 「~か」で終わる季語

    春の季語として「うららか」「あたたか」「のどか」、秋の季語として「さわやか」「ひややか」があるようなのですが、これに相当する冬と秋の季語ってありますか?

  • エクセルで関数でお聞きします。

    いつもお世話になっています。エクセルで、データを簡単にまとめたいのですが、こんな事が出来る方法がありましたら是非ご教授下さい。 Sheet1              Sheet2     A    B             A    B     1   ++   ああ        1   ++   ああ 2   --   いい        4   ++   ええ 3   **   うう         9   ++   おお 4   ++   ええ 5   //   おお 6   --   ああ 7   **   ああ 8   //   いい 9   ++   おお 10  **   いい 見づらくて申し訳ありませんが、 (1)例えばシート1の中でA列で++と入力された行だけをシート2に飛ばしたい。 ※実際は文字の完全一致では無く頭文字の一致で行いたいです。 (2)シート1で、B列の【ああ】と【いい】と【うう】と入力された個数だけを列の一番下に合計で表示したい 以上どうかご教授ください。

  • Vlookup関数で検索結果がエラーになってしまう

    お世話になります。 Vlookup関数の質問となります。 =VLOOKUP(C2,Sheet2!$A$2:$E$685,1,FALSE) 検索値  →リストを使用(元データはSheet2の指定したセル範囲の表の2列目のデータ) 範囲 →Sheet2の特定のセル範囲 列番号 →1(ここは100-01、100-02などの番号が入力されています) 検索方法 →false(完全一致) この式で「#N/Aエラー」が発生してしまいます。 単純に「氏名」から「社員番号」を引っ張りたいだけなのですが、 なんでエラーになるのでしょうか? 範囲に指定した表には空白行はありますが、書式設定などは特に問題はないです。 恥ずかしい質問なのは十分に理解していますが、 教えて頂きたく思います。 よろしくお願い致します。

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

専門家に質問してみよう