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

お世話になっております。

・ワードで算用数字を漢数字に変換する方法又はマクロを探しています。
・希望例: 22→二二、 100→一〇〇等
・以下のマクロを実行しましたが、全く反応がありません。
(マクロについてはずぶの素人です)

Option Explicit
Sub KanToNum()
Dim num As Integer, kan() As Variant
kan() = Array("〇", "一", "二", "三", "四", "五", "六", "七", "八", "九")
For num = 0 To 9
With ActiveDocument.Content.Find
.Text = kan(num)
.MatchByte = False
.Replacement.Text = num
.Execute Replace:=wdReplaceAll
End With
Next num
End Sub

マクロの修正を含めアドバイスをお願いします。
よろしくお願いします。

A 回答 (2件)

Word:算用数字⇒漢数字変換マクロ


http://www.hi-ho.ne.jp/tomita/tips/tips_wd_002.h …
 
    • good
    • 0

>・ワードで算用数字を漢数字に変換する方法又はマクロを探しています。


たぶん、#1さんの引用先のコードは、マクロを探しているという目的なら十分かもしれません。ただし、その作者の方は、こうしたまな板の上に上げられることが望んではいないでしょうけれども、一度、点検したほうがよいのではないか、と思います。Word VBAは、情報が少ないので、自画自賛になり易いです。それは、私も含めてですが。

マクロを勉強しているということで、ご質問で出されたコードの問題点はどこにあるのか、ということでしたら、少し、コメントさせていただきます。

なお、
>(マクロについてはずぶの素人です)
ここでは、Word VBAは、大勢の方も素人だと思います。少し分かるようになると、誰も自信をもって教えているわけです。ただ、掲示板では、あまり根拠のない指摘とExcel VBAのコードをそのまま転用することだけは遠慮してもらいたい所です。

あくまでも、質問上のことですから、書かせてもらいますが、マクロの修正の前に、そのコードは、何かの見本があるでしょうか?みなさん、Word VBAでは同じようなスタイルになるような気がします。Excel VBAの影響でしょうか?Excel VBAのようには書かないほうがよいと思います。
大きくわけて2点あります。

 ActiveDocument.Content.

対象オブジェクトが違っています。置換は文字を対象としているのに、Rangeを対象にしているようです。もし、文字を対象にするなら、Selection を使うか、ActiveDocument.Content なら、一旦、Select してから、Selection で置換したほうがよいです。

次に、
 .Text = kan(num)
 .MatchByte = False
 .Replacement.Text = num
 .Execute Replace:=wdReplaceAll

Word VBAは、Find メソッドは、そんなに省略してはいけないのです。省略することがよいとExcel VBAでは間違って覚える人もいますが、Word VBAでは違います。Wordは、なるべくプロパティは省略しないほうがよいです。それをすると、昨日動いていたマクロが、今日は動かないということが出てきます。

私なら、簡単なことだけれども、格好が悪くても、オーソドックスな書き方をします。それが無難なのです。今回は、少し削りましたが、プロパティ全部を書いてもよいと思います。思わぬことがあるので、私は、最初、省略しないことにしています。

'//
Sub Kan2Num()
 Dim num As Integer
 Dim kan() As Variant
 kan() = Array("〇", "一", "二", "三", "四", "五", "六", "七", "八", "九")
 
 For num = 0 To 9
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  With Selection.Find
   .Text = num
   .Replacement.Text = kan(num)
   .Forward = True
   .Wrap = wdFindContinue
   .MatchWholeWord = False
   .MatchByte = False
   .MatchWildcards = False
   .MatchFuzzy = True
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
 Next
End Sub
    • good
    • 0
この回答へのお礼

お世話になっております。

ご丁寧なアドバイスをいただき誠にありがとうございます。

お礼日時:2011/01/05 09:49

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