三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Excel シェイプの矢印を試作 Shapes AddConnectorで矢印を作成

Excelシェイプで矢印を作成してスクショの場所を指してみた。
不具合付きの自己満足ですがヨロシクお願いします。
https://www.youtube.com/watch?v=Rnji4U4BI7k
目次
00:00 あいさつ 1.キッカケと実行結果を先に見せる
05:00 1.1 問題点 単純に左上の座標にセットしているので、わかりにくい
10:13 2.1 シェイプの線を引くには?マクロ記録のコードを修正して確認テスト
11:51 2.2 セルの左上は?簡単で単純にRangeのLeftとTopでした
17:07 3.PowerPointスクショもどきに線を引く
25:14 3.1 スケール調整って何? Const スケール調整 = (480 / 960)
32:25 4.おわりの挨拶 はやく会計して終わらせてよ・・・

1.キッカケと実行結果を先に見せる
https://www.youtube.com/watch?v=Rnji4U4BI7k
↑実行結果を先に見せる。


手前味噌1:前回のPowerPointの①スクショもどき②シェイプの一覧
ken3memo.hatenablog.com
https://www.youtube.com/watch?v=XIBG8T3b2mY

この処理・表示に追加アレンジ、調子に乗って
③シェイプ情報のTop,Leftを使用して、スクショもどきに矢印で位置をわかりやすくしてみた

1.1 問題点 単純に左上の座標にセットしているので、わかりにくい
自己満足な一品なので、左上の座標(left,top)に単純にセットしているので、
ア.テキストボックス,円,大きな四角形などは、位置が逆にわかりにくい?
イ.直線や線 などは、始点がピッタリなので、わかりやすかったりするけど・・・
ウ.↑で、始点の話をしたけど、下からひっぱったら?線を回転させたら?
改善点:
テキストボックスや円などは、中心を指すように変更した方がよい?
※↑を行うと、直線が?変になる?わりきって使う?

手前味噌2:VBSを使用してExcel選択範囲のセルをPowerPointへ1つ1つ分解セット
ken3memo.hatenablog.com
https://www.youtube.com/watch?v=1FNXLH_re6k&t=548s

意外と使えるので、使ってみてね。と手前味噌の宣伝を入れつつ、

2.Excel VBA 線を引く 矢印を作るには?

時間が無いんだ、中身の説明をハヤクしてください。

2.1 シェイプの線を引くには?
https://www.youtube.com/watch?v=Rnji4U4BI7k&t=613
マクロ記録で記録してコードを調べました
いつものように、マクロ記録でコードを調べました。

Sub Macro1()

    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 210.75, 86.25, 419.25, _
        176.25).Select
        Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadTriangle
        Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .Weight = 4.5
    End With
    Range("H2").Select
End Sub

Shapes.AddConnectorで線を引けることがわかりました。
あと、矢印の形は、
Line.BeginArrowheadStyle = msoArrowheadTriangle
Line.EndArrowheadStyle = msoArrowheadTriangle
幅は、
ShapeRange.Line.Weight = 4.5
なので、ヘルプやググって、詳細をチェックしてください。

2.2 セルの左上は?簡単で単純にRangeのLeftとTopでした

次は、セルの位置ですが、単純に
RangeのLeftとTopでした。

A1からG3へ

テストしてみます。

Sub Macro1_240318_セルに線を引く01()

    Dim r1 As Range: Set r1 = Range("A1")
    Dim r2 As Range: Set r2 = Range("G3")

    Dim shpArrow As Shape  '矢印もシェイプの一部です

    '矢印の作成 単純にセルの左上の座標を指定してみた
    Set shpArrow = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
                                      r1.Left, r1.Top, r2.Left, r2.Top)
                                      
    With shpArrow.Line  '線のパラメーターをセットする、形を変える
        .BeginArrowheadStyle = msoArrowheadTriangle '開始の形
        .EndArrowheadStyle = msoArrowheadTriangle   '終了の形
        .Visible = msoTrue
        .Weight = 4.5  '幅
    End With
    
    MsgBox "追加完了、確認してね"

End Sub


セルの中央に線を引く

