マクロのインプット部分として、四角い図形を置けばそのサイズに合わせてセルの高さと幅を決めてくれるような処理を作りたいと思っています
基本的に四角いシェイプを選択した状態で開始するマクロで
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も見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
エクセル 図形の寸法を取得したい
Visual Basic(VBA)
-
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
特定の名前のオートシェイプの有無を知りたい(エクセルVBA)
Excel(エクセル)
-
-
4
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
5
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
6
VBA/エクセルの日付入力でYYYYMMDD
Excel(エクセル)
-
7
エクセルVBAで列幅設定
Excel(エクセル)
-
8
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
9
エクセルマクロで指定範囲内の図形を削除
Excel(エクセル)
-
10
【VBA】写真の貼り付けコードがうまく機能しません。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
バーコードのサイズは拡大縮小...
-
PDFへてのテキストボックスにて...
-
Excelの列や行の幅を表示...
-
Excel セルの幅が合わない
-
ワードで、横書きの数字を縦書...
-
【エクセルVBA】シェイプのサイ...
-
Excelの列の幅(ピクセル)につい...
-
エクセルVBAで列幅設定
-
エクセルの行の幅がずれる
-
パソコンでランドルト環の作成...
-
scilabについて質問
-
エクセルでサイズ指定でPOP...
-
Excel で等間隔で縦線を引きた...
-
ホームページビルダーで表の列...
-
Excelで文字の幅を変える方法
-
敬語
-
htmlでテーブル内にテキストボ...
-
CSSのtransform: translate(-50...
-
text-alignの解除の方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
PDFへてのテキストボックスにて...
-
Excel で等間隔で縦線を引きた...
-
エクセルでサイズ指定でPOP...
-
Excel セルの幅が合わない
-
バーコードのサイズは拡大縮小...
-
Excelの列や行の幅を表示...
-
Excelで文字の幅を変える方法
-
パソコンでランドルト環の作成...
-
ワードで、横書きの数字を縦書...
-
ホームページビルダーで表の列...
-
エクセルの行の幅がずれる
-
敬語
-
パソコンサイズが横30cm縦20cm...
-
Excelの列の幅(ピクセル)につい...
-
ホームページビルダーで横幅に...
-
道路幅を調べたいのですが
-
Excel2003のVBAで、セルの幅・...
-
【エクセルVBA】シェイプのサイ...
-
scilabについて質問
おすすめ情報