• ベストアンサー

A列にある文字データで△△を含むセルの値をB列に□□にして置き換えしたい

A列に文字データが100行まであります。    A           B    1 ミカンを食べた     ZZ 2 イチゴを食べた     XX 3 西瓜を食べた      YY 4 ミカンを捨てた     ZZ 5 西瓜を拾った      YY 6 ミカンを無くした    ZZ 7 西瓜を貰った      YY 8 イチゴをあげた     XX それを表のようにB列(任意の列)に置き換えたいです。 イチゴを含むセルはB列にXXをミカンはZZみたいな感じです。 A列のセルには同じ文字列は(今のところ)含みません。 文字の一部を置き換えて変換し、それを繰り返すところまではできましたが、上記のことがができません。 VBAを使って一発で変換したいのですが教えていただけますでしょうか?

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

こんな感じでよい? Sub test() Dim a Dim b Dim i, j a = Array("ミカン", "イチゴ", "西瓜") b = Array("ZZ", "XX", "YY") For i = 0 To UBound(a) For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row If InStr(Cells(j, 1).Value, a(i)) > 0 Then Cells(j, 2).Value = b(i) Next j Next i End Sub 参考まで

yansuke_55
質問者

お礼

そうですこれがやりたかった事です。 素晴らしい。 大変勉強になりました。 ありがとうございました

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

回答1さんのいう変換表というのは _F___G__ ミカン__黄__ スイカ__緑__ スイカ__緑__ こういう表を別なセルに作っておいた方が汎用性があるということです。 で、こういう表がF、G列にあるとして。。。。 '------------------------------ Sub test()  Dim i As Long  Dim myCell As Range  Dim myTable As Range  Set myTable = Range("F1", Cells(Rows.Count, "F").End(xlUp).Offset(0, 1))  For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row    Set myCell = myTable.Find(Cells(i, "A").Value, , xlValues, xlPart)      If Not myCell Is Nothing Then        Cells(i, "B").Value = myCell.Offset(0, 1).Value      End If  Next i End Sub '------------------------------------ データが少なければ、For Nextなどで変換表をぐるぐる回してもいいのですが データが多い場合は上記のようにFindメソッドを使うほうがいいでしょう。 というより使うべきです。処理スピードが格段に違います。 以上です。    

yansuke_55
質問者

お礼

回答ありがとうございます。 上記ですることが可能でした。 一応VBAの中で完結できればなと思っております。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

△△はどこに定義してあるのかな? ミカンがZZ、西瓜がYY、イチゴがXXのようですが、それをどうやって処理するのかな? 列Aと列Bだけでは難しいでしょうね。 列Aはいまのまま、列Bに△△を、列Cに□□を、列Dに置換後も文字列が出るようにするのはアリですか? 1)セルD1に式[=SUBSTITUTE(A1,B1,C1)]を設定。 2)セルD1の右下の■を下方向にドラッグしてコピー。

yansuke_55
質問者

お礼

早速誤解とありがとうございます。 >△△はどこに定義してあるのかな? VBA内でのことでしょうか? もしそうでしたらそれも教えていただきたいですが、 すいません、質問の意味がわかりません。 >ミカンがZZ、西瓜がYY、イチゴがXXのようですが、それをどうやって処理するのかな? ミカンが入ったセルをB列に違う文字列に変換するということです。 結果が以下のようになるようにしたいです。   A           B    1 ミカンを食べた    きいろ 2 イチゴを食べた    赤 3 西瓜を食べた     緑 4 ミカンを捨てた    きいろ 5 西瓜を拾った     緑 6 ミカンを無くした   きいろ 7 西瓜を貰った     緑 8 イチゴをあげた    赤 もちろん最初にB列は空白です。 >列Aと列Bだけでは難しいでしょうね。 列Aはいまのまま、列Bに△△を、列Cに□□を、列Dに置換後も文字列が出るようにするのはアリですか? A列はそのままでも大丈夫です。 関数を使うのは大体分かるのですが、マクロにして何度も一度で処理をしたいので、VBAで作りたいのですが。

