【エクセルVBA】この係数「1.2」(倍)は何を意味していますか?【[オートシェイプ選択]-[図として保存]同等動作を想定】
解決したいこと
- 必要な画像サイズを得るためにトライ&エラーの結果導けた係数「1.2」(倍)の意味を知りたい。
実際の動作とコード
- 「4分割ウォール画面作成支援ツール.xlsm」を作成しましてこのように必要な動作は出来ています。
- 操作内容
- 「キャンバス」シートに原本画像を貼る。
- 各「1」「2」「3」「4」シートの中央の枠に表示させたい画像の場所を合わせる。
- 「プレビュー」シートで確認→「画像個別生成」ボタンを押す。
- 作業フォルダに「PC_Layout-(1~4).jpg」が生成される。
- 操作内容
※この実行結果1つの画像サイズが「990×500」ピクセルのPNGファイルを4つ得られる。
- 「画像個別生成」ボタンを押下した際に動作する標準モジュール
Sub SaveShapeAsPNG()
Dim Shp As Shape
Dim Cht As ChartObject
Dim FileName As String
Dim i As Integer
' 全てのシートの倍率を50%にする
For Each bk In Workbooks
bk.Activate
For Each sh In bk.Worksheets
sh.Select
ActiveWindow.Zoom = 50
Next
Next
' プレビューシートへ移動してアクティブにする
ThisWorkbook.Sheets("プレビュー").Select
' プレビューのシート保護を解除
ActiveSheet.Unprotect
' プレビューシートに貼ってある「リンクされた図」(図 1~4)の画像を加工する
For i = 1 To 4
Set Shp = ActiveSheet.Shapes("Picture " & i)
FileName = GetLocalPath(ThisWorkbook.path) & Application.PathSeparator & "PC_Layout" & "-" & i & ".png"
With Shp
' セルの境界線も描画されてしまうのでトリミング
.PictureFormat.CropTop = 1
.PictureFormat.CropLeft = 1.75
.PictureFormat.CropRight = 1.75
.PictureFormat.CropBottom = 1
' 1枚のサイズを900×500ピクセルにする
.Width = 990 * 1.2
.Height = 500 * 1.2
End With
' オートシェープをチャートにしないと図の保存ができない
' 参考情報(https://daitaideit.com/vba-shapes-export-picture/)など
Set Cht = ActiveSheet.ChartObjects.Add(0, 0, Shp.Width, Shp.Height)
With Cht
Shp.CopyPicture Format:=xlBitmap 'オートシェイプを画像としてコピー
.Chart.Parent.Select 'チャートを選択
.Chart.Paste 'チャートに貼り付け
.Chart.ChartArea.Format.Line.Visible = msoFalse '枠線を非表示
.Chart.Export FileName
.Delete 'チャートを削除
End With
With Shp
' 再度プレビューの枠に納める
.Width = 495 * 1.2
.Height = 250 * 1.2
End With
Next i
' プレビューのシート保護を再実施
ActiveSheet.Protect
MsgBox "画像を保存しました: PC_Layout-1.png から PC_Layout-4.png まで", vbInformation
End Sub
質問
- このコード内の係数「1.2」を行う事で結果的に1つの画像サイズが「990×500」ピクセルのPNGファイルを得られたが、
' 1枚のサイズを900×500ピクセルにする
.Width = 990 * 1.2
.Height = 500 * 1.2
これは何を意味する数値なのか?
- ※補足
GetLocalPath(ThisWorkbook.path)は、OneDrive同期にてPathがおかしくなる回避策1のひとつである「VBA-FileTools(LibFileTools.bas)」2のコマンドです
自分で調査したこと
- シートの倍率(50%)とポインタおよびピクセルの相関関係であるような情報を見たが、
今回の場合具体的になぜそういう計算になるのかを教えていただきたい。
以上です。
よろしくお願いします。
-
(furyutei様GitHubGist)[Excel][VBA] OneDrive 下に置いたブックの Path がおかしくなる不具合とその対策、他 ↩
-
(stackoverflow)Excel's fullname property with OneDrive ↩
0 likes
