• ベストアンサー

エクセル2000-マクロでの文字置き換えの質問です。

エクセル2000を使用しています。    A    B    C    D       ・・ X    Y 1 1  とまと  4  なし       1  とまと 2                      2    なす 3 2  なす   5  りんご     5   きゅうい 4                      6   ソーセージ 5 3  きゅうり 6  えだまめ    6                     -------------------------------------------------------------- 上のような表があります。 A列C列には番号(固定番号)が入っています。 列の間には空白のセルが入っています。(X・Y列は空白セルなし) B列D列には品名が入っています。 X列の数字がA列・C列にあっていたらYの文字をB列・D列に、 それぞれ、置き換えを行いたいです。 X列の数字とY列の文字は、その都度かわります。 上記のような処理をマクロで行うことは、可能でしょうか? 説明がうまくできていないかも知れませんが、よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 単純な方法ですが、こんな風にできるかと思います。 Sub Test1()   Dim c As Range   Dim f As Range   Dim rng As Range   Set rng = Range("A1", Range("D65536").End(xlUp))   For Each c In Range("X1", Range("X65536").End(xlUp))     If IsNumeric(c.Value) Then       Set f = rng.Find(c.Value, LookIn:=xlValues, LookAt:=xlWhole)       If Not f Is Nothing Then         If f.Offset(, 1).Value <> c.Offset(, 1).Value Then           f.Offset(, 1).Value = c.Offset(, 1).Value         End If       End If     End If   Next   Set rng = Nothing End Sub

puxu
質問者

お礼

ご返答大変ありがとうございます。 すぐに試せればよいのですが、当方の事情により すぐに試すことができません。 明日、早急に試してみます。 (このような環境で、大変申し訳ありません。) はじめて、投稿してみてこんなにも早くご回答がくるとは 正直おどろいています。 どうもありがとうございました。 取り急ぎ、お礼を申し上げます。

その他の回答 (2)

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

実例も挙げてあり説明も有る。しかしVBAでやりたいなら、処理手順を文章で書き上げてご覧(下記に例を示す)。 そうすればどこがVBAコード化(作成)にあったって、行き詰まっているのか、質問点を絞れるでしょう。 質問では丸投げで、回答者にコードを書かせ、その回答をやってみて、テストする試験者のようで、このコーナーは回答者は試験を受けているのではないが、そのような風になる。 例  1.A列の数の行A1を捉える。 2.A1とX1と比べる。合えばY1をB1に代入する。 そしてA列の次の行に処理を移す(2行おきにデータがあるのか?) 3.合わない場合はX2と比べる(以下合わない場合はX列の最後セルまで比較を繰り返す) 4.次の行セルA3に着いて1-3を繰り返す。 ーー 5A列の最終行データまで処理が終わったら、B列の処理に移る。 それには上記のコードのCells(1,1)をCells(i,2)に変えて繰り返す。For Nextなどで、2重ループで出来る。 最下行の捉え方は判るのかな。 A,Bの最下行は異なるのかな。 ーーー 上記では、何も難しいコードになる見当はない。 総当りは泥臭いが、初心者ならやむをえない。その点を改良したいなら、そのように質問点を絞って質問に書くべきだ。

puxu
質問者

お礼

ご返答大変ありがとうございました。 記述例のとおり、きちんと整理して質問に当たるべきでした。 不快な思いをさせてしまい、大変申し訳ありません。 (私自身ぜんぜん整理されていないのに、質問してしまい失礼でした。) 今後は、例を参考に質問させていただきます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub try() Dim myDic As Object Dim r As Range Dim i As Long Dim v Set myDic = CreateObject("Scripting.Dictionary") v = Range("X1", Cells(Rows.Count, "Y").End(xlUp)).Value For i = 1 To UBound(v, 1) myDic(v(i, 1)) = v(i, 2) Next For Each r In Range("A:A,C:C").SpecialCells(xlTextValues) If myDic.Exists(r.Value) Then r.Offset(, 1).Value = myDic(r.Value) End If Next Set myDic = Nothing Erase v End Sub 例えばこうゆう事ですか?

puxu
質問者

お礼

とても、はやいご返答大変ありがとうございます。 当方の都合により、すぐに試すことができませんが、 明日早急に試してみたいとおもいます。 (このような、作業環境で大変申し訳ありません。) 取り急ぎ、お礼を申し上げます。