関連するQ&A

  • セル内の文字列に複雑な処理をしたい

    セルの中の複数の異なる文字列を以下のように処理したいのですが、Excelの標準の文字列操作の関数で試行錯誤してみたのですが、どうもうまくできませんでしたので、ご存知の方がいらっしゃいましたらご教授ください。VBAで処理しないとできないかもしれませんがよろしくお願いします。 あるリストのC列に備考欄が設けてあり、次のようなデータが入っています。 4/30 みかんを買った(強制改行して) 5/1 りんごを売った 5/2 ぶどうを食べた 5/5 すいかを買った このセルを調べて、 (1) セル内に"みかん"と"りんご"という文字列があったら、これを取り出して、右隣のセルに表示           (結果)⇒ みかん りんご (2) セル内に"みかん"と"りんご"という文字列があったら、これを"A","B"に置き換えて、右隣のセルに表示          (結果)⇒ A B (3) セル内の数値データと"を食べた"、"を買った"、"を売った"を取り除いて、右隣のセルに表示          (結果) ⇒ みかん りんご ぶどう すいか   (4) セル内に"か"を含む文字列があったら個数に関係なく"A"に置換して右隣のセルに表示             (結果) ⇒ A   すべて取り出したい文字列(上の例ではみかん、りんご)や置換したい文字列(A、B)以外の文字列は全てクリアして表示しないようにします。少し複雑ですが、やり方をご存知の方がいらっしゃいましたら、お教えください。

  • B列のセルにある文字が出た時A列のセルの値を変える

    B列のセルにある文字が出てきたときA列のセルの値を変える式、マクロを教えて下さい  A列のセルの値のリストは最初から決まっていてB列のセルに出てくるある文字と同じ数あります。

  • Excelで、文字列を含むセルの検索をしたい

    Excelで、文字列を含むセルの検索をしたいと思います。 列Aには、探したい文字列(市町村名)が800行入っています。 (1行目)○○市 (2行目)△△町 (3行目)□□□村 ・・・以下続く・・・ 列Bには、検索対象となる文字列(住所)が7000行入っています。 (1行目)XX県XX市XX-XX-XX (2行目)XX県○○市XXXXXX-XXX-X (3行目)XX府XXX郡□□□村XXX ・・・以下続く・・・ このとき、 「列Aにある文字列(市町村名)を含む列B(住所)のセル」を検索したいのです。 (上記の例の場合は2行目・3行目がヒット。) シートや列は追加してかまいません。 件数が多いため、どのように探すと効率的か見当がつきません。どなたかよい知恵をお貸しください。よろしくお願いします!

  • 条件が複数のSUMIF関数について

    sum関数なので、合計欄のセルに ex.=SUM(C1:C6)などと書くときに、 a列が"1"の場合かつb列が"zz"の場合の時の合計欄のセルに加算したい場合は どうやって書けばいいでしょうか? (zzは任意の文字) __A B C 1 1 zz 100 2 0 zz 200 3 1 xx 300 4 0 yy 400 5 1 zz 500 6 0 zz 600

  • 空白のセルに隣の1段したの値を抜き出して入れる

    VBA初心者です たとえば添付の様な形のA,Bが空白になっているデータが300行位 続いている場合B列の空白にA行の1段下の値を抜き出したいときにどういうVBAが書けるか分かる方ご教授願います。(B7にはxx、B14にはYY、B19にはHHなどの用に)。

  • セルに埋め込まれた文字列を式として利用したい

    品名      |ランク ------------|----------- みかん     |A いちご     |B みかん     |A みかん     |B りんご     |A りんご     |B いちご     |B りんご     |B 品名選択: -------------------- |全て選択     |▼| ←A15セル -------------------- |いちご       | |みかん       | |りんご       | |いちご&みかん   | ---------------------- 上記のようなExcelの表があります。 表の下には品名選択のコンボボックスが用意されています。 品名選択で選択されたもので、ランクがAのものを数えたいと思っていますが、 品名選択の方法が複雑なため、SUMPRODUCTで表すと式がとても長くなってしまいます。 =SUMPRODUCT((B2:B9="A")*((A15<>"全て選択")*(A15<>"いちご&みかん")*(A2:A9=A15)+(A15="全て選択")+((A15="いちご&みかん")*((A2:A9="いちご")+(A2:A9="みかん"))))) 式をもう少し簡潔にしたいと思い、以下のように品名が選択された時に隣のセル(B15)に式を表示するようにし、 -------------------- |全て選択     |▼| (A15="全て選択") -------------------- |いちご       | (A2:A9=A15) |みかん       | (A2:A9=A15) |りんご       | (A2:A9=A15) |いちご&みかん   | ((A2:A9="いちご")+(A2:A9="みかん")) ---------------------- =SUMPRODUCT((B2:B9="A")*(B15))としてみたのですが「#VALUE」となってしまい計算されません。 (=SUMPRODUCT((B2:B9="A")*INDIRECT(B15))も試してみたのですが、出来ませんでした…うーん??) コンボの隣にセットした文字列を数式の一部として使用する事は出来るのでしょうか? 出来る場合、方法を教えて下さい。 よろしくお願いします。

  • EXCEL表の文字列が対象セル内に含まれるか

    シートAのB2の文字列が000-みかん_東京_001とあるとして、 シートBのB2:りんご、B3:みかん、B4:いちご C2:横浜、C3:東京、C4:名古屋 D2:赤、D3:青、D4:白 という表があるとします。 シートAのB2セルにシートBのB列とC列から両方含まれる行を探し、D列の値を取得したいのですがどのような関数を利用するのが望ましいでしょう? ちなみに、シートAのB2が調査文字でC2を答えとして、調査対象の行を追加していきたいと思ってます。 お知恵をおかしいただければ幸いです(^^)

  • 一番初めに文字列が入っている列の文字列を知りたい

    次の条件で、よりA列に近い文字列を引っ張り出すにはどのような関数を使えば良いのでしょうか? 1)行の中にそれぞれ"文字列"が入っている 2)文字列が入っているセル数は行によって異なる   【A】 【B】 【C】 【D】 【E】 【1】りんご 【2】   ばなな 【3】   みかん りんご 【4】ばなな           みかん この回答を【F】列に示す場合、 【F1】はりんご、【F2】はばな、【F3】はみかん、【F4】はばなな、になって欲しいのです。 上手く質問できないのですが、とても困っています。宜しくお願いします。

  • エクセルのセル内の重複文字列処理について

    よろしくお願いいたします。 セル内にスペースで区切られた文字列(単語)があり、文字列の数は不確定です。 その文字列の中で重複する文字列があり、それらを1つにまとめたいという要望です。 セルの行数は約6000ほどあります。 例 A1セル:リンゴ リンゴ みかん B1セル:リンゴ みかん A2セル:みかん バナナ みかん バナナ みかん B2セル:みかん バナナ ・・・ よろしくお願いいたします。 Windows7 HomePremium Office2010

  • セル内の右から2文字の値を取得して足したい。

    こんばんは 下のようにA1列のセル内の右から2文字目に数字が入力されているのですが、これをB1セルに足して出力する式を教え頂きたいです。(A2列以降も入力されており、それぞれ対応するB行に出力したい) A1          B1 XX2X        9 BBBB3B D4D

専門家に質問してみよう