• ベストアンサー

エクセルで、文字列を一括変換したものを表示したい

どなたか教えてください(涙) エクセルで、特定の文字列を含む文字列を一括変換したもの を別のセルに表示したいんです。 今までは、検索→置換 とか フィルタをかけてコピペ を繰り返して処理していたのですが、処理量が増えてきたもので、マクロで処理できるようにしたくて…。 マクロの自動登録でなんとかできるかと格闘したり、過去の質問も読んでみたのですが、解決できまでんでした。 やりたいのは、下記のようなことです。 A列に 青菜豚肉ひよこ豆人参玉葱中華だし などなど料理の素材が列記されています。 そこに『豚肉』を含んでいれば、B列の同じ行に『1』と表示したい。 そこに『バター』か『牛乳』のいずれかを含んでいれば、B列の同じ行に『2』と表示したい。 そこに『塩』と『醤油』両方を含んでいれば、B列の同じ行に『3』と表示したい。 こんな感じで、A列の文字列に含まれる内容によって、B列に表示させる番号を変えたいんです。 拙い説明でスミマセン(汗) 良いアイデアないでしょうか? どなたかご教授ください。よろしくお願いします。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

こんなのはどうでしょう。 シート上に検索文字列とその文字があった場合に表示したい値を表として置いておきます(添付の図ではD1:E5)。 検索対象がA1から入っているとして、B1に↓を入れてShit+Ctrl+Enterで配列数式として確定します。 =MAX(ISNUMBER(FIND($D$1:$D$5,$A1))*$E$1:$E$5) 複数の検索文字列が存在する場合は、表示させたい値のうち一番大きい値を表示しています。一つも検索文字が含まれていない場合は0を表示します。

tamanegionion
質問者

お礼

解決できました! マクロ使わなくても関数でなんとかなるのですね。全然思いつきませんでした。 元データを加工整理する必要はあったのですが、求めていた結果をえることができました。 ありがとうございました!

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 アイデアを考えようにも、元となる情報が不足しております。 >そこに『豚肉』を含んでいれば、B列の同じ行に『1』と表示したい。 >そこに『バター』か『牛乳』のいずれかを含んでいれば、B列の同じ行に『2』と表示したい。 >そこに『塩』と『醤油』両方を含んでいれば、B列の同じ行に『3』と表示したい。 との事ですが、例えば、『豚ばら肉』という文字列や『ブタ肉』という文字列が含まれている場合には、『豚肉』という文字列ではありませんから、『1』とは表示しなくても構わないのでしょうか?  又、『豚肉のバター炒め(醤油味)』の様に、キーワードとなる文字列が複数種類含まれている場合には、どの様な表示とすれば宜しいのでしょうか?  又、料理名や料理の素材の中に、キーワードとなる文字列が1つも含まれていない場合には、どの様な表示とすれば宜しいのでしょうか?  又、 >マクロで処理できるようにしたくて…。 との事ですが、マクロ限定となりますと、そのExcelbookがどの様なレイアウトなのかが判らなければ、どれほどExcelに精通した人間であってもマクロを組む事は出来ません。  ですから、どの様な元データがどのシートの中の、何列の何行目のセルから、どの方向(下方?/右方?)に向かって、どの様な形式で列記されているのかという事や、 「どの様な文字列がある場合に、どの様な表示にしたいのか」という規則が、何処にどの様な形式で記述されているのかに関しても、回答者に漏らさずお示し頂かなくてはなりません。  尤も、実状とは異なるExcelbookを想定したマクロを回答するだけで、質問者様が自力でマクロの改良を行う事が十分に可能だと仰るのでしたら、必ずしも詳細な情報を御お示し頂かなくとも構いませんが・・・

tamanegionion
質問者

お礼

解決策を考えていただいてありがとうございます! おっしゃる通り、条件の説明とか不十分で…。 はじめて質問してみたのですが、質問者も色々整理しないと、この場が成り立たないですね。反省。 次に質問することがあったら、もうちょっとキチンとしますね!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 色々やり方はあると思いますが、 一例でぅ。 ↓の画像のようにSheet2に表を作成しておきます。 (表には空白がないように、まず使用することは内であろう「*」を入力しています) Sheet1のB1セルに =IF(A1="","",INDEX(Sheet2!$A$1:$C$1,,SUMPRODUCT((ISNUMBER(FIND(Sheet2!$A$2:$C$5,A1))*COLUMN($A$1:$C$1))))) という数式を入れオートフィルで下へコピーすると 画像のような感じになります。 ※ A列データには複数の条件に一致する文字列はないという前提です。m(_ _)m

