ルビ削除のマクロの仕様と影響範囲について

このQ&Aのポイント
  • ルビ削除のマクロの仕様とは?マクロを使用してルビを一括で削除する方法について紹介しています。
  • PhoneticGuideメソッドとは?ルビを追加したりするメソッドについて説明しています。
  • ルビ削除マクロの注意点:ルビだけでなく他のフィールドコードにも影響する可能性があるため、注意が必要です。
回答を見る
  • ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 そのコードを書いたWendy02です。どうもです。(^^; >最初に載せたURL先のマクロ内容を、どのように変更をしたらルビ以外 >のフィールドコードを対象から外すことが出来るのでしょうか。 今、掲示前のコードをみると、元は、そのための考慮はされていました。そのURLのご質問者さんの元のドキュメントの大きさなどを考慮して、たった判別する1行なのですが、極力、省メモリで書いたのです。 元のコードは、こういう内容です。 Sub orgFuricanaClear() Dim f As Variant With ActiveDocument For Each f In .Fields   If InStr(f.Code.FormattedText.Text, "\up") > 0 Then   f.Select   With Selection    .Range.PhoneticGuide ""   End With   End If Next End With End Sub >PhoneticGuide フィールドコード側が、私の勘違いでなければ、\upというスイッチが入りますので、それが判定できるものだと思っています。 >これは「 PhoneticGuide "" 」がルビだけを対象にしているのではないメソッドだからなのでしょうか? もしかしたら、東アジアバージョンのみにしかなく、ユニバーサルに存在するフィールドコードとのマッチング(整合性)については、考慮されていないのかもしれません。

enunokokoro
質問者

お礼

早速の回答ありがとうございます。 いつもマクロ関係では勉強させていただいており、今回も勉強のつもり でお気に入りに入れていた質問内容を、いろいろ試す段階で疑問に思う ことがあり、珍しく質問しました。 >東アジアバージョンのみにしかなく、ユニバーサルに存在するフィールドコード >とのマッチング(整合性)については、考慮されていないのかもしれません。 これは確かに考えられますね。 フィールドコードそのものはユニバーサルに通じるWordの機能なので、 それを利用したルビについては PhoneticGuide を用意していても削除 することにはあまり考慮したものではないのかもしれませんね。 今回の回答も本当に勉強になりました。今後も何かとお世話になるかも しれませんがよろしくお願いします。

enunokokoro
質問者

補足

回答している私としても反省する部分ですが、私のWordのバージョンは Office XPにあるWord2002です。 質問文に載せたURL先でのバージョンはWord2000ですが、Word2002以降 との違いはあるのでしょうか? それから >フィールドコード側が、私の勘違いでなければ、\upというスイッチ >が入りますので、それが判定できるものだと思っています。 これについて今試してみると、数式エディタの変わりに作成した数式の 一部が解除されてしまいました。\upスイッチで判別させるのは注意が 必要なようです。 そこでWord2002のルビ機能を使用したときに入る"\* jc2"を "\up"の 替わりにしても良いようですね Sub orgFuricanaClear() Dim f As Variant With ActiveDocument '一部変更 For Each f In .Fields   If InStr(f.Code.FormattedText.Text, "\* jc2") > 0 Then   f.Select   With Selection    .Range.PhoneticGuide ""   End With   End If Next End With End Sub これでルビだけを対象にすることは可能なようです。 ただし、ルビ部分を太字や斜体にするために"\* jc2"を削除していると 意味がないですが、私が通常使う分にはこちらのほうが使い勝手が良い ようです。 実はこの質問を立ち上げた理由の一つに、フリーで紹介しているのWord のアドインテンプレートを利用すると、ルビ以外のフィールドコードが 解除されるために、質問文のURL先で紹介しているマクロと同じもので 作成しているのではないかと思っていまして、今回のことをきっかけに 自分用のマクロを用意しておこうと思ったことがきっかけです。 もっと使い勝手が良いものを思いつきましたら、わがままな補足ですが マクロを載せていただくと嬉しいです。 今回の回答も、今後の使用においてとても役にたつものだったので回答 をしてくださり、嬉しくなりました。本当にありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

enunokokoro様 こんばんは。 いつもタイミングよくサポートしていただき、この場を借りて、改めて御礼申し上げます。 >質問文に載せたURL先でのバージョンはWord2000ですが、Word2002以降 >との違いはあるのでしょうか? この件に関してはありませんが、そのURL先の内容では、Word2000とWord2002以降の違いは、検索や置換に影響があります。フィードコードを表示させないと検索できません。Word2000 は、マクロとしても、他にも簡単な部分で違うところがあります。どうやら、Excelとは違い、Wordは、Word2000とWord2002以上では、かなり違いがありそうです。 "\* jc2" は、私のほうも修正しておきました。ありがとうございました。私は、人にはいくつかの本を薦めるくせに、実は、Wordに関する資料なんていうのは、ほとんどないに等しいのです。かろうじて、「Office 97プログラマーズガイド」程度です。(^^; 今回のマクロの周辺に関しては、一応、この後は、オン・デマンドにさせていただきます。 ところで、Wordのマクロは、COMアドインが多いので、結構、この先、困ることが多くなるのではないか、と思っています。まさか、あまり先走って、VSTO(旧Develper)なんて高いものを買うのは、散財になってしまうので、しませんが、さりとて、VB.Net も、いまひとつ、勉強する気が起こらないので、先行きの見通しが暗いです。 それと、少し、Word VBAも休んでいると分からなくなってしまいます。鈍らない程度には、やっていないと、本当に忘れます。

enunokokoro
質問者

お礼

再度の回答ありがとうございます。 Word2000とWord2002以降のマクロの違いは確かに感じています。 ルビの設定するマクロでも、Word2000用のマクロを使うと動作が異常に なることがあったり、作業ウィンドウや描画キャンバスの関係での違い があったりするようですから。 WordのマクロはExcelほど情報量が無いので、ここでWendy02様が回答を しているものを参考にしたりして、ぼちぼち利用してり勉強したりして います。 OfficeはExcelが基本になっているようで、Wordなどはおこぼれ扱いで あるので、勉強するのも大変ですから、私もあまり手を出さないように しています。 基本的なところは理解ができましたので、今回の質問についてはこれで 締め切らせていただきます。 Wendy02様が今後も活躍されますよう願いつつ、お礼申し上げます。

関連するQ&A

  • フィルタで検索した行をマクロで削除する時のコード。

    フィルタで検索した行を一括して削除するマクロを作りました。 記録して加工したマクロで今のところ動くのですが、 理解不能の箇所があるので教えてください。 下記マクロはC列の空白行をフィルターで選択して、表示された行を削除するマクロです。(データは2行目から始まっていて、フィルターは1行目に行います。また、行は全て連続しています。) また、コメントを各コードにつけています。 ここで、コメント内の(1)で示した箇所は2行目を選ぶことになっているのですが、何故これで良いのでしょう?2行目のデータがフィルターにより隠れることもあるのですが、このコードできちんと動きます。 可視セルしか削除しないのなら、分かるのですが、 そのようなコードも無いようですし・・・ なぜこのコードで動くのか教えてください。 Rows("1:1").Select  '1行目を選ぶ Selection.AutoFilter  'オートフィルター Range("C1").Select   'C1を選ぶ Selection.AutoFilter Field:=3, Criteria1:="=" '空白行を探す。Field3は不明です Rows("2:2").Select  '(1) 2行目を選択 Range(Selection, Selection.End(xlDown)).Select '2行目から連続した最後の行までを選択 Selection.Delete Shift:=xlUp  '選んだところをDelして上に詰める。 Range("C1").Select  'C1を選ぶ Selection.AutoFilter Field:=3  'フィルタ解除 基本的なことかもしれませんが、ご教示頂ければ幸いです。 よろしくお願いします。

  • 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に適当に設定して実行してますが、ルビが解除される場所がよく分かりません。複数のルビをふった文字列を一括で解除する方法をどなたか教えていただけませんか。よろしくお願いします。

  • エクセル マクロ:文字変更

    教えてください。 sheet5にデータがあります。 マクロを実行すると、一番右の列のセルに○があると●と書き換える 一番右の列のセルに△があると▲と書き換えるコードを作成しています。 下記のコードでは時間がかかってしまいます。 省略 If Sheets("sheet5").Cells(r, cmax).Value = "○" Then Sheets("sheet5").Cells(r, cmax).Value = "●" 省略 AutoFilterを使用してマクロを作成しましたが、列に○と△が両方無いと 範囲指定したセルがすべて▲となってしまいます。 下記コードをどのように手直ししたらよいのか教えて頂けないでしょうか。 よろしくお願いします。 Sub 文字変更() Dim c As Integer Dim cmax As Integer Dim rmax As Long With Sheets("sheet5") rmax = .Range("A3").End(xlDown).Row cmax = .Range("A3").End(xlToRight).Column .Rows("1:1").Select Selection.AutoFilter For c = 2 To cmax Selection.AutoFilter Field:=c, Criteria1:="○" .Cells(1, c).Offset(1, 0).Select .Range(Selection, Cells(rmax, c)).Value = "●" Selection.AutoFilter Field:=c, Criteria1:="△" .Cells(1, c).Offset(1, 0).Select .Range(Selection, Cells(rmax, c)).Value = "▲" Selection.AutoFilter Field:=c Next c End With Selection.AutoFilter End Sub

  • マクロの簡素化

    下記マクロです。 Range("AE6:AE1005").Select Selection.ClearContents Selection.Interior.ColorIndex = xlNone If Range("AD6").Value > 5 Then Range("AE6") = "*" Range("AE6").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD7").Value > 5 Then Range("AE7") = "*" Range("AE7").Select With Selection.Interior .ColorIndex = 3 End With Else End If If Range("AD8").Value > 5 Then Range("AE8") = "*" Range("AE8").Select With Selection.Interior .ColorIndex = 3 End With Else End If 中略(セルを一個づつ指定しています) If Range("AD1004").Value > 5 Then Range("AE1004") = "*" Range("AE1004").Select With Selection.Interior .ColorIndex = 3 End With End If If Range("AD1005").Value > 5 Then Range("AE1005") = "*" Range("AE1005").Select With Selection.Interior .ColorIndex = 3 End With Else End If Range("AE3").Select 有るセルを参照しその値が5以上だったら別のセルに*マークとセルに色を付けるマクロですが、一個づつセル指定をしていますが、何とか短く出来ないでしょうか? お分かりになる方宜しくお願い致します。

  • excel マクロ

    Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.Offset(-1, 0).Range("A1:G1").Select Selection.Copy End Sub マクロの記録だけでこのコードを作ることは可能でしょうか?

  • エクセル記録マクロの作成の方法

    エクセル記録マクロの作成の方法 あるネット上でマクロ作成方法では、 ブックのsheet(1)をオートフィルターを利用し、データを抽出した物だけを、シートを追加し張り付けるやり方を、コード上では Selection.CurrentRegion.Select(1) Selection.Copy Sheets.Add Selection.PasteSpecial Paste:=xlValues(2) と記入がありました。 私が自動記録をすると、sheet(1)をコピー時は(1)可視セルのコピーを選択し、貼り付けをするときに(2)値のみにしておこなうと、上記のようなコードで自動記録はおこなわれません。 上記のコードを自動記録操作で作成させるのには、どのような操作記録をおこなったか教えてください。 ((1)についてはアクティブセルのコピーのようだとは理解しました。なぜか理解はできません。)

  • 【エクセル マクロ】オートフィルター後の行削除

    Excel2003を使用しています。 オートフィルターを利用した作業をマクロの記録で処理していて 抽出されたデータを行ごと削除しているのですが Selection.AutoFilter Field:=1, Criteria1:="仕入先コード" Rows("4:2102").Select Selection.Delete shift:=xlUp Selection.AutoFilter Field:=2, Criteria1:="仕入先合計" Rows("7:2008").Select Selection.Delete shift:=xlUp …と、上記のような行番号で指定されてしまい 毎月データ数が増減するので、うまく処理出来ません。 (データは、テキストファイルからエクセルに取り込んでいます) 過去の例で近いものがあれば記述の中に取り込んでみましたが… これもうまくいきませんでした。 毎月変わるデータ数に対応できるマクロの記述を教えて下さい。 よろしくお願いします。

  • マクロの実行ボタンを削除するマクロ

    以下のようなコードを書いたのですが シート内にボタンができてそのボタンを最終的には削除したいです 資料作成のテンプレートとして下記コードを書いたのですが 資料ができた時にボタンがあるままだと見栄えがいまいちなのでマクロ実行ボタンを削除したくなりました。 シート数は30枚くらいあるので1シートずつマクロ実行ボタンを削除するのは正直しんどいです 一度にシートを全部選択してマクロ実行ボタンを削除したいです マクロ実行ボタンの箇所は全シート同じ箇所にあります Sub ボタン() Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ActiveSheet.Buttons.Add(108, 40, 55, 15).Select Selection.OnAction = "図形挿入等倍" Selection.Characters.Text = "図形挿入" With Selection.Characters(Start:=1, Length:=4).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Range("E4").Select ActiveSheet.Buttons.Add(215, 40, 55, 15).Select Selection.OnAction = "赤枠" Selection.Characters.Text = "赤枠" With Selection.Characters(Start:=1, Length:=2).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Range("G4").Select ActiveSheet.Buttons.Add(323, 40, 55, 15).Select Selection.OnAction = "テキスト入り赤四角" Selection.Characters.Text = "テキスト" With Selection.Characters(Start:=1, Length:=4).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Rows("12:12").Select ActiveWindow.FreezePanes = True End Sub

  • 【自作マクロ】いらない部分を削除していただきたい。

    自分で行ってみたマクロですが、長く、見づらいです。 いらない部分を削除していただける方がいましたら、お願いいたします。 作業としては、 /////////////////////////////////// あああ いいい ううう えええ おおお かかか      あかさたなはまやらわん の、「あかさたなはまやらわん」を削除し、セルの結合を解除し、 あああ、いいい など文字のあるセルと下のセルを結合して格子をつける。 /////////////////////////////////// Sub 項目を1行にして摘要を削除する() ' ' 項目を1行にして摘要を削除する Macro ' ' Range("C7:H7").Select ActiveCell.FormulaR1C1 = "" Range("C7:H7").Select With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With Selection.UnMerge Range("C6:C7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("D6:D7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("E6:E7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("F6:F7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("G6:G7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("H6:H7").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Selection.Merge Range("C6:H7").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End Sub

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

専門家に質問してみよう