こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
選択する方法は、先日も使用した「Application.FileDialog」を採用。
「選択できる拡張子は適当に」とのことだったので、今回は「*.jpg」とした。
Sub VBA_100Knock_029() ' 画像を挿入するセル。 Dim TargetCell As Range Set TargetCell = ActiveCell ' 挿入する画像のファイルパス。 Dim FilePath As String With Application.FileDialog(msoFileDialogFilePicker) ' ファイル選択ダイアログ表示。 .Show ' ファイルの複数選択不可。 .AllowMultiSelect = False ' ダイアログタイトル。 .Title = "画像データ選択" ' 選択フィルタ。 .Filters.Clear .Filters.Add "画像データ", "*.jpg" FilePath = .SelectedItems(1) End With ' 挿入する画像。 Dim Drawing As Picture Set Drawing = ActiveSheet.Pictures.Insert(FilePath) ' 画像の縦横比を固定。 Drawing.ShapeRange.LockAspectRatio = msoTrue ' 画像とセル、各々の縦横比を取得。 ' どちらが「より縦長か?」を比較して、挿入する画像サイズをセルの ' 幅に合わせるか高さに合わせるか決定する。 Dim AspectRatio(1) As Double AspectRatio(0) = TargetCell.Height / TargetCell.Width AspectRatio(1) = Drawing.Height / Drawing.Width ' セルの方が縦長なら、画像はセルの横幅に合わせる。 If AspectRatio(0) >= AspectRatio(1) Then Drawing.ShapeRange.ScaleWidth TargetCell.Width / Drawing.Width, msoTrue ' 高さ方向の位置修正(セルの中央に配置)。 ' 幅方向は、セルと同サイズのため調整不要。 Drawing.Top = TargetCell.Top + (TargetCell.Height - Drawing.Height) / 2 Else Drawing.ShapeRange.ScaleHeight TargetCell.Height / Drawing.Height, msoTrue ' 幅方向の位置修正(セルの中央に配置)。 ' 鷹さ方向は、セルと同サイズのため調整不要。 Drawing.Left = TargetCell.Left + (TargetCell.Width - Drawing.Width) / 2 End If End Sub
何を基準に、どのように拡大または縮小すればよいか、少し悩んでしまった。
実行した結果がこちら。
ちなみにこの画像は、数年前に家族で訪れた「眼目山立山寺」で撮った写真。
樹齢400年の栂並木が素晴らしく、機会があればもう一度訪れてみたい。
youtu.be
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。