64本目 リンクされた図を挿入

VBA100本ノック

VBA100本ノック 64本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック64本目
「元表1」「元表2」の2シートのA1からの表範囲を「リンクされた図」として「まとめ」シートに貼り付けてください。
貼り付け位置
・「元表1」はA1:J20の範囲へ
・「元表2」はA21:J40の範囲へ
※範囲内の縦横位置は任意
※再実行を考慮し、前回貼り付け分は削除してください。

解答

Sub ノック64本目()

    Dim ws元表1 As Worksheet: Set ws元表1 = Sheets("元表1")
    Dim ws元表2 As Worksheet: Set ws元表2 = Sheets("元表2")
    Dim wsまとめ As Worksheet:  Set wsまとめ = Sheets("まとめ")
    Dim sp As Shape
    
    For Each sp In wsまとめ.Shapes
        sp.Delete
    Next
    
    Call リンクされた図を挿入(ws元表1.Range("A1").CurrentRegion, Range("A1:J20"), wsまとめ)
    Call リンクされた図を挿入(ws元表2.Range("A1").CurrentRegion, Range("A21:J40"), wsまとめ)
    
End Sub

Sub リンクされた図を挿入(元rng As Range, 先rng As Range, 先ws As Worksheet)

    元rng.Copy
    With 先ws.Pictures.Paste(Link:=True)
        .Left = 先rng.Left
        .Top = 先rng.Top
        If .Height > 先rng.Height Then .Height = 先rng.Height - 1 'ピクセル
        If .Width > 先rng.Width Then .Width = 先rng.Width - 1 'ピクセル
    End With

End Sub

■考え方・流れ
0:00 冒頭・問題確認
1:36 リンクされた図という機能をを使ってみよう
3:06 リンクされた図をVBAで使う
4:34 まとめシートにリンクされた図を挿入
6:13 指定した範囲内に図を収める
8:39 似た処理をまとめる

新人君
新人君

図をリンクすることができるなんて
凄いですね!

ブチョ
ブチョ

俺の方がすごいけどな!

新人君
新人君

リンクされた図という機能をを使ってみよう

さて!じゃあまずは…
リンクされた図(カメラ機能とも言うらしい)を使うところから解説してみたぞ!!

コピーは普通にCtrl+Cでいいんだけど…
貼り付けるときに、オプションから選んであげよう!!

ちなみにuぷ主はめちゃくちゃこの機能使うぞ!!

実行結果↓

リンクされた図をVBAで使う

よし!そしたらお次!
VBAでどうやって扱うの?ってお話!

マクロの記録をしてみたらこんなコードが記録される!!!

.Pictures.Paste(Link:=True)
りんく、とぅる~ って書いてるよな!!それだ!!wwww

ちな、貼り付けた後は画像になるから扱いはShapeになるぞw

まとめシートにリンクされた図を挿入

よし!ここからは!!
実際にリンクされた図を挿入するコードを書いていくぞ!!!

ま、これは一旦、マクロの記録のコードをほぼそのままコピーすればOK!

よし!じゃあお次は位置を調整するぞ!
これも一旦記録されたコード通りに書いていこう!

一旦ここまでで実行↓

指定した範囲内に図を収める

よし!お次は!!
指定した範囲内に図を収めていくぞ!!

ココがわからない人はノック29本目を見返してみよう!!

ま、これは簡単!!!
図形のHeightが指定した範囲のHeightより大きければ、図形のHeight(-1ピクセル)に合わせる
図形のWidthが指定した範囲のWidthより大きければ、図形のWidth(-1ピクセル)に合わせる

実行結果↓

似た処理をまとめる

よし!じゃあ最後に…
同じような処理をまとめていくぞ!!

今回は二つだけだからぶっちゃけいいんだけど…
これが増えると大変だからね!

別のSubプロシージャを作って、Rangeを受け渡すようにすればokかな!

後は…引数で出力先のシートを指定してもいいかも!!

実行結果↓

とま、こんなところかな!

ブチョ
ブチョ

お疲れさまま!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
64本目、リンクされた図を挿入する問題でした!

これ、使ってます?みなさん

わったしとある仕事の影響でめちゃくちゃ使ってるんですが…
これ、意外と知らない人が多くて驚く機能です。

VBAで扱うことになるとは思わなかった…

列幅替えたらサイズ感変わったりして、結構シビアな機能ですからね。
扱いは注意です。

コメント

タイトルとURLをコピーしました