• 締切済み

マクロで文字列をブック全体に一括置換する

'マクロで一括置換する方法です。 'たくさんのシートに記入された文字列を複数のシートに渡って一括置換する方法を教えてください。 '置換前と置換後の文字をインプットボックスに記述しブック全体の文字を一括で置換(変更)する 'その後は戻せなくても結構です。 下のように記述しましたが、うまく動作しません よろしくお願いします。 Private Sub CommandButton11_Click() Dim BeforeStr As Integer Dim AfterStr As Integer Dim WS As Worksheet Dim N As Integer For N = 1 To Worksheets.Count Set WS = Worksheets(N) For i = 1 To 100 For j = 1 To 200 Before.Cells(i, j).Value = InputBox("置換前の文字列を入力してください。") After.Cells(i, j).Value = InputBox("置換後の文字列を入力してください。") For Each WS In Worksheets WS.Activate For Each s In WS.Cells If s.Name Like "InputBox*" Then s.Select Selection.Cells(i, j).Value = _ Replace(Selection.Cells(i, j).Value, BeforeStr, AfterStr) End If Next j Next i Next N Next End Sub

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 ご質問のコードは、VBAに似ているけれども、まったくコードとしては成り立っていません。 まず、基本を学んだほうがよいのではありませんか? 一括置換のはずなのに、4万回も入力を求められるのですか? それから、 s.Select これは、シートが違えばエラーが発生するはずです。 Selection もシートが違えばエラーが発生します。 なお、以下は、xlPart にしてあります。 複雑な置換を求めるなら、以下では出来ません。 '----------------------------------------- Private Sub CommandButton11_Click()   Dim sSrc As Variant   Dim sRep As Variant   Dim wh As Worksheet   sSrc = Application.InputBox("検索値を入力してください。", "検索値", Type:=2)   If VarType(sSrc) = vbBoolean Or sSrc = "" Then Exit Sub   sRep = Application.InputBox("置換を入力してください。", "置換値", Type:=2)      If VarType(sRep) = vbBoolean Or sRep = "" Then Exit Sub      For Each wh In ActiveWorkbook.Worksheets     wh.UsedRange.Replace _     What:=sSrc, _     Replacement:=sRep, _     LookAt:=xlPart, _     SearchOrder:=xlByRows, _     MatchCase:=False   Next wh End Sub

pureko99
質問者

お礼

ご回答ありがとうございました。 修行が足らないようです反省しています。 がんばります。

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

1シートずつ捉えて(例For Each s)置換するなら、置換操作のマクロの記録をとって、シート数だけ繰り回せばよいのでは。 そんなことは一言も述べてないが、我流を打ち出して要るが、マクロの記録から学ぶことは卒業したレベルではなかろうと思う。 マクロの記録に少々加えて Sub Macro1() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name sh.Activate sh.Range("A1:X200").Select Selection.Replace What:="zzzz", Replacement:="変換", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next End Sub 他にWhat:="zzzz", Replacement:="変換", の"zzz","変換"の部分をInputboxの2つの応答文字列に置き換えればよい。 まずこれがあって、それではカバーできてない点や、不満足な点を 質問すべきではないかと思う。

pureko99
質問者

お礼

早速ありがとうございました。 解決できました。感謝します。 もっと勉強します。

回答No.1

記述した内容ですが、色々とうまくいかない所が見受けられます。 実際には、もっとシンプルにできるので、下記参考にして下さい。 全部のシートの、A1:GR100のセルを置換対象としています。 Sub sample() Dim I As Integer Dim Bef As String Dim Aft As String Bef = InputBox("置換前の文字列を入力してください。") Aft = InputBox("置換後の文字列を入力してください。") For I = 1 To Worksheets.Count Worksheets(I).Select Range(Cells(1, 1), Cells(100, 200)).Select Selection.Replace Bef, Aft Range("A1").Select Next I End Sub

pureko99
質問者

お礼

こんなシンプルなマクロができるなんて感激しました。 ありがとうございました。