dポイントプレゼントキャンペーン実施中!

Word 2013で、カーソルを置いている段落を次の(1)~(5)のように設定できる1つのマクロをお教えいただけないでしょうか。

「1つのマクロ」というのは、マクロを2つ以上に分けないで1つのマクロに(1)~(5)の全部を入れたいということです。

(1)インデント左を-0.2字にする。
(2)インデント右を-0.2字にする。
(3)間隔段落前を0行にする。
(4)間隔段落後を0.12行にする。
(5)行間隔を1行にする。

先日こちらでお教えいただいたことを元にして、自分で次の[A1]、[A2]のように組んでみたのですがどちらもうまくいきませんでした。

[A1]
Sub 下端セル020200121 ()
'インデント-0.2,-0.2、行間隔+0.00, +0.12、行間1行
With Selection.ParagraphFormat
.CharacterUnitLeftIndent = -0.2 ' (1)
.CharacterUnitRightIndent = -0.2 ' (2)
.LineUnitBefore = 0 ' (3)
.LineUnitAfter = 0.12 ' (4)
.LineSpacingRule = wdLineSpaceSingle '(5)
End With
End Sub

[A2]
Sub 下端セル020200121 ()
'インデント-0.2,-0.2、行間隔+0.00, +0.12、行間1行
With Selection.ParagraphFormat
.CharacterUnitLeftIndent = -0.2 ' (1)
.CharacterUnitRightIndent = -0.2 ' (2)
.CloseParaAbove ' (3)
.LineUnitAfter = 0.12 ' (4)
.LineSpacingRule = wdLineSpaceSingle '(5)
End With
End Sub

質問者からの補足コメント

  • 補足1(「お礼」からのつづきです。)

    [上端]([B])
    Sub 上端セル020212001 ()
    'インデント-0.2,-0.2、行間隔+0.00, +0.12、行間1行
    With Selection.ParagraphFormat
    .CharacterUnitLeftIndent = -0.2 ' (1)
    .CharacterUnitRightIndent = -0.2 ' (2)
    .LineUnitBefore = 0.12 ' (3)
    .LineUnitAfter = 0 ' (4)
    .LineSpacingRule = wdLineSpaceSingle '(5)
    End With
    End Sub

    (字数制限のため「補足2」へ続きます。)

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/11/21 19:58
  • 補足2(「補足1」からのつづきです。)

    [下端]([A1])
    Sub 下端セル020200121 ()
    'インデント-0.2,-0.2、行間隔+0.00, +0.12、行間1行
    With Selection.ParagraphFormat
    .CharacterUnitLeftIndent = -0.2 ' (1)
    .CharacterUnitRightIndent = -0.2 ' (2)
    .LineUnitBefore = 0 ' (3)の行単位の処理
      .SpaceBefore = 0 ' (3)のpt単位の処理
    .LineUnitAfter = 0.12 ' (4)
    .LineSpacingRule = wdLineSpaceSingle '(5)
    End With
    End Sub

    (「補足3」へ続きます。)

      補足日時:2019/11/21 19:59
  • 補足3(「補足2」からのつづきです。)

    [中央]
    Sub 中央セル020200121 ()
    'インデント-0.2,-0.2、行間隔+0.00, +0.00、行間1行
    With Selection.ParagraphFormat
    .CharacterUnitLeftIndent = -0.2 ' (1)
    .CharacterUnitRightIndent = -0.2 ' (2)
    .LineUnitBefore = 0 ' (3)
    .LineUnitAfter = 0 ' (4)
    .LineSpacingRule = wdLineSpaceSingle ' (5)
    End With
    End Sub

      補足日時:2019/11/21 20:04

A 回答 (4件)

マクロについて分かっていないのなら、無理してマクロを駆使し


書式を指定するのなら、基本使わないほうが良いと思いますよ。

質問や補足などからマクロ名にセルがついていたので、何となく
表関係のセル内を何とかしたいのだろうなとは思っていました。
左右へのインデントの数値が中途半端なのも気になっていたし、
基本的な部分は同じ処理をしていますしね。

まずはマクロでの処理をしないで、表そのものの設定をしてから
セル内の配置を考えてみてはいかが。

