エクセル内の全シート、全セルにある文字をマクロで一括置換したいと思います。
置換したい文字は複数あり、その内容は別ファイル「置換.xls」に次のように記述されています。
A列 B列
1 等 など
2 有り あり
3 無し なし
※A列をB列に置換します。
※置換の項目数は、実際には3つではなく、100近くあります。
どのようなマクロを書けばよいのかお教えいただけませんでしょうか?
具体的なコードでなくても、方向性だけを示していただいても助かります。
よろしくお願いいたします。
Excel2003を利用しています。
No.4ベストアンサー
- 回答日時:
こんにちは。
Wendy02です。http://oshiete1.goo.ne.jp/kotaeru.php3?q=1622180
xlsReplace という私のマクロがあります。
ここで、その後のやり取りを少し読んでみてください。
#4 のコードの中で、
LookAt:=xlWhole,
xlPart に直したほうがよいというお話になっていますが、単語検索で、部分置換か全置換かの違いです。
この回答への補足
前回に引き続き、ご回答いただきありがとうございます。
マクロを拝見させていただきました。
私の希望するものとは微妙に違いますが、大変参考になります。
少し修正を加えまして、セルに記述された文字を元に文字置換ができるようにしました。
あとは、このマクロとは逆の動作、つまり、文字の置換をかけたいファイルから、マクロを走らせて、検索文字と置換文字が記述された別ファイルを元に文字の置換がかけられれば完璧です。
Sub xlsReplace_()
Dim objF As Object, Ret As Variant, Fnames() As Variant, Fname As Variant
Dim sWords$(), rWords$(), Words As Variant, i As Long, j As Long, OrgPath As String
Dim Row As Long
'============================================================
'ここは下位フォルダでも可能です。
Const myDrive As String = "D:\"
'
'============================================================
Row = Range("A" & Rows.Count).End(xlUp).Row
ReDim sWords(1 To Row)
For i = 1 To Row
sWords(i) = Cells(i, 1).Value
Next i
ReDim rWords(1 To Row)
For i = 1 To Row
rWords(i) = Cells(i, 2).Value
Next i
ReDim Words(1, UBound(sWords))
For i = LBound(sWords) To UBound(sWords)
Words(0, i) = sWords(i)
Words(1, i) = rWords(i)
Next i
OrgPath = CurDir
Set objF = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選んでください。", 0, myDrive)
If Not objF Is Nothing Then
Ret = MsgBox(objF.items.Item.Path & "のフォルダのファイルを全て実行しますか?", _
vbYesNoCancel)
If Ret = vbYes Then
ChDir objF.items.Item.Path
Fname = Dir(objF.items.Item.Path & "\" & "*.xls")
Do
ReDim Preserve Fnames(j)
Fnames(j) = Fname
j = j + 1
Fname = Dir
Loop Until Fname = ""
Application.ScreenUpdating = False
For Each Fname In Fnames
Call ReplaceValues(CStr(Fname), Words)
Next Fname
Application.ScreenUpdating = True
ElseIf Ret = vbNo Then
ChDir objF.items.Item.Path
Fnames = Application.GetOpenFilename("xls ファイル(*.xls),*.xls,全てのファイル(*.*),*.*", , , , True)
If VarType(Fnames) = vbBoolean Then Exit Sub
Application.ScreenUpdating = False
For Each Fname In Fnames
Call ReplaceValues(CStr(Fname), Words)
Next Fname
Application.ScreenUpdating = True
End If
End If
Set objF = Nothing
MsgBox "終了"
End Sub
'置換のサブルーチン
Private Sub ReplaceValues(Fname As String, ParamArray Words())
Dim wb As Worksheet, k As Long, arWords
arWords = Words
With Workbooks.Open(Fname)
For Each wb In .Worksheets
On Error Resume Next
For k = LBound(arWords(0), 2) To UBound(arWords(0), 2)
wb.Cells.Replace What:=arWords(0)(0, k), _
Replacement:=arWords(0)(1, k), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
Next k
'Replace の仕様:xlWhole=全一致
On Error GoTo 0
Err.Clear
Next
.Close True
End With
End Sub
No.5
- 回答日時:
こんばんは。
>文字の置換をかけたいファイルから、マクロを走らせて、検索文字と置換文字が記述された別ファイルを元に文字の置換がかけられれば完璧です。
ここまで分れば、すぐにお分りになるのではありませんか?
少し付け加えました。MYWORDS_BK として、ブック名を登録しておき、それを使います。
'============================================================
'ここは下位フォルダでも可能です。
Const myDrive As String = "D:\"
Const MYWORDS_BK As String = "D:\myWord.xls" '用語ブック
'
'============================================================
With Workbooks.Open(MYWORDS_BK)
Row = .Worksheets("Sheet1").Range("A65536").End(xlUp).Row
ReDim sWords(1 To Row)
ReDim rWords(1 To Row)
For i = 1 To Row
sWords(i) = Cells(i, 1).Value '検索語
rWords(i) = Cells(i, 2).Value '置換語
Next i
.Close False '用語取得終了
End With
'-------------------------------- つなげてください。
ReDim Words(1, UBound(sWords))
'=======================================
Range("A" & Rows.Count).End(xlUp).Row
↓[ここで型の自動変換が行われている]
できるだけ、こういう場合は、リテラルに書いたほうが良いようです。
↓
.Worksheets("Sheet1").Range("A65536").End(xlUp).Row
お礼が遅くなり大変申し訳ありません。
アドバイスのおかげで自分の希望にそったものができあがりました。
本当にありがとうございました!
No.3
- 回答日時:
にある、上から二つのやつが使えると思います。
わたしも、このマクロ書いてみましたが、結構てこずると思いますので、上記のものを利用されてみてはいかがでしょうか。
お教えいただいたものは、検索文字欄が5データ分しかないようです。また、対象ファイルはテキストファイルとのことです。
私が希望しているものとは少し違うようです。
No.2
- 回答日時:
とりあえずのコード例
Dim I As Long
Dim Tmp_Fm As String
Dim Tmp_To As String
I = 1
Tmp_Fm = Workbooks("Book2").Worksheets("Sheet1").Cells(I, 1).Value
Tmp_To = Workbooks("Book2").Worksheets("Sheet1").Cells(I, 2).Value
While Tmp_Fm <> ""
ActiveSheet.Cells.Replace _
What:=Tmp_Fm, _
Replacement:=Tmp_To, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False, _
SearchFormat:=False, _
ReplaceFormat:=False
I = I + 1
Tmp_Fm = Workbooks("Book2").Worksheets("Sheet1").Cells(I, 1)
Tmp_To = Workbooks("Book2").Worksheets("Sheet1").Cells(I, 2)
Wend
で、記載意味わかるかな?
少し修正しまして、希望に近いものができました。
ただ、下記の点が希望に添いません。
アドバイスいただければ幸いです。
・置換.xlsを開いておかないと動作しない。
→ 置換.xlsを開かずに動作させたいです。
・Sheet1以外のテキストが変換されない。
→ 全てのシートを変換対象としたいです。
Sub xlsReplace2()
Dim i As Long
Dim Tmp_Fm As String
Dim Tmp_To As String
Const FName = "置換.xls"
i = 1
Tmp_Fm = Workbooks(FName).Worksheets("Sheet1").Cells(i, 1).Value
Tmp_To = Workbooks(FName).Worksheets("Sheet1").Cells(i, 2).Value
While Tmp_Fm <> ""
ActiveSheet.Cells.Replace _
What:=Tmp_Fm, _
Replacement:=Tmp_To, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False, _
SearchFormat:=False, _
ReplaceFormat:=False
i = i + 1
Tmp_Fm = Workbooks(FName).Worksheets("Sheet1").Cells(i, 1)
Tmp_To = Workbooks(FName).Worksheets("Sheet1").Cells(i, 2)
Wend
End Sub
No.1
- 回答日時:
方向性だけでもということで、回答を。
マクロの記録で、置換の作業を記録し、そのコード変更から考えてはいかがでしょうか。
検索語、置換語は用意した別ファイルのセルの値を
変数に代入し、
For~Next構文で、検索語のある限り繰り返し。
検索語・置換語を変数に代入するときと、置換作業をするときで、
それぞれ作業するファイルを切り替える必要があるので、
画面の更新はストップして、全作業終了後画面を更新。
コードが必要ならばまた挑戦してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- その他(IT・Webサービス) 少し複雑なテキスト置換がしたいです。 2 2022/10/13 14:42
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Word(ワード) ワードフォント 一括置換の方法 4 2022/12/31 00:27
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Excel(エクセル) エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法 1 2023/04/19 00:19
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切り形式ではなく、セ...
-
txtファイル内の指定の単語の数...
-
Wordチェックボックス作り方(...
-
秀丸で改行タグ<br>を入れる方...
-
パワーポイントの置き換えマクロ
-
エクセルでアルファベット5段階...
-
エクセルで置換リストを別ブッ...
-
エクセル 置換中の値の更新
-
WORDで一括置換
-
秀丸エディタ タブをカンマに...
-
ExcelのROUND関数を一括解除し...
-
Wordで一括して改ページする方法
-
TeraPadに一括置換のプラグイン...
-
置換(検索場所に「ブック」を...
-
Excel2019で1行に入っている複...
-
HTMLタグを一括消去する方法
-
Ctrl+Hで置換にならない
-
エクセル 数式 不等号を反転
-
文字を一括で置換するソフト・...
-
マクロで文字列をブック全体に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切り形式ではなく、セ...
-
エクセルで例えば、関数を使っ...
-
エクセルでアルファベット5段階...
-
文字を一括で置換するソフト・...
-
Wordチェックボックス作り方(...
-
txtファイル内の指定の単語の数...
-
Ctrl+Hで置換にならない
-
ExcelのROUND関数を一括解除し...
-
エクセル 置換中の値の更新
-
Excelで、10000,20000,30000と...
-
秀丸エディタ タブをカンマに...
-
マクロで文字列をブック全体に...
-
エクセルで置換リストを別ブッ...
-
パワーポイントの置き換えマクロ
-
アクセスのテーブル上でデータ...
-
WORDで一括置換
-
Wordで一括して改ページする方法
-
vbaで実行後、指定のセルに戻す...
-
置換(検索場所に「ブック」を...
-
文字列の<>で囲まれた文字列...
おすすめ情報