Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

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