単純にセルの左上の座標に幅÷2と高さ÷2をプラスして調整してみた
Sub Macro1_240318_セルに線を引く02中心にしてみた()

    Dim r1 As Range: Set r1 = Range("A1")
    Dim r2 As Range: Set r2 = Range("G3")

    Dim shpArrow As Shape  '矢印もシェイプの一部です

    '矢印の作成 中心にしたかったので、
    '単純にセルの左上の座標に幅÷2と高さ÷2をプラスして調整してみた
    Set shpArrow = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, _
                                      r1.Left + (r1.Width / 2), _
                                      r1.Top + (r1.Height / 2), _
                                      r2.Left + (r2.Width / 2), _
                                      r2.Top + (r2.Height / 2))
                                      
    With shpArrow.Line  '線のパラメーターをセットする、形を変える
        .BeginArrowheadStyle = msoArrowheadTriangle '開始の形
        .EndArrowheadStyle = msoArrowheadTriangle   '終了の形
        .Visible = msoTrue
        .Weight = 4.5  '幅
    End With
    
    MsgBox "追加完了、確認してね"

End Sub


3.PowerPointスクショもどきに線を引く

やっと確認の単体テストが終了したので、
テストした単体部品(素材)を使って、
https://www.youtube.com/watch?v=Rnji4U4BI7k&t=1027
↑作成してみます。

'Excel矢印を作成して、場所を指す
'セルの位置から矢印を画像に引く
Sub test240318_01スクショもどきに矢印を引く()

    Const スケール調整 = (480 / 960)  'スクショもどきと現物を調整する

    Dim shpArrow As Shape  '矢印にする
    
    Dim rBASE As Range
    Set rBASE = Range("B1")
    
    Dim y As Integer
    
    Dim Start_X As Double, Start_Y As Double
    Dim End_X As Double, End_Y As Double
    
    For y = 1 To 999  'いつものとりあえず999まで回す
        If Trim("" & rBASE.Offset(y, 0)) = "" Then Exit For 'データ無しなら抜ける
    
        Start_X = rBASE.Offset(y, 4) * スケール調整 'ppのLeft
        Start_Y = rBASE.Offset(y, 5) * スケール調整 'ppのTop
        
        End_X = rBASE.Offset(y, 2).Left  '3列目セルのLeft 0から始まるので2を指定
        End_Y = rBASE.Offset(y, 2).Top + (rBASE.Offset(y, 2).Height / 2) 'セルのTop + Height÷2
    
        '矢印の作成
        Set shpArrow = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, Start_X, Start_Y, End_X, End_Y)
        shpArrow.Name = "矢印" & y  '名前を変更、後で消しやすいように
        With shpArrow.Line  '線のパラメーターをセットする、形を変える
            .BeginArrowheadStyle = msoArrowheadTriangle '開始の形
            .EndArrowheadStyle = msoArrowheadTriangle   '終了の形
            .Visible = msoTrue
            .Weight = 4.5  '幅
        End With

    Next
    
End Sub

3.1 スケール調整って何? Const スケール調整 = (480 / 960)

突然出てきた、
https://www.youtube.com/watch?v=Rnji4U4BI7k&t=1514
Const スケール調整 = (480 / 960) ↑って何?

スクショを前回作成のコードで落とした後、シートへ貼り付けます
ここで、

' 画像を0,0へ 埋め込み形式で挿入 ファイル名,リンク,保存保持,left,top,Width,Height
Set picShape = shNEW.Shapes.AddPicture(strJPGNAME, False, True, 0, 0, -1, -1)
picShape.Name = "ppスライド" & p
picShape.Width = 480   '挿入後幅を調整する

↑これが、謎の480です、ここは自由に合わせます。※だったら、この480も定数にしろって・・いまさら?

960は、PowerPointのキャンパスの幅で960です。
※おっと、16:9じゃなくて4:3のスライド、A3巨大だと違うよね・・・次回の課題ですね。

話を戻して、
Start_X = rBASE.Offset(y, 4) * スケール調整 'ppのLeft
Start_Y = rBASE.Offset(y, 5) * スケール調整 'ppのTop
の計算で、Excelに貼り付けた画像とPowerPointで保存したスクショもどきの位置を合わせました。

4.おわりの挨拶

まだまだ、位置の取り方だったり、いろいろとありますが、
確認作業のヒントとなれば幸いです。

次は、確認したら、数値を直して書き込んだり?
Excel上で修正した値をパワポに戻す作業かなぁ。

手前味噌3:少し前にやった、戻す系の作業は下記の動画を見てください
Excelを使いパワポの図形やテキストを大量に移動したい
ken3memo.hatenablog.com
https://youtu.be/zYczLG7wF9E?si=SdaYTsO5G0F-kcd7&t=996
Excelで編集した値で位置を調整してます

パワーポイント資料作りの時短となれば、幸いです。

#excelvba #エクセル #マクロ #デバッグ #矢印 #Shapes #AddConnector #パワーポイント



イラスト 食堂 男性会社員が 複雑にからまったスパゲッティを苦戦しながら急いで食べています

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)