• 締切済み

WordVba ルビをすべて解除する方法は?

高校の授業で生徒が自己採点できる教材を作っています。自己採点のマクロとは直接関係はないのですが、マクロの勉強を兼ねて、次のような課題を解決したいと思ったのですが無理でした。 生徒向け表示用のワード文書で読みにくい漢字にルビを設定したものが100ファイル(600文字~1000文字)ほどあります。ルビをふっていない文書が必要になったのですが、ルビを設定していない素の文書が見つからないのでVbaを使ってルビをすべて解除したいと思っています。 「MSDNのWord VBA リファレンス > オブジェクト モデル > Range オブジェクト」を参照して、Range.PhoneticGuideメソッドを使えばできそうなので次のようなプロシジャー作り、実行したら手作業のときと同じような結果(ルビが解除できる場所と個数が私には予想できない)になりました。 Sub ReSetPhonetic() ActiveDocument.Range(Start:=200, End:=500).Select Selection.Range.PhoneticGuide Text:="", _ Alignment:=wdPhoneticGuideAlignmentCenter, _ Raise:=11, FontSize:=7 End Sub ルビをふってあるRangeオブジェクトを正確に指定する方法が分からないので、それを含むであろう範囲をStrat、Endに適当に設定して実行してますが、ルビが解除される場所がよく分かりません。複数のルビをふった文字列を一括で解除する方法をどなたか教えていただけませんか。よろしくお願いします。

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

こんなサイトを見つけました。 http://www.wordvbalab.com/code/4236/ 試してみたところ、確かに、すべてのルビが削除されました。 Sub DeleteRuby() Dim myField As Field Dim myRange As Range Application.ScreenUpdating = False Set myRange = Selection.Range For Each myField In ActiveDocument.Fields If myField.Type = wdFieldFormula Then If InStr(1, myField.Code.Text, "\s\up") > 0 Then myField.Select Selection.Range.PhoneticGuide "" End If End If Next myRange.Select Set myRange = Nothing Application.ScreenUpdating = True End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 例えばルビの消去を手動で行う場合には、まず、Wordのウィンドウの上の方に並んでいるタブの中の[ホーム]タブをクリックし、現れた「編集グループ」の中にある[検索]ボタンをクリックし、現れた選択肢の中にある[ジャンプ]を選択しますと、「検索と置換」ダイアログボックスの[ジャンプ]タブが開きますが、その[ジャンプ]タブにおいて、「移動先」欄で[フィールド]を選択し、「フィールド名」欄で[EQ]を選択してから、[前へ]ボタンや[次へ]ボタンをクリックしますと、ルビが降られている箇所の直前の所へとカーソルが自動的に移動します。  その上で、Wordのウィンドウの[ホーム]タブの「フォント」グループ内にある[ルビ]ボタンをクリックし、現れた「ルビ」ダイアログボックスの[ルビの解除]ボタンをクリックしてから[OK]をクリックしますと、その箇所のルビを消す事が出来ます。  この操作を繰り返す事で次々とルビを消す事が出来る訳です。  そこで、[検索]ボタン等を使わずとも、上記の操作を全て自動で行う様にする事で、そのWord文書内の全てのルビを消す事が出来る様にしたものが下記のVBAのマクロです。  尚、万が一、Do~Loopの無限ループに陥った際の対策のために、ループが1回回るごとにLong変数 i の値を1ずつ増やして行き、i の値が99999を超えた時点で無限ループに陥っているものと判断して、自動的にループから抜け出す様になっているのですが、そのためにルビが振られている箇所が10万か所以上ある文書の場合には、99999箇所目までしかルビを消す事が出来ません。  もしそれでは不足である場合には、VBAの構文中において Loop Until m = n Or i > 99999 と記されている箇所の末尾にある99999という数値をもっと大きな数値に変更して下さい。 Sub ルビの自動削除() Dim i As Long, m As Long, n As Long Application.ScreenUpdating = False With Selection .GoTo What:=wdGoToLine, Which:=wdGoToFirst n = -9 Do .GoTo What:=wdGoToField, Which:=wdGoToNext, Name:="EQ" .Range.PhoneticGuide Text:="" m = n n = .Start i = i + 1 Loop Until m = n Or i > 99999 End With Application.ScreenUpdating = True End Sub

  • f272
  • ベストアンサー率46% (8021/17145)
回答No.1

ルビをふってあるRangeオブジェクトを正確に指定する方法はよくわからないので,そういうことをやりたいときは Sub RemoveRuby() ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes Selection.HomeKey Unit:=wdStory Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "EQ*\),(*)\)" .Replacement.Text = "COMMENTS \1" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.WholeStory Selection.Fields.Update ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes Selection.Fields.Unlink End Sub でやってます。

EulerKnowsNo
質問者

お礼

ありがとうございました。そのままコピペして実行すればうまくいきました。これで生徒のタイピングの課題ファイルを自動採点する際の正解ファイルがすぐに作成できます。ひとまず2学期末の成績処理をしてから、その後Wordのマクロコードをじっくり勉強します。WordVbaで処理したい課題がたくさんあるのですが、Vbaの力を実感でき意欲が高まりました。本当にありがとうございました。

