• ベストアンサー

マクロ 置換の質問

いつも回答して頂きありがとうございます。 マクロでの置換の方法について質問させていただきます。 A列に test → p/1 人によっては t/t → pro1 tset → pro2 人によっては t/t → p2 load → test 人によっては l/d → t/t とあった時、B列に上と表示させたい。それ以外は下と表示させたいのです。 又、困った事に複数の人が入力しており、同じように書くとは限りません。 臨機応変に対応できる記述ありませんか? 規則性としては、前の文字が固定されています。 t〇〇 → p〇〇 御回答お待ちしております。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

sub macro1()  dim h as range  range("A:A").replace what:="→", replacement:=" → ", lookat:=xlpart  range("A:A").replace what:=" ", replacement:=" ", lookat:=xlpart  for each h in range("A1:A" & range("A65536").end(xup).row)   if h like "t*t → p*1" _   or h like "t*t → p*2" _   or h like "l*d → t*t" then    h.offset(0, 1) = "上"   else    h.offset(0, 1) = "下"   end if  next end sub アバウトすぎるご相談ですが、 >臨機応変に 程度問題です。何はありで何はダメなのか実際にやってみて、ご自分でチューニングしてください。 何なら「上」で、どうならそうでないのかも含めて。

kero1192kero
質問者

お礼

2度と回答してくれないと思っていました。 回答してくれてありがとうございます。 試してみたのですが、 for each h in range("A1:A" & range("A65536").end(xup).row) の箇所で実行時エラー1004【アプリケーション定義またはオブジェクト定義エラーです。】が発生します。 実際にある言葉をif h like "t*t → p*1" _ の""の間に入れて実行してみましたが結果は同じでした。 何が悪いか分からないので教えて頂けないでしょうか?宜しくお願い致します。

その他の回答 (2)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

マクロにこだわっていらっしゃるようですが、 A列に入力規則を設定して、リストから選択させるようにするほうが早いのでは? と思いますが、いかがでしょう? 正直「表記揺れ」まで考えてシステムを組んでいたらキリがないですよ? 1番さんの回答にもありますが、全ての「入力形式」を網羅できるなら価値もありますが、 「それにそぐわない入力形式」をする人が現れたら、それもまた考慮しなくてはならないのですから。 例えば > test → p/1 矢印の前後に空白があるようですが、この空白を入れない人がいたら? アルファベットを大文字で入力する人がいたら? など、パターンは多く存在するのではないでしょうか。 それら全てを網羅した冗長なコードを書いてみたり、 新パターンが出現する度のメンテナンスしてやったり・・ というのがお好みなら、マクロでやるのもアリかもしれませんけどね。 余計なお世話ですが、後任者への引継ぎも面倒ですよ。 ちなみに、基本の関数だけでもほぼ同様の動きは可能です。   B1セル:=IF(COUNTIF(A1,"t* → p*")>0,"上","下") 条件が複数あるなら、OR関数追加で   B1セル=IF(OR(COUNTIF(A1,"t* → p*")>0,COUNTIF(A1,"l* → t*")>0),"上","下") 条件が増えるなら、OR()内に追加してやればOKです。 これだと、少なくとも大文字小文字の考慮の手間だけは省けます。 冗長な式であるのは間違いないですけどね。

kero1192kero
質問者

お礼

返事が遅れて申し訳ありません。 計算式を入れ過ぎた時の動作さえどうにか出来たら多少は使いますが、今はマクロの事で頭がいっぱいです。 回答頂いた計算式は今後の参考にさせて頂きます。あと、人知れずこっそりと集計して自分の作業に活かしているだけなので他の人に集計内容を見せる事はあっても使ってもらう事は多分ないと思います。 使用方法等を御指摘・提案して頂きありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

あれっ、ゴメンナサイ。誤記ました。 訂正: for each h in range("A1:A" & range("A65536").end(xlup).row) 常套句なので、(教わらなくても出てくるよう)追々に覚えておいてください。 失礼しました。 >実際にある言葉をif h like "t*t → p*1" _ >の""の間に入れて実行してみました 実際にある言葉を記入したのでは、「人によって違う」の対処になりません。 もちろん、人によって違う全てを網羅してプログラムに漏れなく記入できるなら、それはそれでありですが。そういうのでいいのなら、それも一つの方法です。

kero1192kero
質問者

お礼

返事が遅れて申し訳ありませんでした。 掲載して頂いたマクロをさっそく使いました。思った通りの処理が出来て満足しています。あとは会社にあるファイルを見ながら記述を修正するだけです。ありがとうございました。

関連するQ&A