ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:5goma ワードのマクロを教えてください
困り度:
  • すぐに回答を!
こんにちは いつもお世話になっています。

ワード(2003)のマクロを教えてください。
ある辞書の文章をコピーした状態から、ワードへ貼り付け、貼り付けた部分だけを書式変更するマクロです。
具体的には、コピーしたテキストを書式付の状態で貼り付けた後、その貼り付けた部分だけを選択して書式を変えたいです。変更する書式は「行間」-「固定値」、「間隔」-「12pt」です。
辞書のコピペで使用したいのです。テキスト形式での貼り付けだと文字化けが生じ、HTMLだと行間が大きすぎるのです。
よろしくお願いします。
質問投稿日時:09/11/08 09:46
質問番号:5430700
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:enunokokoro No.5の続きみたいなアドバイス。
以下の説明はちょっと強引な方法ですが、参考までに。

貼り付け先が文書の最後尾だったなら、以下のマクロで対応できるかも
しれません。

Sub LineSpacing_12pt()
'文書の一番下に辞書内容を貼り付けして行間を指定
 Selection.Paste
 Application.GoBack
 With Selection
  .EndKey Unit:=wdStory, Extend:=wdExtend
  .ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
  .ParagraphFormat.LineSpacing = 12
 End With
  Selection.MoveRigh
End Sub

貼り付けた直前の編集場所に戻って、一番最後まで選択してから行間を
設定する方法ですので、希望しているものでないのなら、工夫するなど
してください。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/11/09 18:19
回答番号:No.6
この回答へのお礼enunokokoro 様 ありがとうございました。
お蔭様で解決しました。
丁寧に教えていただき助かりました。
作業効率が上がります。
Selection.MoveRight
のみ変更させて頂き、長く使わせていただきます。
簡単で恐縮ですが、お礼申し上げます。

回答

 

回答者:enunokokoro いろいろ調べてみると、特殊な環境なのですね。
http://www31.ocn.ne.jp/~h_ishida/skptk/README.html
HTML形式だと文字化けせずに貼り付けできるのですよね。

このとき、文字化けする文字(たぶん外字となっているもの)の書式など
を確認して、使用しているフォントなどを調べてみてはいかが。
メニューの[書式]→[書式の詳細設定]で表示される作業ウィンドウにて
具体的な書式を確認できますので、それをもとにスタイル設定をしても
よいかと思います。

スタイルで設定できないとなると、フォントの取得などを私はマクロで
組むほどのスキルを持ち合わせていませんので、回答できません。

もしも、今すぐ必要なことなら、貼り付けたものを選択するマクロでの
方法は分りませんが、手動で選択しておいてから行間だけ設定する方法
で対応してはいかが。

Sub LineSpacing12()
'貼り付けした範囲を選択後に設定してください
 With Selection
  .ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
  .ParagraphFormat.LineSpacing = 12
 End With
End Sub

このマクロをコマンドボタンとして配置するか、ショートカットキーで
登録しておけば作業効率は少しは上がると思います。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/11/09 17:48
回答番号:No.5
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:Wendy02 こんにちは。

文字化けの程度は、すべてですか、一部ですか?
どのような文字化けになるのでしょうか?

私は現象については、ある程度想像はつくのですが、複雑なものは経験がないのです。

今、見えている以上は、学研の辞書用のフォントが入っているはずですから、enunokokoroさんが示したように、貼り付け用のスタイルを用意し、学研の辞書専用フォントを設定して、そこに貼り付けるようにすればよいと思います。

