[[20190812102305]] 『セル内の数字部分のみ一括で置換したい』(ちゃぼ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セル内の数字部分のみ一括で置換したい』(ちゃぼ)

こんにちは。

マクロ初心者です。(ほぼ無知です。。。)
増税に伴い、エクセルで文中に含まれる数字のみを一括で変更したいのですが、
拾ってきたマクロを使うと無限ループに陥ってしまってます。
何かいい方法は御座いませんでしょうか?


変更前:ホワイトオーク(WO)+10800円必要 
  
変更後:ホワイトオーク(WO)+11000円必要

数字部分は要変更箇所が上記以外にも数万パターンあります。

下記のような文字列リストを作製し、


(例)
文字列リスト
  A     B
1 1080   1100
2 1100   1120
3 1120   1140
  ↓
以下省略

下記記述のマクロで実行すると変更後の同じ数字を何度も見てしまい無限ループします。

Sub 文字列リストに基づき連続して置換する()

    i = 2
    Do
        x1 = Sheets("文字列リスト").Cells(i, 1)
        x2 = Sheets("文字列リスト").Cells(i, 2)
        Sheets("作業").Cells.Replace _
            What:=x1, Replacement:=x2, _
            SearchOrder:=xlByColumns, MatchCase:=True
        i = i + 1
    Loop Until Sheets("文字列リスト").Cells(i, 1) = ""
End Sub

マクロでなくても何かいい方法があれば教えていただけると幸いです。
宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 そのまま書けば
 Sub test()
     Dim i As Long
     With Sheets("文字列リスト")
         For i = 2 To .Range("a" & Rows.Count).End(xlUp).Row
             Sheets("作業").Cells.Replace .Cells(i, 1), .Cells(i, 2), 2
         Next
     End With
 End Sub

 ですが単純な Find/Replace で解決しますか?

(seiya) 2019/08/12(月) 11:14


seiya様

上記回答ありがとうございます。

上記記述で試みましたところ、
やはり数字がどんどん増えてしまいました。。。
(私の何かしらの説明不足が原因かと存じますm(_ _)m)

Find/Replace関数勉強してみます。
(ちゃぼ) 2019/08/12(月) 11:42


 文字リストの順番を見ると
 1080 を 1100
 次に
 1100 を 1120
 ということは、最初1080 だった部分も結果は 1120 になります。
 提示された文字列リストを逆順にすれば解決しますが、数万件ですよね?
 単純な部分一致の置換では無理だと思います。
 考え方としては、実際の文字列中の該当数値部分を再計算するようなプログラムが必要でしょう。
(seiya) 2019/08/12(月) 11:50

seiya様

再度コメントありがとうございます。
やはり初心者には難しい処理になりそうですね。

教えていただいたことをヒントに、
文字列リストを下記に変更したところ、
無限ループが止まり、
最後に作業シートのppを空白置換することで解決しました。

(例)
文字列リスト
  A      B
1 1080円   1100pp円
2 1100円   1120pp円
3 1120円   1140pp円
  ↓
以下省略

ありがとうございましたm(_ _)m

(ちゃぼ) 2019/08/12(月) 12:16


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.