• ベストアンサー

エクセル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列の文字は、その都度かわります。 上記のような処理をマクロで行うことは、可能でしょうか? 説明がうまくできていないかも知れませんが、よろしくお願いします。

  • puxu
  • お礼率53% (15/28)

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

  • ベストアンサー
  • 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/17068)
回答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
質問者

お礼

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

関連するQ&A

  • エクセルマクロ  文字の置き換え

    SHEET1のA列B列C列のセル内の文字をD列の#、$、%に置き換え E列に書き出す方法か又はSHEET2又はメモ帳に書き出すマクロを 誰か教えてください。

  • エクセルの質問です

    A列は空白 B列に商品をあらわ5桁のコードが入っています。 C列にも同じく商品を表す5桁のコードが入っているのですが、 B列のセルと隣り合ったセルには同じ数字が入っていません。 D列には取引先の会社名が入っています。     B1に入ってる5桁の数字と同じ数字が入っている C列のセルを探し、 そのセルの隣のD列の会社名をA1のセルに表示させたいのですが、 どう関数を組んだらいいのでしょうか? A   B    C   D     12345 12354 A社    12334 12345 B社    12443 12544 C社 上の表の場合B1とC2数字が同じなのでA1にB社と表示させたいのです。  

  • エクセルの質問です

    A列は空白 B列に商品をあらわ5桁のコードが入っています。 C列にも同じく商品を表す5桁のコードが入っているのですが、 B列のセルと隣り合ったセルには同じ数字が入っていません。 D列には取引先の会社名が入っています。     B1に入ってる5桁の数字と同じ数字が入っている C列のセルを探し、 そのセルの隣のD列の会社名をA1のセルに表示させたいのですが、 どう関数を組んだらいいのでしょうか? A   B    C   D     12345 12354 A社    12334 12345 B社    12443 12544 C社 上の表の場合B1とC2数字が同じなのでA1にB社と表示させたいのです。  B列が昇順で並んでいる C列とD列は重複しない という条件で <=vlookup(b1,c:d,2,false)> という回答を頂いたのですが、 B列が昇順で無い(ランダムに数字が入っています) D列には同じ会社名が何度も出てきます。 どうすればいいのかわかる方お願いします。

  • エクセルの文字列中の指定した位置の文字列の置き換え(REPLACE)。

    エクセルの文字列中の指定した位置の文字列の置き換え(REPLACE)。 エクセルのセルA1に 「A123B1234X9876C123DD」と入力されています。 これを 「A123-B123X9876-C123-DD」としたいです。 現在 ・B1のセルに=REPLACE(A1,5,0,"-") ・C1のセルに=REPLACE(B1,15,0,"-") ・D1のセルに=REPLACE(C1,20,0,"-") と入れて、D1にできた値の 「A123-B123X9876-C123-DD」 をコピーして E1のセルに「形式を選択して貼り付け」「値」で貼り付けして B1~D1を削除して ・A1のセルには元の「A123B123X9876C123DD」 ・B1のセルには編集後の「A123-B123X9876-C123-DD」 が表示されるようにしています。 このA列が100行もあるとうんざりです。 式をオートフィルでコピーしていくのですが  ・B1に式を入れてオートフィルでB100までコピー  ・C1に式を入れてオートフィルでC100までコピー  ・D1に式を入れてオートフィルでD100までコピー  ・D1~D100をコピーしてE1~E100に「形式を選択して貼り付け」「値」で貼り付け  ・B,C,D列を列削除  3回は式を入れないといけないです。一発で編集する方法はありますでしょうか?

  • エクセルで一致するをセルを参照して入力したい

    お世話になります。 わかりにくいタイトルで申し訳ないのですが以下の場合について教えてください。 A列に1,2,3,4,5・・・というように重複しない数字が入っています。 C列にも1,3,4・・・など重複しない数字が入っています。(1と3の間に空白セルはない) D列には任意の文字が入っています。 C列の数字と同じ数字は必ずA列には存在します。(逆にA列の数字がすべてC列にあるわけではない) ここであいているB列にその左のA列と同じ数字をC列から探し、その右側のD列の文字を入力したいのです。 (A列と同じ数字がC列にない場合は空白にする。) 例 A1:1 C列で「1」が入っているセルがC1、D1:みかん の場合 B1:みかん とする A2:2 C列に2がない場合 B2:空白 A3:3 C列で「3」が入っているセルがC2、D2:りんご の場合 B3:りんご とする この場合B列にはどのような計算式を入れておけばよいのでしょうか。 よろしくお願いします。 Excel2002です。

  • エクセル 文字が表示されたセルを抽出したい

    エクセルの関数を教えて下さい。    A     B     C     D   1 りんご              りんご 2       プリン        プリン 3             紅茶   紅茶 4 バナナ              バナナ 5      6             緑茶   緑茶 上記のような表があります。(A~は列、1~は行番号です) A1~C6までは、IF関数で、条件にあった場合に“りんご”などを表示、そうでない場合には空白と なるような式が入っています。 そして、D列のように、それぞれの行に表示されている文字を抽出、何も表示されていない場合は空白としたいのです。 D列にはどういった式を入れればよいかを教えて下さい。 ※各行に表示されるのは1つのセルのみで、例えばA1のセルとC1のセルに文字が表示される ことはありません。A1に文字が表示されている場合は、必ずB1・C1のセルは空白です。 宜しくお願い致します。

  • マクロを使って文字が入力されたセル数を数える

    マクロを用いて、文字が入力されたセル数をカウントしたいと考えていますがうまくいかず悩んでおります... 具体的には、セルB1からB1000にデータが入力された場合、左隣のA列に1から番号を付したいと考えています. B列が空白のままの行は、A列も空白にしておきたいです. (セルB1からB1000まで全てにデータが入力された場合、A1からA1000には1から1000までの番号が入る) また、A列に付された番号を判断し、100番毎にA列からE列までセル背景を色分けしていきたいと考えています. (B列が空白ならxlNoneでその行は無色のままにしたい) セル背景の色分けだけであればうまくいったのですが、B列の入力状況により自動でA列に番号(数字)を変化させたら思い通りに動かず困っています. ご教示、宜しくお願いします.

  • エクセルの文字列の検索に関して

    また、エクセルに関しての質問です。 例えば  A B C D 1あ 1 2い 2 3う 3 4え 4 5お 5 6か 6 7き 7 8く 8 このような漢字で文字列が縦に入力されていて、  A B C D E 1あ 1   お 5 2い 2   う 3 3う 3 4え 4 5お 5 6か 6 7き 7 8く 8 このようにD列にある文字に対してA列にある文字で該当する文字を発見し横のBセルにある番号を取ってくるということがしたいです。 この場合だとD1は「お」なので、A列の上から見ていくとA5に「お」があるので、B5の数字「5」をEに入力といったような具合です。簡単なように見えますが、複数の文字列を横断的に検索することができません。 誰か詳しいお方お教え願います。

  • EXCEL IF関数 AND、OR関数

    数式がわからず、お力添えください。 以下の「D」の「○」「×」を数式で入力するのが目標です。 数式で表すことができますでしょうか? 条件としましては、 B>Cのとき、Aの文字列が「X1またはX2」の場合は、「○」、それ以外は「×」 C>Bのとき、Aの文字列が「Y1またはY2」の場合は、「○」、それ以外は「×」 それ以外のとき、(B=C,どこかが空白のとき)は、空白  A  B  C  D  X1 37 63 ×  X2 78 22 ○  Y1 45 55 ○  Y2 29 71 × ご教授お願いいたします。

  • エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数は?

    エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数はありますか? たとえばA列の値に存在する文字がB列に1文字でもあるかを チェックすることができるのでしょうか。 A列    |   B列    |   C列 -------+----------+---------- ABCD  |  XYZB   |  ○ --> Bがある XY    |  ABSCE  |  X --> XもYもない HD     |  XUDM  |  ○ --> Dがある マクロ(VBA)でなく関数で表したいのですが このような関数はありますか? 関数のヘルプを調べたのですが、出来そうで出来ません。 どうぞよろしくお願いします。

専門家に質問してみよう