[[20200225090856]] 『図形の矢印→の後ろに文字をくっつけたい』(わた) ページの最後に飛ぶ

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

 

『図形の矢印→の後ろに文字をくっつけたい』(わた)

矢印→の後ろ(始点)にセルに入力されている▲をくっつけたいのですが
どうやったらいいのでしょうか?

→はマクロで作成したもので、▲は関数でセルに表示している
記号です。

▲→となるのが理想です。
→はActiveSheet.Shapes.AddLineで作成しています。
よろしくお願いします!

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


 ▲のフォントサイズやセルの幅に影響されるので
 難しいと思います。

 手っ取り早いのは、セル幅を▲一文字分にしておいて、
 LineのLeftを▲のセルからOffset(,1)したセルのLeftに
 する、という方法でしょうか。
(OK) 2020/02/25(火) 09:24

 B2に▲が入力されていて、セル幅が既に調整されているとの前提のマクロです。
 ↓をLineに登録しておいて、Lineをクリックしたら▲にぴったりと張り付きます。

 Sub test()
  With ActiveSheet.Shapes(Application.Caller)
   .Left = Cells(2, 2).Offset(, 1).Left
   .Top = Cells(2, 2).Top + Cells(2, 2).Height / 2 - .Height / 2
  End With
 End Sub
(OK) 2020/02/25(火) 09:39

始点なのか終点なのか判りませんが、マクロの記録機能を使って、手作業で作成する様を記録すれば簡単に命令が判るので、次回からは、まずご自分で試してみてください。

以下は、線吹き出し(枠付き)を使う例です。

 Sub test()
    Dim cw As String

    With Range("B2")
        cw = .Text
        With ActiveSheet.Shapes.AddShape(msoShapeLineCallout1, .Left, .Top, .Width, .Height)
            .Adjustments.Item(1) = 0.5
            .Adjustments.Item(2) = 1
            .Adjustments.Item(3) = 0.5
            .Adjustments.Item(4) = 3
            .Line.EndArrowheadStyle = msoArrowheadTriangle
            .Fill.Visible = msoFalse
            .Line.ForeColor.RGB = RGB(0, 32, 96)
            With .TextFrame2
                .VerticalAnchor = msoAnchorMiddle
                .HorizontalAnchor = msoAnchorCenter
                .TextRange.Text = cw
                .TextRange.Font.Fill.ForeColor.RGB = RGB(0, 32, 96)
            End With
        End With
    End With
 End Sub

なお、文字の枠線と矢印の枠線は表示/非表示や色等、プロパティが共通なので、どちらかだけ違う色とかできません。 別々にしたいならば、2つの図形を使って表現するか、文字列はセルに置いたままで考えてください。
(???) 2020/02/25(火) 10:13


コメントありがとうございます!
▲に→をくっつけるのではなく、
→に▲をくっつけたいのですが
難しいでしょうか?

B2〜E2まで→
F2に▲があったら
A2に▲がくるようにしたいです!

セルの幅ですが、▲が2つ並んで▲▲の場合もあるので
幅を統一するのは出来なそうです。
三角が2つの場合は▲▲→となるのが理想です。

よろしくお願いします!
(わた) 2020/02/25(火) 10:19


 シェイプに式を登録し、
 =A1
 のように
 ▲が入ったセルを参照

 で、そのシェイプを矢印に合わせて移動、
 としたほうが手っ取り早いような。

 矢印に合わせてセルを移動、というのが
 よくわかりません。

(OK) 2020/02/25(火) 10:56


 ↑の方法だと、セルの内容に合わせてシェイプの幅を
 調整する必要が出てきますね。
 ボツにしてください。
(OK) 2020/02/25(火) 11:12

 >B2〜E2まで→ 
 >F2に▲があったら 
 >A2に▲がくるようにしたいです! 

