現在マクロの勉強中です。複数のワード文書に対して文字の置換を行うマクロがないかと調べたところ以下のようなマクロを見つけました。
最後まで調べたのですが、置換用配列と文書全体を置換のつながりがうまく理解出来ません。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル重複削除で綺麗に削除...
-
カンマ( , )をタブに置換したい。
-
カンマを改行に変換する方法
-
秀丸で余分なスペースを削除したい
-
セルの文字列後ろのスペース削除
-
エクセルの「置換」で1行の部分...
-
テキストでタブを検索してスペ...
-
Excelで全角ハイフンを半角ハイ...
-
【MS Office Word 2007】文章の...
-
文字列に含まれているダブルク...
-
Wordの置換方法について
-
Word 図表番号における半角の挿...
-
文字の列を揃えるには
-
エクセルのマクロでのオブジェ...
-
桐の項目名の変数利用(一括処理)
-
ダブルクォーテーションカンマ...
-
Access リストから文字の...
-
.txtファイルの空白を全て消去...
-
word 改行マークを印刷時に表示...
-
Excelで特定の文字以下を削除し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ( , )をタブに置換したい。
-
カンマを改行に変換する方法
-
Excelで全角ハイフンを半角ハイ...
-
エクセルの『検索と置換ボック...
-
秀丸で余分なスペースを削除したい
-
Word:差し込み印刷時に文字列...
-
【MS Office Word 2007】文章の...
-
文字の列を揃えるには
-
エクセル重複削除で綺麗に削除...
-
エクセル 置換又は関数でかっこ...
-
複数のスペースを1つのタブに...
-
セルの文字列後ろのスペース削除
-
文字列に含まれているダブルク...
-
エクセルの「置換」で1行の部分...
-
word 改行マークを印刷時に表示...
-
1文字だけ置換したい
-
ワードで複数の文字を一括・連...
-
エクセルで濁点カナの変換方法...
-
CSVファイルの任意の列をダブル...
-
Word VBA フッターでの文字の置換
おすすめ情報