WORD VBAについて教えてください。
つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか?
Sub Macro1()
Selection.Find.ClearFormatting
With Selection.Find
.Text = "あ"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = True
End With
Selection.Find.Execute
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは。
>繰り返し処理の書き方を知りたい
それは、サンプルが良くないですね。
直接の回答にはならないかもしれませんが、こういうのはどうかしら?
Sub SampleTest1()
Dim blnFound As Boolean
Dim rngContent As Range
Dim intCount As Integer
blnFound = True
Set rngContent = ActiveDocument.Content
intCount = 0
Do While blnFound = True
With rngContent.Find
.ClearFormatting
.Wrap = wdFindStop
.Text = "あ"
.Execute
End With
blnFound = rngContent.Find.Found
If blnFound = True Then intCount = intCount + 1
Loop
MsgBox (intCount & "個見つかりました。")
End Sub
お答えありがとうございます。
rngContent.Find.Foundというのが、「文字列があるかないか」を判断してくれてるのですね。
実際組み込んでみたら、うまく動きました。
VBAは難しいです。。
どんなものを参考にして覚えていったらよいのでしょうか。。
その辺もアドバイスいただけたらと思います。
自分は、ワードを使うので、ワードVBAを覚えたいと思っています。
No.3
- 回答日時:
#1 です。
Word VBA は説明するの結構難しいです、、、理解しにくかったら、ごめんなさい。
Sub サンプルコード()
'変数の宣言
Dim Rng As Range
Dim SelectionEnd As Long
Dim RngEnd As Long
Dim RngRepEnd As Long
Dim strKEYWORD As String
'検索語の指定
strKEYWORD = "あ"
'(1)ユーザーのマウスやキーボードによる選択範囲を変数 Rng にセット
Set Rng = Selection.Range
'(2)(1)の範囲の終了位置を保存しておく⇒あとで、ループの終了条件に使う
SelectionEnd = Rng.End
'(1)の範囲内で検索する際の設定を行う(Find オブジェクト)
With Rng.Find
'検索または置換操作の条件として書式を含めない場合は、
'事前に ClearFormatting メソッドを実行します
.ClearFormatting
'検索語を設定します
.Text = strKEYWORD
'検索語のなかにワイルドカードを使用できるようにします
.MatchWildcards = True
End With
'※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
'Find オブジェクトの Execute メソッドは成功すると True を返し、カーソル
'の位置が検索された場所へ移動して、変数 Rng にはその検索された語の範囲が
'新たにセットされます。
'検索が成功し、かつ、この範囲 Rng の終了位置が(2)で記憶した位置よりも
'前にあれば、、の条件を満たす限りループを継続します。
'例えば、検索に成功したとして、
'(2)の変数 SelectionEnd = 52 で範囲 Rng の終了位置が 15 なら
'While (Rng.Find.Excute) = True And (15 <= 52) = True
'となって、条件を満たしています。
'※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Do While Rng.Find.Execute And Rng.End <= SelectionEnd
'(3)Exceute メソッドに得られた新しい検索語の範囲 Rng の終了位置を保存
RngEnd = Rng.End
With Rng
'------------------------------------------------------------
'(4)ここでマクロの目的の処理を行います。ここでは置換をおこなって
'います。
.Text = "(置換したっス)"
'------------------------------------------------------------
'(4)で置換などの操作をすると文字列が増えたり、減ったりします。
'したがって、当初のループ終了位置を保存している変数 SelectionEnd
'の値を文字の増減分調整しなければなりません。
'そこで、
'(変更が加わって伸縮した選択範囲の終了位置)-(変更前の選択範囲終了位置)
'を当初の終了位置に加算します。例えば、
'置換前1文字 置換後5文字なら +(5-3)で +2 を加算すれば良いこと
'になります。
RngRepEnd = .End
SelectionEnd = SelectionEnd + (RngRepEnd - RngEnd)
'選択を解除し、カーソル位置を解除前の選択範囲のうしろに移動します。
.Collapse wdCollapseEnd
End With
Loop
'使ったオブジェクト変数を解放します。
Set Rng = Nothing
End Sub
KenKen_SPさん、よく見たら、前にもマクロの件でお答えをいただいた方だったんですね。
またこんな、超初心者な質問でお世話になります。
説明読ませていただきましたが、けっこう難しいんですね。
文字列から、数字も計算へ持っていったり・・・
いまの私には複雑な処理に見えます。。
ですが、揚げていただいた、お答えを実際に組み込んで動かしてみようと思います。
また分からない点など、書き込みするかもしれませんが、よろしくお願いします。(*^_^*)
No.4
- 回答日時:
KenKen_SP です。
> 説明読ませていただきましたが、けっこう難しいんですね。
暴走気味でしたかね。。。
Wendy02 さんのように、シンプルな方が良かったですね。
ご質問趣旨をくめませんでした。すみません。
簡単に言えば、Find メソッドでループ処理するなら、
Find の Excute メソッドは検索に成功すると True を返すので
それをループの条件句にする、、
と、考え方はこれだけのことです。
No.5
- 回答日時:
coral_japanさん、こんばんは。
Wendy02です。ちょっと愚痴に聞こえるかもしれませんが、書かせてください。
>どんなものを参考にして覚えていったらよいのでしょうか。。
>その辺もアドバイスいただけたらと思います。
>自分は、ワードを使うので、ワードVBAを覚えたいと思っています。
Office VBAを扱う者として、Word VBA/Excel VBAは、標準的に使えなくてはならないのですが、今となると、Word VBAは、辛いものがありますね。Microsoft では、早々にCOMにさせるようにしているような気がしますね。でも、コンパイラーも高いし、COMというのは、やはり使用用途が違います。
私は、VBAの経歴が浅いので、VBAの資料が少ないのです。それで、他の方はどうしているのか、と思っています。Wordを出しているライターさんでも、VBAは詳しくない人もいるようです。これは、Excel VBAもある程度同じ運命にあるようですが、Word VBAのほうは、97で、ほとんどおしまいになってしまいました。
私も未だ探しています。この前、図書館で、アスキーのWord 97のプログラマーズガイドを見たけれど、ぜんぜん、イメージが違いすぎます。
今は、辛うじて、Microsoft サポート・サイトから、拾い上げたものを使っています。もう、半年間 Word VBAの本をAmazon サイトとYahooでチェックしていますが、出てきても、望んだものでなかったり、Yahoo!オークションは、プレミアがついてしまって、とてもじゃないけれど買えません。あまり初心者向けでは、高いお金を出しても無駄ですからね。
それで、諦めて洋書(英語版のAmazonでないと、高く付きます。)にするか、思案中です。
以下は、前から利用しているサイトです。
Microsoft Word MVP FAQ Site(お勧め)
http://word.mvps.org/FAQs/index.htm
Resources For MS Word
http://www.kayodeok.btinternet.co.uk/index.htm
「MS Word」 -「Sample Macros, VBA Codes」
英語のWordは、シフトJISとかありませんから、Unicodeをあまり意識しなくてよいのですが、Wordは標準が、Unicodeになっていますから、それが、ちょっとややこしいですね。
MSDN
Wordのオブジェクト
参考URL:http://www.microsoft.com/japan/msdn/library/defa …
Wendy02さん、いろいろありがとうございます。
VBAを理解できれば、仕事の効率もぜんぜん違うと思い、ちょっと覚えてみようといろいろ探してみたのですが、なかなか初心者でもとっつき易い参考本というのがみつかりませんでした。
まだまだ、こちらのサイトでお世話になりそうです。
いまの私からみると、VBA分かる人は、超専門家に見えています。
今後も初心者にも、お優しく、教えてくださいませ。
よろしくお願いいたします。
No.6
- 回答日時:
#5の訂正文です。
訂正
× Wordを出しているライターさんでも
↓
Wordのテクニックの本を出しているライターさんでも
日本のWord VBAの掲示板が、いくつかあるようですが、Microsoft Word MVP FAQ ほどにはありませんでした。
No.7
- 回答日時:
もう1つ訂正です。
MSDNのURLが飛びませんでしたので、プロパティからとってみました。(掲示のレイアウトが崩れますので、文末に掲載します。)
Word オブジェクト
飛ばない場合は、
http://www.microsoft.com/japan/msdn/library/defa …
から、
Office ソリューション-Microsoft Office XP-VBAランゲージリファレンス-Microsoft Word Visual Basic-Microsoft Word のオブジェクト
MSDNのリファレンスは、元の文章からの抄録のようなもので、意味の取りにくいものが多いのです。それでも、コードが載っていますので、それを試して、言っている意味を理解します。
参考URL:http://www.microsoft.com/japan/msdn/library/ja/v …
参考URLありがとうございます。
”テキストを操作する”の項を見てみてますが、使用例も載っているので、参考になります。
これですこし葛藤してみようかと思います。
No.8
- 回答日時:
coral_japanさんへ
私も、Word VBAの情報がほしいのです。
一部の方は、今も、のどから手が出るほど欲しいようです。Yahoo!オークションで、古本で最初500円で出ていたものが、10倍以上になりました。5,000円も出すような本ではありません。私には、とても付き合い切れませんでした。私の知っているものは全て書いておきます。できたら、どなたかに、足らない分を補ってほしいと思っています。
書籍
『標準Word2002全機能Bible』 技術評論社
× 『Word VBA 入門教室』 翔泳社
× 『VBA Word 97/98 ハンドブック』技術評論社
(データだけは手に入ります)
『Word 2002, 300の技』技術評論社
おそらく、ここらは、とても、VBAの専門にしている人には満足させるものではないでしょうね。
× 『Word97 VBAハンドブック』 ナツメ社
(×は絶版)
他に、『Microsoft Office 97 プログラマーズガイド』に出ているようですが、今調べましたが、絶版でした。また、Developer関連は、COMが中心で、かなり内容が違ってきます。
『Word 2002, 300の技』の著者の西岡さんという人は、前版(Word 2000)の別の著者(別の意味でWordのプロ中の第一級のライターさんです)の失敗?を轍に、前版のインターネット掲示板の質問等からも取り上げて、多少、VBAが書かれています。必要最低限のVBAのコードは出ているようです。ただ、この種のものは、学習用でも、Office VBAのプロ用のものではありません。
私は、少しずつOffice VBAの英語版にも慣れさせてはいるのですが、日本語ほど速くは読めません。日本語版は、売れないとすぐに絶版にしてしまいます。もう最盛期を過ぎたものに対して、とても、版権を貰って翻訳して出せるような状況ではありませんね。オライリージャパンのように、需要に関係なく、あくまでも、プロ用としてプロのライターが出版する書籍もありますが、とても、Office系は、読者を満足させるようなものではありません。
No.9
- 回答日時:
coral_japan さん、Wendy02 さん、こんにちは。
私も Word VBA を書くのは、情報が乏しくて苦労してますが、資料と
しては、付属のヘルプか、WEB 検索ですねー。WEB 検索では、ほぼ
直接的に参考となるような情報は見つけることができません。
最近は Word をマクロで操作する、、同僚からの「つくってよ~」と
いった需要も減ってきました。標準の機能がある程度のレベルまで
作りこまれて、マクロを使わなくても対処できることが増えたためか、
ユーザーの操作レベル全体が向上してきたためかな、などと考えて
います。
かと言って、標準機能ではできないことを補完する意味でマクロは
非常に便利なツールなのは確かです。
今回 Wendy02 さんがご紹介された、数々の情報は私にも有益でした。
このスレッドに関われて、良かったです。
しかし、よくこれだけの情報を見つけますね。いや、Wendy02 さんの
研究心というか、探究心というか、、いつも関心しきりです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルマクロで教えてください 2 2022/05/04 09:07
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Wordマクロで指定したフォルダ名に保存する方法について 8 2022/12/13 11:35
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Wordの脚注を,1)・・2)・・3)...
-
日英、混合文。日本語だけ小さ...
-
word である文字をすべてイタリ...
-
ワードの箇条書き機能が使われ...
-
Wordデータから,特定の単語を...
-
キングソフトライター2012で質...
-
箇条書きのアタマに一括で「・...
-
テキストボックス一括編集
-
ワードの置換で、文字列の前後...
-
元素記号をワード内で置換
-
「WORD」での作業 日本語・英...
-
<WORD> 微分記号の入力
-
Wordでカッコで括った文字を一...
-
ワードで赤字のみを削除する方法
-
Excelでマクロ実行後、編集→置...
-
置換の仕方
-
wordで特定の色だけ印刷しない方法
-
Word セクション区切りの自動削除
-
Office ワードの段落記号消した...
-
パワポ2010 特定文字のみ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでシートにある赤文字...
-
Excelの表中,数字の「1」をす...
-
ワードで赤字のみを削除する方法
-
Wordでカッコで括った文字を一...
-
ワードで半角英数の文字だけ選...
-
箇条書きのアタマに一括で「・...
-
Wordデータから,特定の単語を...
-
ワードの表の中の値の表示形式...
-
excelマクロ ボタンを押して文...
-
「WORD」での作業 日本語・英...
-
Wordの脚注を,1)・・2)・・3)...
-
wordで特定の色だけ印刷しない方法
-
エクセルで、コンマをピリオド...
-
word 2003で、赤い文字(あるい...
-
Word相互参照の文字を一括で変...
-
EXCEL2010のハイパーリンク先の...
-
英数字のフォント「Century」に...
-
ワードで太字になっているとこ...
-
セルの中の不要な文字を削除し...
-
word である文字をすべてイタリ...
おすすめ情報