F2に▲があったら ⇒ A2〜E2まで ▲──→
F2に▲が無ければ ⇒ B2〜E2まで ──→
こんな事?

 Sub Test()
    Dim myW As Single, n As Long
    n = UBound(Split(Range("F2").Value, "▲"))
    With IIf(n > 0, Range("A2"), Range("B2"))
        If n > 0 Then
            '横書きテキストボックスに▲を描く
            With ActiveSheet.Shapes.AddTextbox(1, .Left, .Top - 2, 25, 25)
                .TextFrame.AutoSize = msoTrue
                .TextFrame.Characters.Text = String(n, "▲")
                .TextFrame.Characters.Font.Size = 10
                .Fill.Visible = msoFalse   '塗りつぶしなし
                .Line.Visible = msoFalse   '線なし
                myW = .Width - 7
            End With
        End If
        With ActiveSheet.Shapes.AddLine(myW + .Left, .Top + .Height / 2, .Offset(, IIf(n > 0, 5, 4)).Left, .Top + .Height / 2)
            .Line.EndArrowheadStyle = msoArrowheadOpen
            .Line.ForeColor.RGB = RGB(0, 0, 0)
        End With
    End With
End Sub

(ピンク) 2020/02/25(火) 23:04


ピンクさん
コメントありがとうございます!

こんな感じなのですが、矢印が動いても
同じ動作できるようにしたいのですが
可能でしょうか?

 A  B  C  D  E  F
1
2 ▲ ー ー →    ▲
3       ▲ →    ▲

こんな感じになればいいのですが(;_;)
よろしくお願いします!
(わた) 2020/02/26(水) 20:55


 >こんな感じなのですが、矢印が動いても 
 >同じ動作できるようにしたいのですが 

誰が矢印を動かすの?
動いた位置を知る方法は?
▲ が有るのはF列が前提
解らない事だらけ
取敢えずセルが置かれた行上にF列まで矢印を引きます。

 Sub Test2()
    Dim myW As Single, n As Long, R As Long
    R = ActiveCell.Row
    n = UBound(Split(Cells(R, "F").Value, "▲"))
    With IIf(n > 0, Cells(R, "A"), Cells(R, "B"))
        If n > 0 Then
            '横書きテキストボックスに▲を描く
            With ActiveSheet.Shapes.AddTextbox(1, .Left, .Top - 2, 25, 25)
                    .TextFrame.AutoSize = msoTrue
                    .TextFrame.Characters.Text = String(n, "▲")
                    .TextFrame.Characters.Font.Size = 11
                .Fill.Visible = msoFalse   '塗りつぶしなし
                .Line.Visible = msoFalse   '線なし
                myW = .Width - 7
            End With
        End If
        With ActiveSheet.Shapes.AddLine(myW + .Left, .Top + .Height / 2, .Offset(, IIf(n > 0, 5, 4)).Left, .Top + .Height / 2)
            .Line.EndArrowheadStyle = msoArrowheadOpen
            .Line.ForeColor.RGB = RGB(0, 0, 0)
        End With
    End With
End Sub
(ピンク) 2020/02/27(木) 00:03

▲を入力しているのはセルですよね? 図形を動かすとセルまたは文字だけ動く…、なんてできないので、いったい何がしたいのかがよく判らないです。 テキストボックスなら図形の仲間なので動かせますが、普通の線を矢印型にしても、これにはテキストボックスが付いていないので、ピンクさんの例のように、線とテキストボックスの2つに分けることになります。 しかしこれだと、2つの図形は別物なので、グループ化でもしないと一緒には動きません。 マクロでは、矢印を消してから描きなおすことにして、▲は手入力のままで良いのではないですか?

または、セルの制限を無視して自由に▲を移動させたいのならば、完全無視されてしまいましたが、私の案だと、テキストボックスに線がくっついた図形を使っていたので、どっちを動かしても連動して同時に動きます。 テキストボックスには枠を付けたくないならば、応用案として、線を矢印型にするのではなく、矢印の図形を使うという手もあります。 矢印の図形は中に文字列を書くため太目なのですが、これはサイズを変えて細くすれば、線のようにもできます。 これなら、枠の無いテキストボックスと矢印のセットにできますよ。(テキストボックス部分は、右マージンを大きくするとかで、矢印の外に置くこともできます)
(???) 2020/02/27(木) 10:44


コメント返信:

[ 一覧(最新更新順) ]


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