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で扱うことになるとは思わなかった…
列幅替えたらサイズ感変わったりして、結構シビアな機能ですからね。
扱いは注意です。
コメント