[[20161224145424]] 『範囲指定して区切り(シェイプ)を描くには』(yuu) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『範囲指定して区切り(シェイプ)を描くには』(yuu)

区切り線をシェイプで描きたいのですが以下のマクロだと
一定の長さでしか描くことが出来ません。
範囲(セル)を、指定し指定したセル上側に指定範囲まで
Lineを引きたいのですが、以下どのように編集すれば可能でしょうか
ご指導よろしくお願いします。

Sub 点線区切り挿入()

   Dim c As Range
   Set c = ActiveCell
   With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
   c.Left, c.Top, 878.6, c.Top).Select
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(0, 0, 255)
        .Weight = 3
    End With
    End With
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(0, 0, 255)
        .DashStyle = msoLineSysDash
    End With
End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


c.Left + c.Width

でしょうか?

(マナ) 2016/12/24(土) 17:29


質問とは関係ありませんが、こんな書き方でもよいです。

 Sub 点線区切り挿入2()
    Dim c As Range

    Set c = ActiveCell
    With ActiveSheet.Shapes.AddLine(c.Left, c.Top, c.Left + c.Width, c.Top).Line
        .ForeColor.RGB = vbBlue
        .Weight = 3
        .DashStyle = msoLineSysDash
    End With

 End Sub

(マナ) 2016/12/24(土) 18:24


(マナ)さん
連絡ありがとうございます。
質問がうまく伝わらなかったようですが
範囲指定とは複数行指定して、その範囲にLineを引きたいのですが、
例としてD10〜K10とか任意の指定した上でマクロの実行です。
よろしくお願いします。

(yuu) 2016/12/24(土) 20:44


 横から失礼します。

 >>質問がうまく伝わらなかったようですが 

 回答側は、要件としての説明もさることながら、アップされたコードをみて、あぁ、これは
 ActiveCell(どんな選択状態でも、これは「1つ」しかありません)の上に線を引く、
 その線の終端の横位置がコード内で固定されている(878.6)

 なので、その横位置を、選んだセルの実際の横幅に合わせればいいのでは? というポイントでのマナさんの
 回答です。

 もし、横位置の終端をActiveCellではなく、選んだセル領域の全体の横位置の終端に設定したいなら

 Set c = ActiveCell  を Set c = Selection に。
 878.6 を c.Left + c.Width に。

 これで試してください。

(β) 2016/12/24(土) 21:01


 ↑ でコメントしたものは、あくまで選択領域の一番上に線を引きます。

 >>範囲指定とは複数行指定して、その範囲にLineを引きたいのですが、 
 >>例としてD10〜K10とか任意の指定した上でマクロの実行です。 

 D10〜K10 は 複数行ではなく、単一の行ですが、仮に D10:K30 を選択したら、どこにどんな線を引きたいのですか?

(β) 2016/12/24(土) 21:04


(β)さん
ありがとうございます。
2016/12/24(土) 21:01変更内容でOKでした。

>仮に D10:K30 を選択したら、どこにどんな線を引きたいのですか?
各行ごとにセル上に描ければ、いいと思います。
よろしくお願いします。
(yuu) 2016/12/24(土) 23:38


 Selection内の各行を c に取り込み繰り返しをすればOKです。

 Sub 点線区切り挿入3()
    Dim c As Range

    For Each c In Selection.Rows

        With ActiveSheet.Shapes.AddLine(c.Left, c.Top, c.Left + c.Width, c.Top).Line
            .ForeColor.RGB = vbBlue
            .Weight = 3
            .DashStyle = msoLineSysDash
        End With

    Next

 End Sub

(β) 2016/12/25(日) 07:25


 ↑で目的は達成できるかと思います。
 でも、通常の行の高さのシートでこの太さの破線を図としてセットすると、その中の各セルを選択するのが
 ちょっと難しくなりますね。 すでに表のようなものがあって、そこに破線をセットするだけで、見るだけの目的ならいいのですが。

 罫線を使うと、線の太さは制限があって、希望の太さにはできませんけど、以下で、ループなし処理ができます。

 Sub 参考()

    With Selection
        .Borders.LineStyle = xlNone 'いったん選択領域内の罫線をすべて消す

        With .Borders(xlEdgeTop)
            .LineStyle = xlDash
            .Color = vbBlue
            .Weight = xlMedium
        End With
        With .Borders(xlInsideHorizontal)
            .LineStyle = xlDash
            .Color = vbBlue
            .Weight = xlMedium
        End With

    End With

 End Sub

(β) 2016/12/25(日) 07:50


(β)さん
ありがとうございます。
> でも、通常の行の高さのシートでこの太さの破線を図としてセットすると、その中の各セルを選択するのが
> ちょっと難しくなりますね
確かに、その通りです。

そこで、罫線を使う方法ありがとうございます。(確かに罫線なら選択が容易です)が
元々の帳票には、既に罫線のある帳票なんですけど
> .Borders.LineStyle = xlNone 'いったん選択領域内の罫線をすべて消す
この部分だと思いますが、セル選択範囲の縦線まで消去してしまいます。
選択範囲の縦罫線は消去しないようにできますか?
よろしくお願いします。
(yuu) 2016/12/25(日) 13:08


 .Borders.LineStyle = xlNone 'いったん選択領域内の罫線をすべて消す

 この1行を消してみてください。

(β) 2016/12/25(日) 15:00


(β)さん
ありがとうございました。
罫線の方活用させていただきます。
(yuu) 2016/12/25(日) 15:18

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.