表の設定手順;
1.
設定をしたい表内にカーソルがある状態で、リボンの[表ツール]
の[レイアウト]タブから[プロパティ]または右クリックメニュー
にある[表のプロパティ]を選択。
[表]タブの[オプション]ボタン→[表のオプション]ダイアログで
[既定のセルの余白]にある左右の余白を[ 0 mm ]にします。
これで、左右のインデントのマイナスを指定しなくても、罫線と
文字列の間隔をなくすことができます。
(近すぎるなら、余白を1mm以下で調整してください。)
2.
次に[段落前]や[段落後]の設定ですが、何かの基準線に合わせる
ように設定したい段落に適用しているのでしょうか?
(例えば[グリッド線]など)
この場合は、[表のプロパティ]の[セル]タブにある[オプション]
ボタンを押し、[表全体を同じ設定にする]のチェックをはずし、
上下の余白を指定します。
これで、段落書式の設定をいじらないでも罫線との間隔を一定に
することもできますし、グリッド線に合わせることもある程度は
可能になります。

セル内配置などを見直して、表そのものの設定で対応するのか、
段落書式で対応するのかを検討してみて下さい。

ちなみに、グリッド線に合わせる設定は、段落を[固定値]にして
対応するのを個人的にはお勧めします。

マクロの修正については、上記の[表のプロパティ]での設定でも
対応ができない場合に別途質問されることをお勧めします。
「マクロ(段落前0行)」の回答画像4
    • good
    • 0
この回答へのお礼

確かに!!
表のプロパティで設定する方が遥かに簡単ですね!!

表のプロパティにオプションがあることを知りませんでした。

ありがとうございました。

お礼日時:2019/11/22 13:47

何をなされたいのか分かりませんが。



[全]~[中央]までを順に適用できるようにすればよいのですね。
同じ段落での処理として、とりあえずのマクロです。

[全]
Sub 全セル020212121()
' インデント-0.2,-0.2、行間隔+0.12, +0.12、行間1行
 With Selection.ParagraphFormat
  .CharacterUnitLeftIndent = -0.2 ' (1)
  .CharacterUnitRightIndent = -0.2 ' (2)
  .LineUnitBefore = 0.12 ' (3)
  .LineUnitAfter = 0.12 ' (4)
  .LineSpacingRule = wdLineSpaceSingle '(5)
 End With
End Sub

[項目]
Sub 項目セル040512121 ()
' インデント-0.4,-0.5、同じ部分は省略
 With Selection.ParagraphFormat
  .CharacterUnitLeftIndent = -0.4 ' (1)
  .CharacterUnitRightIndent = -0.5 ' (2)
 End With
End Sub

[上端]([B])
Sub 上端セル020212001 ()
' インデント-0.2,-0.2、行間隔+0.12、+0.00, 同じ部分は省略
 With Selection.ParagraphFormat
  .CharacterUnitLeftIndent = -0.2 ' (1)
  .CharacterUnitRightIndent = -0.2 ' (2)
'  .LineUnitBefore = 0.12 ' (3)
  .LineUnitAfter = 0 ' (4)の行単位の処理
  .SpaceAfter = 0 ' (4)のpt単位の処理
 End With
End Sub

[下端]([A1])
Sub 下端セル020200121 ()
' 行間隔+0.00, +0.12、同じ部分は省略
 With Selection.ParagraphFormat
  .LineUnitBefore = 0 ' (3)の行単位の処理
  .SpaceBefore = 0 ' (3)のpt単位の処理
  .LineUnitAfter = 0.12 ' (4)の行単位の処理
 End With
End Sub

[中央]
Sub 中央セル020200121 ()
' 行間隔+0.00, +0.00、同じ部分は省略
 With Selection.ParagraphFormat
'  .LineUnitBefore = 0 ' (3)の行単位の処理
'  .SpaceBefore = 0 ' (3)のpt単位の処理
  .LineUnitAfter = 0 ' (4)の行単位の処理
  .SpaceAfter = 0 ' (4)のpt単位の処理
 End With
End Sub

上記のマクロで,一部省略しないでコメントブロックのみにして
いるのは、マクロの適用順によっては必要な場合があるので。

段落マクロの参考サイト
http://www.ne.jp/asahi/yamaguchi/marifuhatsu/qap …
https://we-vba.info/word_vba/block6/
https://we-vba.info/word_vba/block0/
その他
https://www.relief.jp/Word-VBA/Paragraph
    • good
    • 0
この回答へのお礼

>何をなされたいのか分かりませんが、

表の段落を設定しているのですが、こんな風にしたらいいのではないか、あんな風にしたらいいのではないかと悩みながら何度も試行錯誤しているため、そのたびにこれらのマクロをしかも各マクロの数値を微妙に変えながら適用することになり、結果として表内の同一行に、必ずしも常に全部という訳ではありませんがこれら5つのマクロのうちのたくさんのものを繰り返して適用することになります。