tamanegionion
質問者

お礼

回答していただいてありがとうございます! わかりにくい質問なのに、解決策を考えていただいて感謝です!

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

『塩』と『醤油』と『豚肉』を含んでいると、1か3のどちらを表示すべきか迷いますが、A2セルから下にデータが有るとして、 =IF(IF(ISERR(SEARCH("豚肉",$A2)),0,SEARCH("豚肉",$A2)*0+1)+IF(ISERR(SEARCH("バター",$A2)),0,IF(ISERR(SEARCH("牛乳",$A2)),0,OR(SEARCH("バター",$A2),SEARCH("牛乳",$A2))*0+2))+IF(ISERR(SEARCH("塩",$A2)),0,IF(ISERR(SEARCH("醤油",$A2)),0,AND(SEARCH("塩",$A2),SEARCH("醤油",$A2))*0+3))=0,"",IF(ISERR(SEARCH("豚肉",$A2)),0,SEARCH("豚肉",$A2)*0+1)+IF(ISERR(SEARCH("バター",$A2)),0,IF(ISERR(SEARCH("牛乳",$A2)),0,OR(SEARCH("バター",$A2),SEARCH("牛乳",$A2))*0+2))+IF(ISERR(SEARCH("塩",$A2)),0,IF(ISERR(SEARCH("醤油",$A2)),0,AND(SEARCH("塩",$A2),SEARCH("醤油",$A2))*0+3)))

tamanegionion
質問者

お礼

早速回答していただいてありがとうございます! エクセルが入ってるPCの持ち主が帰ってしまったので、明日にでも教えていただいた関数を元にしてやってみます。 実はIF関数を使用しての解決も模索したのですが、実際に使用したい分類(B列に表示させたい内容)は21までありまして…。泣きそうになって諦めた経緯があるのですが、頑張ってみます!