関連するQ&A

  • excelマクロですべてのハイパーリンク解除したい

    excel2016で、ワークシート内のハイパーリンクをすべて解除したいと思います。 すべて削除するマクロは Sub Sample()  With ThisWorkbook.Worksheets("Sheet1")   .Hyperlinks.Delete 'ハイパーリンク削除  End With End Sub なのですが、これを解除の命令に変えて Sub Sample()  With ThisWorkbook.Worksheets("Sheet1")  .ClearHyperlinks 'ハイパーリンク解除  .Font.Underline = False '文字のアンダーライン解除  .Font.ColorIndex = xlAutomatic '文字色を自動設定  End With End Sub とするとエラーになってしまいます。 どのようにすれば良いでしょうか?

  • VBAで2つのプロシージャーをつなげるには

    VBAでSub ~ End Subまで書き終えて、一つのプロシジャーを完成させたあと、 その下に、もう一つのプロシジャーを作り、連続してマクロを動かしたいと思ってます。 例に例えると、 Sub test() Dim MyRange As Range Set MyRange = Columns("c").Find(What:="﨑") If MyRange Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyRange.Font.ColorIndex = 3  End If Dim MyCells As Range Set MyCells = Columns("c").Find(What:="髙") If MyCells Is Nothing Then Debug.Print "環境依存文字ははみつかりません" Else MyCells.Font.ColorIndex = 3 End If End Sub      Sub sample()    Dim i As Long   For i = 1 To Cells(Rows.Count, "I").End(xlUp).Row    If InStr(1, Cells(i, "I"), "VBA", vbTextCompare) > 0 Then   Cells(i, "M") = "YES"   End If   Next   End Sub 上記のような2つのマクロをつなげて1つの実家行えるようにするにはどうしたらよろしいのでしょうか。 どうしても実行時に上のマクロと下のマクロが別々に表示されてしまします。 (ちなみに、上側のマクロは環境依存文字を探すマクロ、下側はVBAの文字を見つけ出すマクロです。) どなたかご存知の方いらっしゃいましたら、教えて頂けないでしょうか。 よろしくお願い致します。

  • ルビ削除のマクロの仕様?

    こちら↓でルビを一括で削除するマクロを紹介しています。 http://oshiete1.goo.ne.jp/qa3327909.html ここでのマクロの一部の仕様(?)に疑問に思うことがあり、質問をして この仕様の理解を深めたいと思っています。 >  With Selection >   .Range.PhoneticGuide "" >  End With 「 PhoneticGuide 」はルビを追加したりするメソッドのようですが、 ルビを解除するマクロ記録をとるとこのメソッドが記録されて、上記 のような「 PhoneticGuide "" 」となっています。 これを利用して一括マクロを作成し、ルビを解除することは確かに可能 なのですが、本文内に別のフィールドコードで作成されたものも同時に 解除されてしまいます。 これは「 PhoneticGuide "" 」がルビだけを対象にしているのではない メソッドだからなのでしょうか? 最初に載せたURL先のマクロ内容を、どのように変更をしたらルビ以外 のフィールドコードを対象から外すことが出来るのでしょうか。 「 PhoneticGuide "" 」の利用の仕方と、他のフィールドコードに影響 を与えない方法をご存知の方は教えてください。

  • 【365】フィルタの解除方法

    N3にあいまい検索欄を設定し、入力後に自動的にフィルタリングされるようマクロで設定しました。 ---------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address 'セル色塗り Case "$L$1" If Intersect(Target, Range("L1")) Is Nothing Then Exit Sub Else Call セル色塗り Range("L1").Select End If '会社名検索 Case "$N$3" If Target.Address <> Range("N3").Address Then Exit Sub End If Range("$A$5:$AW$2005").AutoFilter Field:=14, Criteria1:="=*" & Range("N3") & "*" '画面を左上に戻す ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollRow = 1 End Select End Sub ---------------------------------------------------- N3を消去してもなぜかフィルタがかかったままになってしまいます。 N3が消去された後、N列のみフィルタを解除するマクロをご教示ください。

  • 選択範囲にある全ての段落の先頭文字を削除するマクロ

    こんにちは。 Word2007において、 「選択範囲にある、全ての段落の、先頭文字を削除する。」 という処理を行うVBAマクロを作成しようとしています。 このマクロは、選択範囲に対して連続で行いたいので、 マクロ実行後に、範囲選択が解除されていない状態である必要があります。 このマクロを記述しようと、自分なりに考えたVBAコードは以下の通りです。 ------------------------------------------------------------ Sub 選択範囲の先頭文字を削除する() '選択範囲にある、全ての段落の先頭文字を削除する。 Set Selection_Range = Selection.Range '次のForループで範囲選択がなくなるので、Rangeオブジェクトで処理範囲を固定している。 For x = 1 To Selection_Range.Paragraphs.Count Dim str As String str = Selection_Range.Paragraphs(x).Range.Text Selection_Range.Paragraphs(x).Range.Text = Right(str, Len(str) - 1) Next Selection_Range.Range.Select End Sub ------------------------------------------------------------ このマクロを、例えば abc def ghi jkl という範囲を選択して実行すると、 abc def ghi jkl となり、 abc def ghi だけが選択された状態になります。 しかし、本来期待している動作を考えると、マクロを実行した後に、 abc def ghi jkl が選択されているようにしたいのです。。 以上の件について、何か良い方法を知っておられる方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • アクセス(2003)のVBAでビット演算方法

    エクセルのマクロではビット演算ができましたが、アクセスではどのような方法があるのでしょうか? where in 文で値の自動生成も考えられますが、VBやVCでアドインも可能でしょうか教えてください。 '*********** Excel VBA Bit 演算 ************ Private Sub Boln() Dim MyBln As Boolean Dim Object1 As Range Dim Object2 As Range Set Object1 = Range("B11") Set Object2 = Range("B12") MyBln = Object1 And Object2 MsgBox MyBln End Sub '*********** Excel VBA Bit 演算 ************ 以上、宜しくお願いします。

  • Word文書のルビについて

    Word文書を、作成中ですが他の質問にも目を通しましたが、外からコピーしてきた文書ではなく、実際に打ち込んでいる文書にルビをふりたくて、例えば「今日」の文字を指定して、ルビのアイコンをクリックすれば、     きょう     今 日 と出てくるはずなのですが、私の使用しているパソコンだけが、きょう の文字がでてこないため、ルビの指定する画面にわざわざ きょう と打ち込まなければならない状況なのですが、どこの設定を変更すれば、ルビを指定すれば自動で出てくるのでしょうか。 よろしくお願いします。

  • EXCELのVBAでRange("A1:C4")を変数にする方法を教え

    EXCELのVBAでRange("A1:C4")を変数にする方法を教えて下さい。 Sub Sample1() Range("A1:C4").Borders.LineStyle = True End Sub 上のマクロの"A1:C4"を変数にして成立させるにはどのように設定すればいいのでしょうか? 以下の方法ではエラーになってしまうので、宜しくお願いします。 Sub Sample1() HENSU = Chr(34) & "A1" & ":" & "C4" & Chr(34) Range(HENSU).Borders.LineStyle = True End Sub

  • NumberFormatLocalの値を比較したい

    Excel VBA:円記号の入った「NumberFormatLocal」の値を比較したい 以下の例で文字「バックスラッシュ」はVBAでは「円記号」で表示されています。 セルに設定された書式Selection.NumberFormatLocalの値が文字列「"\#,##0;\-#,##0"」に等しいか調べたいがうまく比較できない。 環境、OS:Windows10, Windows8、Excel:2010,2013 例 セル”A1”に数値「123456」を入力 “A1”に手作業で通貨書式を設定 「セルの書式設定」->「表示形式」->「通貨」->「\-1,234」(黒色:デフォルト) マクロの記録は Sub Macro1() Range("A1").Select Selection.NumberFormatLocal = "\#,##0;\-#,##0" End Sub “A1”に設定された書式が通貨書式であるかをVBAで確認するために プロシジャー test1 を作り、実行すれば”No”になる。 “Yes”を予想してしまうが、”No”になる理由と解決方法が知りたい。 Sub test1() Dim strTuka As String strTuka = "\#,##0;\-#,##0" Range("A1").Select MsgBox Selection.NumberFormatLocal If Selection.NumberFormatLocal = strTuka Then MsgBox "Yes" Else MsgBox "No" End If End Sub どなたか、アドバイスをお願いします。

  • VBA 実行時エラー1004 range・・・

    【VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクト】 Excel Book内のあるシートで、 【数量の入っていない行を非表示にする】 【それを解除して全表示にする】 という二つのマクロを使用しています。 このシートのシート名を変更したところ、上記のエラーが出るようになってしまいました。 シート名をもとに戻せば出なくなります。 当方、VBAには詳しくないので、シート名を変えてもこのエラーが出なくなる方法を考え付きません。 エラーからデバッグを表示すると下記記述の窓が開きました。 ===ここから=== Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Application.Goto Excel.Range(Target.SubAddress), True End Sub ===ここまで=== 『Application.Goto Excel.Range(Target.SubAddress), True』の部分が黄色になっていて、その中の『Target.SubAddress』にカーソルを合わせると、 『Target.SubAddress=”(変更前のシート名)”』がポップアップします。 どこかでシート名の変更をすればいいのだろう、という事は察するのですが、それをどうやったらいいのかがわかりません。 使っているマクロの内容は下記です。 ===== 【数量の入っていない行を非表示にするマクロ】 Sub まとめ() ' ' まとめ Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9, Criteria1:="<>" Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== 【それを解除して全表示にするマクロ】 Sub 解除() ' ' 解除 Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9 Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== どこをどうやったらいいのでしょうか。 教えていただけませんでしょうか。

専門家に質問してみよう