前提・実現したいこと
Excelのマクロで、以下のように文字列を同時に複数置換したいと思っております。
「0才→1才、1才→2才、2才→3才、3才→4才、4才→5才、5才→6才、6才→1年生、1年生→2年生、2年生→3年生、3年生→4年生、4年生→5年生、5年生→6年生、6年生→中学1年生」
発生している問題・エラーメッセージ
エラーメッセージなし
該当のソースコード
Sub MultiReplacement() Dim MyWords As Variant Dim MyRepWords As Variant Dim Ans As Integer Dim Rng As Range MyWords = Array("0才", "1才", "2才", "3才") 'ここに検索語を入れてください。 MyRepWords = Array("1才", "2才", "3才", "4才") 'ここに置換語を入れてください。 '検索語と置換語を調べる If UBound(MyWords) <> UBound(MyRepWords) Then MsgBox "検索語数( " & UBound(MyWords) & _ " )と置換語数( " & UBound(MyRepWords) & " )数が違います。", 64 Exit Sub End If Set Rng = Selection 'マウスで範囲を選択してください。 If Rng.Count = 1 Then Ans = MsgBox("セル1つしか選択されていませんが、よろしいですか?", vbYesNo) If Ans = vbNo Then Exit Sub End If End If '実行 For i = LBound(MyWords) To UBound(MyWords) Cells.Replace What:=MyWords(i), Replacement:=MyRepWords(i), _ LookAt:=xlPart, _ MatchCase:=True Next i End Sub
試したこと
下のように、検索語:0才→置換後:1才、検索語:1才→置換後:2才と順番にやってしまうと、ループするため、全て4才になってしまいます。
▼動画リンク
https://gyazo.com/a84ef504b6d35dcb99055c2490a5dba6
検索語:Array("0才", "1才", "2才", "3才") 置換後:Array("1才", "2才", "3才", "4才")
そこで、下の記事を参考に、一度記号に変換することで「0才→1才、1才→2才」までは置換することができました。
▼参考記事
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1276108857
▼動画リンク
https://gyazo.com/7edb47b71c46ace1126a271da3142ca8
検索語:Array("0才", "1才", "@") 置換後:Array("@", "2才", "1才")
しかし、その後、数を増やすとまたループしてしまって上手くいきません。
▼動画リンク
https://gyazo.com/4a1455d18f97721448003540e35ac921
検索語:Array("0才", "1才", "@", "3才", "2才", "@") 置換後:Array("@", "2才", "1才", "@", "3才", "4才")
補足情報(FW/ツールのバージョンなど)
当方、マクロの使用は初めてで、下の記事を参考に設置させていただきました。
▼参考記事:エクセルの複数同時置換|教えて!goo
https://oshiete.goo.ne.jp/qa/1350775.html
Excelのバージョンは2011です。
初心者で拙い部分も多いかと思いますが、コメントいただけると嬉しいです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/10 08:49 編集
2020/12/10 09:58
2020/12/10 10:50