関連するQ&A

  • エクセルリンク元文字列

    エクセルのA列にURLリンクが貼られている文字列が3000行ほどあります。そのURL(例:http://www.***.**.cc/など)の文字列をB列に入力したいのですが、リンクゲット関数か何かあるのでしょうか?またはマクロ(VBA?)とかで処理する方法はあるのでしょうか。 よろしくお願いします。

  • Excelで文字列のまとめ方

    文字列のまとめ方で困っています。お手数ですが教えて下さいm(__)m 下記データがあったとします。 _ __A______B 1_種類___品名 2_調味料_醤油 3_調味料_食塩 4_調味料_胡椒 5_果物___りんご 6_野菜___胡瓜 7_野菜___玉葱 8_果物___バナナ 9_調味料_料理酒 ・ ・ ・ 上記データから下記のようにプルダウンリストにしたいです。 いきなりデータからプルダウンリストにするのが難しいかもしれないので、いったん上記を関数とかで他のセルにまとめさせておき、それをプルダウンリストにする方法でも大丈夫です。 (1)A列データプルダウン 一つ目のプルダウンリストには、A列の同じ文字を省いたもので選択可能にする。 上記例で言うと、調味料、果物、野菜が一つずつリストに表示される。(プルダウンリスト表示は2行目から) (1)B列データプルダウン 二つ目のプルダウンリストには、B列の文字を引っ張って来るが、上記A列データプルダウンで選択した文字と同じ行にある文字のみ選択可能にする。 例えばA列データプルダウンで果物を選んだら、このB列データプルダウンメニューにはりんごとバナナのみがリストに表示される。) 上記例のデータは9行目までですが、もっと多く存在し、A列、B列のデータ種類も他にまだあります。 データでA列の文字は被る事ありますが、B列の文字は被ることありません。 データとプルダウン箇所は可能であればシート分けしたいですが、困難な場合は同じワークシート内でも構いません。

  • 文字列を取り出す

    A列に[ No.××× ] あああああ・・・と入力されています。 毎回入力される行数が違います(100~300行) B列にNo.×××という文字列だけ取り出すために下記の関数が入っているのですが A列に入力のあった分だけをマクロで処理できませんか。 =LEFT(RIGHT(A2,LEN(A2)-FIND("[ No",A2,1)),8) 現在は300行目までこの関数が入った状態で、エクセルが重い気がします。

  • A列の文字列によってB列への入力を変える

    こんにちは。マクロ初心者で、質問なのですが、 エクセルで、A列に入力されている文字列によって、 B列文字を自動で入力するマクロを作成したいのですが、 どのように記述すればよいでしょうか? 例: A列 |B列 |  あ | 01 |A列「あ」の場合、B列の同じ行に「01」  い | 02 |A列「い」の場合、B列の同じ行に「02」 といった感じです。 初歩的な質問で申し訳ございませんがご教授願います。

  • 「エクセルで文字入力されている右側の列を表示」について教えてください

    エクセルで文字入力されている右側の列を表示させたい。 例えば    A列  B列  C列    表示結果 1行 はい いいえ OK・・・→OK 2行 いいえ はい・・・・・・→はい 3行 はい FALSE FALSE・・・→はい という具合に表示される計算式を教えてください。

  • Excel VBAで規則性がある列の非表示

    A列からDM列まで、二列おきに非表示にするマクロを書きたくて、 少しだけ自動マクロを作ったのですが、ダイレクトに列番号(?)が記録されているだけでした。 ループが何かを使って書くにはどう書けばよいのでしょうか。 行の削除や非表示処理はサンプルの検索ができたのですが、 列に関しては見つけられませんでした。 よろしくお願いします。 Range("B:C,E:FH:i,K:L").Select Selection.EntireColumn.Hidden = True

  • エクセルで一括でフリガナを表示させる方法

    A列に漢字が3000行ぐらいあります。 B列に一括でふりがな(カタカナ)を表示させたいのですが、どのようにしたらいいでしょうか? 検索してみたら同じ質問がありマクロを使ってやってみたのですが、うまくできませんでした。 マクロは全くの初心者です。どうぞよろしくお願いします。

  • エクセルに関しての質問です。A列とB列に任意の文字列があり

    A列にもB列にもその文字がある場合、C列にその文字以外の文字を表示させ、B列にしかない文字をD列に表示させる。 (例) A B C D 1 1 3 5 2 2 3 4 4 5 というものは出来ますか?関数でも、マクロでもいいので、とにかく、その文字を摘出したいのです。どなたか違う方法でも良いので、教えて頂きたいです。

  • エクセルで複数の文字列の結合方法

    以下の作業をマクロで処理したいと思っています。 エクセルのシート1に   A   B   C 1 aaa アアア あああ 2 bbb イイイ いいい 3 ccc ウウウ ううう 4 ddd エエエ えええ 5 eee オオオ おおお という表があったとします。 これらの文字列の横の組合せ(125通)の全てを シート2のA列に表示させたいのです。 この表は5の3条の組合せなのですが、 実際には列も行数も多くて、列ごとに行数もバラバラです。 組合せの数が、65536行を超えるときにはシート2のB列に、 それも超えるならC、D、E列と表示させていきたいと思っています。 贅沢な希望かもしれませんが処理が早いほうがいいです。 マクロについては、まったくの初心者で何がなんだかわかりません。 じっくり勉強すればできることなのかもしれませんが、ちょっと急いでいます。 どうぞよろしくお願いいたします。 エクセルでは無理とか、テキストエディターの方が便利だ、 または、有料でも便利なソフトなどのアドバイス等ありましたらお願いいたします。

  • 文字列の数抽出、行挿入マクロ

    急きょ下記処理を実施することになったのですが、本やネットで下記処理ができるような マクロを色々探していもなかなか見つからず…。(T_T) どなたか詳しい方がいらっしゃいましたら教えていただけませんでしょうか? ・A列に特定の文字列(;)があった場合、その列をコピー。 ・その列の下に文字列(;)の数と同数の行を挿入。 ・挿入した行のAセルに、文字列(;)のすぐ後ろの1ケタを貼り付け。 ・(挿入行が2行の場合) さらに下に挿入した行のAセルに、左から2つ目の文字列(;)の  すぐ後ろの1ケタを貼り付け。 なお、A列の行数は、現時点で500行ほどあり、今後増える可能性もあります。 【処理する前】       A列      B列    C列 1行目  1;32     555   AAA 2行目  29;1;4   222   GGG 3行目  600      111   FFF 【マクロ実行後】       A列    B列   C列 1行目  1     555   AAA 2行目  32    555   AAA 3行目  29    222   GGG 4行目  1     222   GGG 5行目  4     222   GGG  6行目  600   111   FFF どうぞよろしくお願いいたします。

専門家に質問してみよう