一応、学研の「Super 日本語大辞典」の外字テーブルを調べてみました。汎用性のあるデータとして、専用フォントを使わない方法は、一旦、クリップボードにあるものを、バイナリで置換していく方法を取るのだと思います。しかし、その中には、文字制御記号まであるとなると、VBAで置換する方法は、かなり複雑なものだと思います。Rubyのようなストリームエディタで出来るようですから、VBAで出来ないはずはないのですが、今、私にとって、今日・明日に出来るとは思えないのです。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/11/09 16:57
回答番号:No.4
この回答へのお礼Wendy02 様 ありがとうございました。
こちらの説明不足から、色々お手数をおかけしまして申し訳ありません。
皆様のご教授のお陰で解決いたしました。
ご紹介いただいたコード等も今後、勉強したいと思います。
簡単で恐縮ですが、お礼申し上げます。

回答

 

回答者:enunokokoro 私も前回の質問を閲覧して、回答するかどうか迷った一人です。

Word2003なら、[貼り付けオプション]で[貼り付け先の書式に合わせる]
がありますので、これを利用してスタイルとして登録しておいたものに
合わせる方法も検討してはいかが。
以下の内容は、辞書として利用する文書オンリーで利用するものとして
の回答です。

すでに辞書用として貼り付けをしてあって、行間などを指定した段落が
存在するなら、そのスタイルを登録しておきます。
・貼り付けして段落書式を設定済みの段落が選択してあるとします。
・[スタイルと書式]→[新しいスタイル]でスタイル名を付けて登録。
・スタイル名を「辞書」として、貼り付け用のマクロを作成。
・マクロの登録先は文書名のThisDocumentでよいと思います。

Sub DictionaryPaste()
'
'辞書スタイルで用意した段落に貼り付け先に合わせる貼り付けをする
'
 Selection.Style = ActiveDocument.Styles("辞書")
 Selection.PasteAndFormat (wdFormatSurroundingFormattingWithEmphasis)
End Sub

上記マクロのスタイル名を変更するだけで、貼り付け先のスタイルへの
変更をして貼り付けしたスタイルを適用できるようになります。

単純に行間だけを設定するだけで、フォント名は貼り付け先と同じもの
にするなら、スタイルを登録しておかなくても以下のマクロで可能です。

Sub LineSpacing12()
 With Selection
  .ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
  .ParagraphFormat.LineSpacing = 12
  .PasteAndFormat (wdFormatSurroundingFormattingWithEmphasis)
 End With
End Sub

上記二つのマクロのどちらかを、マクロ名"Sub EditPaste()"にすれば、
その文書で普通に[ Ctrl+V ]キーで貼り付けしたものが、指定してある
スタイル名で貼り付けされます。
マクロ名を直さないで、登録したマクロへのショートカットキーを設定
するほうが、個人的にはお勧めです。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/11/08 12:24
回答番号:No.3
この回答へのお礼自分の説明不足にもかかわらず、丁寧に教えていただきありがとうございました。
使用している辞書は「Super日本語大辞典」というものです。
特殊なフォントを使っている部分があり、それが意味の見出し番号だったりするので
どうしてもそのフォントを使う必要があります。

現在のやりかたは
1:通常通りの貼り付け(リッチテキスト形式だと思います)
2:貼り付けた部分(行単位)を選択
3:書式の詳細設定-「行間」-「固定値」、「間隔」-「12pt」
としています。

Wendy02 様 と enunokokoro 様のコードを使わせていただきましたところ
行間は成功するのですが、文字化けしてしまいます。
「スタイル」保存もフォントは設定した段落のものを使ってしまうようです。

追加で教えていただけるとありがたいのですが。

回答

 

回答者:Wendy02 こんにちは。

前回、回答が付かなかったようですね。
しばらく、考えてみましたが回答は付けませんでした。ある程度のみなさんが使える汎用性があるものなら作りますが、固有の個人のリクエストに対するマクロは作りにくいです。

最大の原因は、
>コピーしたテキストを書式付の状態で貼り付けた後、

ここの部分です。テキストはプレーン・テキストで貼り付ければよいのです。書式を一旦消すマクロなんて、コードとしては、以下のコードの倍以上になってしまいます。

