
マクロのインプット部分として、四角い図形を置けばそのサイズに合わせてセルの高さと幅を決めてくれるような処理を作りたいと思っています
基本的に四角いシェイプを選択した状態で開始するマクロで
Sub selectObjectsToArea()
targetAreaTop = Selection.Top
targetAreaLeft = Selection.Left
targetAreaRight = targetAreaLeft + Selection.Width
targetAreaBottom = targetAreaTop + Selection.Height
Workbooks.Add
Set testSheet = ActiveSheet
testSheet.Rows(1).RowHeight = targetAreaTop
testSheet.Columns(1).ColumnWidth = targetAreaLeft
testSheet.Rows(2) = targetAreaBottom - targetAreaTop
testSheet.Columns(2) = targetAreaRight - targetAreaLeft
end sub
これでtestSheetのB2セルが、もともとのシートの四角いシェイプの置いてあった位置と同じ位置、同じ大きさの四角…
になるつもりなのですが、なぜかかなり横に長い平たい四角になってしまいます
CentimetersToPoints関数というのがあるということを知ったのですが、これを使用しても比率が変わるだけ
エクセルの幅と高さをピクセルで指定するというページで
幅11.8ポイント:100ピクセル
高さ75ポイント:100ピクセル
というのがあったのですが、ピクセルとセンチの比率がわからず
調べているうちにその比率は解像度によって違ってくる…というような話がでてきて
どう整理してよいのかわからなくなってしまいました
シェイプの位置と大きさをセルの幅に変換する方法がわかる方がいらっしゃったらご指導をお願いいたします
No.2ベストアンサー
- 回答日時:
こんにちは。
セル範囲の列幅は、
ピクセル単位の .Width プロパティ(取得のみ可)で設定することは出来ず、
.ColumnWidth プロパティ(取得・設定可)で設定するしかありません。
この.ColumnWidth プロパティがなかなかの曲者で、
1)Excelのオプション・基本設定で規定のフォント・フォントサイズ
で決められている半角一文字のピクセル幅
を参照して、列幅の算出方法が変わります。
2)比較的大きな単位(フォントサイズ由来)でサイズを丸めてしまいます。
' ' 列幅が丸められる例(デフォルトのフォントサイズ:11の場合)
Sub check()
With Columns(2)
.ColumnWidth = 8.31
Debug.Print .ColumnWidth ' → 8.25
.ColumnWidth = 8.32
Debug.Print .ColumnWidth ' → 8.38
End With
End Sub
なので、残念ながら、そもそものExcelに備わった仕様として、
任意の座標やサイズを正確に、セル範囲にトレースすることは出来ません。
列幅値を計算で求めることはAPIを組み合わせれば可能ですが、
列幅を設定する時に大まかな丸めがあるので、
やるにしても、簡易に近似値を求めるのが妥当、ということです。
もし精度を求めるのであれば、セル範囲の座標とサイズで再現するのではなく、
何らかのシェープを使うのが現実的です。(その場合は変換する必要もないですね)
元々、Excel Worksheet に代表される SpreadSheet は、
細かなレイアウトを実現させるような目的で開発されていないのです。残念ながら。
大まかでもいいから、シェープからセル範囲へ座標とサイズをトレースしたい
ということで良ければと、
サンプルコードを(ご提示のコードを補完する形で)挙げておきます。
下記コード中
(PixelX * 4 / 3 - 5) / 8
という計算の内、
" * 4 / 3" は、不変、
" - 5" や " / 8" は、フォントサイズ由来(フォントサイズ:11の場合)です。
Sub Re8728939()
Dim targetTop As Single
Dim targetLeft As Single
Dim targetRowHeight As Single
Dim targetColumnWidth As Single
If TypeName(Selection) = "Range" Then MsgBox "四角い図形を選択後に実行": Exit Sub
On Error GoTo ErrOut_
With Selection
targetTop = .Top
targetLeft = (.Left * 4 / 3 - 5) / 8
targetRowHeight = .Height
targetColumnWidth = (.Width * 4 / 3 - 5) / 8
End With
On Error GoTo 0
Workbooks.Add
Rows(1).RowHeight = targetTop
Columns(1).ColumnWidth = targetLeft
Rows(2).RowHeight = targetRowHeight
Columns(2).ColumnWidth = targetColumnWidth
Exit Sub
ErrOut_:
MsgBox Err & vbLf & Err.Description
End Sub
#参考URLは.ColumnWidthをテーマにした質問に以前お応えしたものです。
参考URL:http://oshiete.goo.ne.jp/qa/8490019.html
詳しい回答ありがとうございます、できない仕様だとは思いませんでした
入力部分をこれで行おうと思っていたんですが、数値がきちんと取ってこれないと困るので、おっしゃる通りシェープでやってみるなど根本から考え直してみようと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- Visual Basic(VBA) 複数セルに〇印をつけるマクロ 4 2022/09/07 05:33
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
あなたなりのストレス発散方法を教えてください!
自分なりのストレス発散方法はありますか?
-
泣きながら食べたご飯の思い出
泣きながら食べたご飯の思い出を教えてください。
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
エクセル 図形の寸法を取得したい
Visual Basic(VBA)
-
Excel VBA シェイプの原型のサイズ取得方法
その他(プログラミング・Web制作)
-
-
4
VBAによるセル内の画像の位置調整
Excel(エクセル)
-
5
VBA/エクセルの日付入力でYYYYMMDD
Excel(エクセル)
-
6
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
7
図形の移動をセンチの数値でマクロを実行したい
Excel(エクセル)
-
8
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
9
エクセルマクロで指定範囲内の図形を削除
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
PDFへてのテキストボックスにて...
-
Excelの列や行の幅を表示...
-
Excelで文字の幅を変える方法
-
敬語
-
Excel で等間隔で縦線を引きた...
-
Excel セルの幅が合わない
-
Excelの列の幅(ピクセル)につい...
-
ホームページビルダーで表の列...
-
バーコードのサイズは拡大縮小...
-
ホームページビルダーで横幅に...
-
Excelのセル幅、行の高さのピク...
-
オートシェイプの枠について
-
パソコンサイズが横30cm縦20cm...
-
エクセルの行の高さや列の幅で
-
【エクセルVBA】シェイプのサイ...
-
120インチ画面、横幅は何セ...
-
Excel2003のVBAで、セルの幅・...
-
CSSのtransform: translate(-50...
-
htmlでテーブル内にテキストボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
Excelの列や行の幅を表示...
-
PDFへてのテキストボックスにて...
-
Excel で等間隔で縦線を引きた...
-
バーコードのサイズは拡大縮小...
-
Excel セルの幅が合わない
-
エクセルでサイズ指定でPOP...
-
【エクセルVBA】シェイプのサイ...
-
Excelで文字の幅を変える方法
-
エクセルの行の幅がずれる
-
ホームページビルダーで表の列...
-
ワードで、横書きの数字を縦書...
-
Excelの列の幅(ピクセル)につい...
-
パソコンサイズが横30cm縦20cm...
-
敬語
-
パソコンでランドルト環の作成...
-
道路幅を調べたいのですが
-
Excel2003のVBAで、セルの幅・...
-
iphoneでcanvaを利用してるので...
-
ホームページビルダーで横幅に...
おすすめ情報