そのため、[全]~[中央]までを順に適用するとは限らず、全く順序不同で(悪くいえば、手当たり次第に)繰り返して同一行に適用することになります。例えば、次の(ア)、(イ)のように適用することになります。(ア)は、同一行に、まず[項目]を適用して、次に [下端]を適用して、次に [全]を適用するという意味です。「項目 項目 項目 項目」と同じものが続いているのは、[項目]のマクロの数値を少しずつ変えて変えたたびに適用したということです。
(ア) 項目 下端 全
(イ) 中央 下端 上端 項目 項目 項目 項目 全 全 上端 中央 中央 中央

すみませんが、これら5つのマクロの全部を、全く順序不同で(悪くいえば、手当たり次第に)繰り返して同一行に適用できるように修正していただけないでしょうか。

マクロは全く分からないのでお教えいただいたのを、ただ数値などを変更する以外は全くそのまま使わせていただくことしかできません。よろしくお願いします。

お礼日時:2019/11/22 01:19

[A2]は無意味なので、無視しますね。


とりあえず、[A1]の場合の処理について回答します。

質問のマクロだと、(3)が曲者なのです。
 (3)間隔段落前を0行にする。
は、段落前が最初から0行だけなら問題ないのですが、段落前に
行またはポイントでの指定がある場合の処理が必要になります。

マクロに修正として追加したもの。

Sub 下端セル020200121()
'インデント-0.2,-0.2、行間隔+0.00, +0.12、行間1行
 With Selection.ParagraphFormat
  .CharacterUnitLeftIndent = -0.2 ' (1)
  .CharacterUnitRightIndent = -0.2 ' (2)
  .LineUnitBefore = 0 ' (3)の行単位の処理
  .SpaceBefore = 0 ' (3)のpt単位の処理
  .LineUnitAfter = 0.12 ' (4)
  .LineSpacingRule = wdLineSpaceSingle '(5)
 End With
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

お教えのマクロで[A1]は正常に作動するようになりました。
ありがとうございました。

前回お教えいただいたマクロを少し変更して[A1]も含めて次のようなマクロを組んでいます。
事情があってこれらのマクロを同一の行に次々と適用していくのですが、これら全てのマクロを同一行に適用しても正常に作動するように、次のマクロを修正していただけないでしょうか。


[全]
Sub 全セル020212121()
'インデント-0.2,-0.2、行間隔+0.12, +0.12、行間1行
With Selection.ParagraphFormat
.CharacterUnitLeftIndent = -0.2 ' (1)
.CharacterUnitRightIndent = -0.2 ' (2)
.LineUnitBefore = 0.12 ' (3)
.LineUnitAfter = 0.12 ' (4)
.LineSpacingRule = wdLineSpaceSingle '(5)
End With
End Sub

[項目]
Sub 項目セル040512121 ()
'インデント-0.4,-0.5、行間隔+0.12, +0.12、行間1行
With Selection.ParagraphFormat
.CharacterUnitLeftIndent = -0.4 ' (1)
.CharacterUnitRightIndent = -0.5 ' (2)
.LineUnitBefore = 0.12 ' (3)
.LineUnitAfter = 0.12 ' (4)
.LineSpacingRule = wdLineSpaceSingle '(5)
End With
End Sub

(字数制限のため「補足」へ続きます。)

お礼日時:2019/11/21 19:55

A1の方で問題なくうまくいきましたよ?

「マクロ(段落前0行)」の回答画像1
    • good
    • 1
この回答へのお礼

チェックしたところ症状が少し分かってきました。

もう1つ、次の[B]のマクロを作ってあります。
[B]
Sub 上端セル020212001 ()
'インデント-0.2,-0.2、行間隔+0.12, +0.00、行間1行
With Selection.ParagraphFormat
.CharacterUnitLeftIndent = -0.2 ' (1)
.CharacterUnitRightIndent = -0.2 ' (2)
.LineUnitBefore = 0.12 ' (3)
.LineUnitAfter = 0 ' (4)
.LineSpacingRule = wdLineSpaceSingle '(5)
End With
End Sub

次の(a)~(d)のようになりました。「新規行」とは過去にマクロを適用したことのない行です。

(a)新規文書を開いて新規行に[A1]を適用すると段落前0行、段落後0.12行になる。

(b)新規文書を開いて新規行に[B]を適用すると段落前0.12行、段落後0行になる。

(c)新規文書を開いて新規行に[A1]を適用した後に[B]を適用すると、段落前0.12行、段落後0行になるはずなのに、段落前0.12行、段落後2.15ptになる。

(d)新規文書を開いて新規行に[B]を適用した後に[A1]を適用すると、段落前0行、段落後0.12行になるはずなのに、段落前2.15pt、段落後0.12行になる。

(a)、(b)は正常なのですが、(c)、(d)が異常です。

もしできれば、(c)、(d)をお試しいただけないでしょうか。

お礼日時:2019/11/21 18:32

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