私は、右クリックで、ExcelもWordもテキスト貼り付けができるオプションを入れています。私の使っているものを、アレンジしてみました。だいたいは、私個人のものは、掲示板の皆様は、人気がないようですが……。これでも、長年使っているものです。

ちなみに、Ctrl + V の設定をしてしまったら、常に、同様の書式になってしまいます。

マクロでクリップボードの中身を調べて、その中身のバイナリコードに対して、反応を換えるということも出来るのですが、Wordは、上限のファイル・サイズが決められていますから、それはしないほうがよいです。

>テキスト形式での貼り付けだと文字化けが生じ、
具体例がないと分かりません。これに関しては処理していません。

以下の使い方は、他のフォーマットでコピーしたものを、右クリックして、「固定書式貼り付け」で、規定の位置に貼り付けします。なお、Normal.dot は、一旦設定したら、バックアップしておくようにしてください。

'-------------------------------------------

'Normal.dot の標準モジュール(Module1)

Sub AutoOpen()
  On Error Resume Next
  With Application.CommandBars("TEXT")
    .Controls("固定書式貼り付け").Delete
  End With
 
  With Application.CommandBars("TEXT").Controls.Add _
    (Type:=msoControlButton, Temporary:=True)
    .BeginGroup = False
    .Caption = "固定書式貼り付け"
    .OnAction = "FormattedTextPaste"
  End With
  Call SettingShortCut
  On Error GoTo 0
End Sub


Sub FormattedTextPaste()
 Selection.PasteAndFormat Type:=wdFormatPlainText
 With Selection.Range
  .ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
  .ParagraphFormat.LineSpacing = 12
 End With
End Sub
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:09/11/08 11:02
回答番号:No.2
この回答へのお礼自分の説明不足にもかかわらず、丁寧に教えていただきありがとうございました。
使用している辞書は「Super日本語大辞典」というものです。
特殊なフォントを使っている部分があり、それが意味の見出し番号だったりするので
どうしてもそのフォントを使う必要があります。

現在のやりかたは
1:通常通りの貼り付け(リッチテキスト形式だと思います)
2:貼り付けた部分(行単位)を選択
3:書式の詳細設定-「行間」-「固定値」、「間隔」-「12pt」
としています。

Wendy02 様 と enunokokoro 様のコードを使わせていただきましたところ
行間は成功するのですが、文字化けしてしまいます。
「スタイル」保存もフォントは設定した段落のものを使ってしまうようです。

追加で教えていただけるとありがたいのですが。

回答

 

回答者:esupuresso >貼り付けた部分だけを書式変更するマクロです。
貼り付けた部分に対してのみ(文字のみ)の「行間」-「固定値」、「間隔」-「12pt」と言う設定は出来ません
段落に対しての設定のみとなります
貼り付けた文字を一つの段落としてみます
貼り付けた段落をドラッグ→メニューバーの「ツール」→「マクロ」をポイント→「新しいマクロの記録」をクリック→「マクロ名を入力」(入力しない場合は「Macro1」がマクロ名として登録されます→「マクロの保存先」を文書1のみにするか全ての文書に適用させるかを選択します→「OK」を押すとマクロの記録が開始されると同時に記録と終了の小さいツールバーが出ます→ 文章をドラッグした状態を維持したまま「書式」→「段落」→「行間」-「固定値」、「間隔」-「12pt」を設定後「OK」をクリック→「マクロの終了」ボタンをクリックしてマクロの登録が終了となります
マクロを実行させる場合は実行させたい段落のどこでもいいですのでクリックしてカーソルを入れておき、マクロ名を登録した場合はそのマクロ名を選択して「実行」をクリックさせます
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:09/11/08 10:46
回答番号:No.1
この回答へのお礼esupuresso 様 ありがとうございました。
記録マクロですと貼り付けた行の選択が一律になってしまうようです。
お手数をおかけしました。
最新から表示回答順に表示良回答のみ表示