アプリ版:「スタンプのみでお礼する」機能のリリースについて

'マクロで一括置換する方法です。
'たくさんのシートに記入された文字列を複数のシートに渡って一括置換する方法を教えてください。
'置換前と置換後の文字をインプットボックスに記述しブック全体の文字を一括で置換(変更)する
'その後は戻せなくても結構です。
下のように記述しましたが、うまく動作しません
よろしくお願いします。

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/25 00:13

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つの応答文字列に置き換えればよい。
まずこれがあって、それではカバーできてない点や、不満足な点を
質問すべきではないかと思う。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/25 00:08

記述した内容ですが、色々とうまくいかない所が見受けられます。


実際には、もっとシンプルにできるので、下記参考にして下さい。

全部のシートの、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
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/11/25 00:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!