
現在マクロの勉強中です。複数のワード文書に対して文字の置換を行うマクロがないかと調べたところ以下のようなマクロを見つけました。
最後まで調べたのですが、置換用配列と文書全体を置換のつながりがうまく理解出来ません。
ato(x) = Replace(parts(1), Chr(13), "")で置換するための文字列を指定していると思うのですが、Replace(置換する文字列を含む文字列, 検索する文字列, 置換する文字列)の構文に当てはめて考えた際にChr(13)で何を検索しているのかがわかりませんでした。どなたかわかる方がいらっしゃいましたら教えて欲しいです。
Sub 複数文書連続処理_リストを元に置換()
Dim mae(100)
Dim ato(100)
'置換用配列
Set paras = ActiveDocument.Paragraphs
x = 0
For i = 1 To paras.Count
thisline = paras(i).Range.Text
parts = Split(thisline, ";")
If UBound(parts) > 0 Then
mae(x) = parts(0)
ato(x) = Replace(parts(1), Chr(13), "")
x = x + 1
End If
Next i
'フォルダの選択
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択"
.AllowMultiSelect = False
If .Show = -1 Then
mypath = .SelectedItems(1) & "\"
Else
MsgBox "終了します。"
Exit Sub
End If
End With
'Word文書に対する処理
myfile = Dir(mypath & "*.doc*")
Do While myfile <> ""
Documents.Open FileName:=mypath & myfile
For i = 0 To x - 1
Call 文書全体を置換(mae(i), ato(i))
Next i
ActiveWindow.Close SaveChanges:=wdSaveChanges
myfile = Dir
Loop
End Sub
Function 文書全体を置換(mae, ato)
Set myrange = ActiveDocument.Range(Start:=0, End:=0)
With myrange.Find
.ClearFormatting
.Text = mae
With .Replacement
.ClearFormatting
.Text = ato
End With
.Execute Replace:=wdReplaceAll
End With
End Function
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
文書全体を置換する設定がされているので大丈夫です。
Replace:=wdReplaceAll
これが、文書全体で指定した[検索する文字列]を[置換後の文字列]に
すべて置換する設定なので。
Chr(13)は、Wordにおける段落記号を意味する文字コードです。
[ Enter ]キーを押して改行したときの記号ですね。
[ Shift+Enter ]キーを押したときの段落内改行はChr(11)になります。
ワイルドカードを使った置換などで使用することがあります。
http://office-qa.com/Word/wd390.htm
質問にあるマクロは、こちら↓のものですよね。
https://stabucky.com/wp/archives/13067
Word文書としてマクロのあるファイルに用意したリストを使うのに
必要な処理として、段落記号を含まないで配列を用意する必要がある
ために、Replace関数で処理をしているようです。
thislineの変数に段落全体を取り込むと、段落記号を含んでしまうので
Replace関数で処理をしていますが、取り込むときに最後の一文字分
含まないようにテキストで取り込めば、Replace関数を使わないでも
処理できるようになります。
置換用配列を以下のように書き換えます。
' 置換用配列
Set paras = ActiveDocument.Paragraphs
x = 0
For i = 1 To paras.Count
' 一文字分(段落記号)を除く範囲で取り込む
With paras(i).Range
thisline = Left(.Text, .Characters.Count - 1)
End With
' 取り込んだテキストを配列に
parts = Split(thisline, ";")
If UBound(parts) > 0 Then
mae(x) = parts(0)
ato(x) = parts(1)
x = x + 1
End If
Next i
この書き方でも同じ処理をします。
ちなみに、Function 文書全体を置換(mae, ato) の中の処理について
冗長な書き方をしているので、以下のようにしても大丈夫です。
Function 文書全体を置換(mae, ato)
Set myrange = ActiveDocument.Range(Start:=0, End:=0)
With myrange.Find
.Text = mae
.Replacement.Text = ato
.Execute Replace:=wdReplaceAll
End With
End Function
No.3
- 回答日時:
#2です
改行コードだけでは、しっくりこないかも知れません
食事から帰ったのでので追記します
#1様の回答にある通りです。
ActiveDocument.Paragraphs はアクティブドキュメントの段落コレクションを取得しています。コレクションなのでインデックスで特定行を抽出できます((設定ドキュメントの)全ての段落を対象にしています)
For i = 1 To paras.Count
thisline = paras(i).Range.Text
また、段落なので段落末には改行コードがあると言う事になり
置換時に問題が起こる可能性があります(例えば置き換えた時に段落が増える)
なので改行コードを""に置き換えています。(削除)
>置換用配列と文書全体を置換のつながりがうまく理解出来ません。
このコードは文章全体に対して置換処理を行っていません。(多分)
Set myrange = ActiveDocument.Range(Start:=0, End:=0)
セミコロンで区切られた文字列(段落)でセミコロンの左が置換文字
右が置換後の文字 をセットして
複数の*.doc*に対して 1行目に文字列に該当文字列がある場合
書き換える処理になると思います。
多分、様式や日付などを変更するためのコードではないかと思います
置換文字列は複数、、対象ファイルも複数、、、書き換え箇所は
1行目のみ、、のようですね。
No.2
- 回答日時:
こんにちは
>Chr(13)で何を検索しているのかがわかりませんでした。どなたかわかる方がいらっしゃいましたら教えて欲しいです。
parts = Split(thisline, ";")は理解されているとして 改行コードが分からないと言う事でしょうか。
、、ごめんなさい。Excelですが、、参考サイトでどうぞ
https://www.tuna-kichi.com/entry/CrLf
No.1
- 回答日時:
こんにちは
元のデータが、1行ごとに、
置換前語句;置換後語句
として記入されているものと想像します。
これを置換前と置換後として配列に読み込んでいますが、置換後語句の最後にある改行コード(=Chr(13))を削除しているものと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Excel(エクセル) IF文の管理を簡単にしたい 4 2021/11/07 11:23
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Excel(エクセル) Excelで、小さいサイズの文字だけ削除したい 4 2021/11/09 03:43
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) VBAで指定期間の範囲を抽出し、リストボックスに表示したいです。 2 2021/12/20 23:21
- Visual Basic(VBA) EXCEL VBA シート貼り付け 3 2021/11/15 12:33
- Visual Basic(VBA) wordのマクロで思うように行きません(ファイル削除ができない) 3 2023/09/12 08:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマを改行に変換する方法
-
カンマ( , )をタブに置換したい。
-
秀丸で余分なスペースを削除したい
-
エクセルで濁点カナの変換方法...
-
一括置換ソフトTTextSS 3.20に...
-
Word:差し込み印刷時に文字列...
-
エクセル重複削除で綺麗に削除...
-
CSVファイルの任意の列をダブル...
-
セルの文字列後ろのスペース削除
-
Wordの置換を使って複数のスペ...
-
エクセルの『検索と置換ボック...
-
テキストでタブを検索してスペ...
-
複数のスペースをひとつのカン...
-
「すべて置換」を実行しても飛...
-
文字の列を揃えるには
-
エクセルの「置換」で1行の部分...
-
Excelで全角ハイフンを半角ハイ...
-
ワードでの文字変換
-
エクセル 置換又は関数でかっこ...
-
段落番号の前に記号を付けて段...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマを改行に変換する方法
-
カンマ( , )をタブに置換したい。
-
エクセル重複削除で綺麗に削除...
-
文字列に含まれているダブルク...
-
文字の列を揃えるには
-
秀丸で余分なスペースを削除したい
-
Excelで全角ハイフンを半角ハイ...
-
エクセルの『検索と置換ボック...
-
Word:差し込み印刷時に文字列...
-
セルの文字列後ろのスペース削除
-
エクセルで濁点カナの変換方法...
-
CSVファイルの任意の列をダブル...
-
1文字だけ置換したい
-
word 改行マークを印刷時に表示...
-
エクセルでコンマとピリオドを...
-
ワード (word ) 日本語の文字...
-
Word VBA フッターでの文字の置換
-
エクセル 置換又は関数でかっこ...
-
テキストでタブを検索してスペ...
-
【MS Office Word 2007】文章の...
おすすめ情報