• 締切済み

excel「マクロ」 置換えで困っています。

いつも皆様には大変お世話になっております、回答者の皆様ありがとう御座います。 早速ですが質問させて頂きます。 初めてexcelにて 「置換え」 マクロを組んでいます、置き換えなければいけない候補が多いので Sub okikae() Dim myRng As Range Selection.SpecialCells(xlCellTypeConstants, 2).Select For Each myRng In Selection myRng.Value = StrConv(myRng.Value, vbUpperCase + vbNarrow) Next myRng Dim aa, zz As Integer, a, za As Integer aa = Array("-10", "P10", "P-10") a = Array("-1", "P1", "P01", "P-1", "G1", "G01", "G-1", "-") For zz = 0 To UBound(aa) Selection.Replace What:=aa(zz), Replacement:="@10", _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False Next zz For za = 0 To UBound(a) Selection.Replace What:=a(za), Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False Next za end sub 上記の様なマクロを永遠と入力しました。(実際にはもっと長いです。(入力を多数の人数で行っている為、同じP1やP10がイロイロな形式で入力されています。) セルを選択しマクロを実行したところ、うまく置換えが出来たり出来なかったりするセルが出てきて困っています。 どこに不具合があり、置換え出来なくなっているのかすら分からない状態に陥っています。 アドバイスありましたら宜しくお願いいたします、説明に不明な点があれば再度補足させて頂きます。

みんなの回答

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

誰か既に言っているかも知れませんが、文字列の置換は。文字長の長い物(文字ストリング)から先に置換していかないと、思い通りにならないことが多い。 共通文字列が有る場合(p-10と-10など)は注意してP-10を先に置換しないと思ったとおりでないでしょう。(特殊なニーズによっては色々で、絶対とは言い切れないが)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

例えば、1234567P-10 の場合、最初に「-10」が「@10」に変わり 1234567P@10 になるので期待した「P-10」を「@10」に置き換える動作が完了しないと言うことでは? ある程度のパターンを期待する置換え後と対比して提示してはどうでしょう? 123456-10  → 123456@10 123456P-10  → 123456@10 123456P10  → 123456@10 123456-10  → 123456@10 123456G-10  → 123456@10 123456G10  → 123456@10 とか。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

>1234567P2 等 "P" や "G" 以降が対象なら、文字列を分解して必要な処理をすればよいのでは? 1,01,-1,-01 等のパターンなら 1 が入ります。 Sub test1() Dim myRng As Range Dim strTxt As String Selection.SpecialCells(xlCellTypeConstants, 2).Select For Each myRng In Selection strTxt = StrConv(myRng.Value, vbUpperCase + vbNarrow) If InStr(strTxt, "P") > 0 Then myRng.Value = Left(strTxt, InStr(strTxt, "P") - 1) _ & "@" & Abs(Mid(strTxt, InStr(strTxt, "P") + 1)) ElseIf InStr(myRng.Value, "G") > 0 Then myRng.Value = Left(strTxt, InStr(strTxt, "G") - 1) _ & "@" & Abs(Mid(strTxt, InStr(strTxt, "G") + 1)) End If Next End Sub

Misson
質問者

お礼

hana-hana3様 回答ありがとうございます、大切なお時間を頂き大変感謝しております。 hana-hana3様に頂いたマクロを使わせて頂きましたが、残念ながら型が一致せず作業する事はできませんでした。 私の説明の不足、稚拙な文章な為に回答者の方には大変ご迷惑を御掛けした事と思います。 解決はしておりませんが(私の説明不足がいけないのですが)質問を一旦閉めさせて頂きたいと思います、私自身マクロを使うのが始めてなで具体的な不具合の説明すら出来ない状態だと、回答しようにも出来ないと思われる為です。 さらに、知識を深め少しでも不具合を説明できるようになってから再度投稿させて頂きたいと思います。 又、機会が在りましたら皆様に知恵を貸して頂きたいと思っております。 hana-hana3様ありがとう御座いました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

順番の問題ではないかと aa = Array("P10","P-10","-10") a = Array("P1","P01","P-1","G1","G01","G-1","-1","-") ”-10"を置換後に"P-10"の置換はできません。 "-1"の置換後に"P-1","G-1"の置換はできません。

Misson
質問者

お礼

mshr1962様回答ありがとう御座います。 配列変数の宣言時に、格納する値に順番があるのは知りませんでした。 大変為になります、今から試してみてみます。

Misson
質問者

補足

1つ説明が足りない部分が在りましたので補足させて頂きます。 1つのセルに置換えを行いたい文字は1つしか入っていないです。 例えば、 1234567P1 1234567P2 等 上記の様に「P*」の*の部分が入っています。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>うまく置換えが出来たり出来なかったりするセルが出てきて困っています。 マクロは指定された動作を繰り返すだけです。 実際のセルの内容が不明だと回答が難しいと思います。 置換できるパターンとできないパターンを提示すると、検索パターンが解ってくるかもしれませんよ。

Misson
質問者

お礼

hana-hana3様レスありがとう御座います。 あまりにも置換えしなければいけない候補が多い為に説明をかなり削りました。 補足にて少し説明を足させて頂きます、よろしくお願いいたします。

Misson
質問者

補足

補足させて頂きます、時間が在りましたら皆様にお付き合い頂けると幸いです。 実際に置換えしたい「文字」はP1からP20、G1からG20の様に続き番号になっています、質問でお聞きした通り、入力者が多数居る為入力形式は様々存在します。 置換え出来るパターンと出来ないパターンと言うよりは、同じパターンのはずなのに置換え出来ていないセルが出てきている、と言った感じになっています。 自分でも何が問題なのかが認識できていない為にパターンで説明を求められると難しいです^^; もう少し他回答者様のアドバイスを読ませて頂いてから再度補足させて頂きます。 ありがとう御座いました。

関連するQ&A