
マクロのインプット部分として、四角い図形を置けばそのサイズに合わせてセルの高さと幅を決めてくれるような処理を作りたいと思っています
基本的に四角いシェイプを選択した状態で開始するマクロで
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
エクセル 図形の寸法を取得したい
Visual Basic(VBA)
-
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
-
4
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
5
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
Excel VBA シェイプの原型のサイズ取得方法
その他(プログラミング・Web制作)
-
8
VBAによるセル内の画像の位置調整
Excel(エクセル)
-
9
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
10
図形の移動をセンチの数値でマクロを実行したい
Excel(エクセル)
-
11
エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法
Excel(エクセル)
-
12
オートシェイプがずれる
Excel(エクセル)
-
13
ピクチャーボックスの大きさに合わせて画像を表示
Visual Basic(VBA)
-
14
ExcelVBAで画像のサイズを調べるマクロを作ろうと思っています
Access(アクセス)
-
15
VBAマクロ 実行時エラーが出たり出なかったり
Excel(エクセル)
-
16
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
17
エクセルでのオートシェイプのサイズ変更方法について質問です。
Excel(エクセル)
-
18
VBAでエクセルのシート上の画像のリサイズと配置を行いたい
Excel(エクセル)
-
19
ワードからエクセルへ貼り付けるマクロ
Excel(エクセル)
-
20
パソコンの画面に合わせてユーザーフォームを表示させたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
パソコンでランドルト環の作成...
-
Excelの列や行の幅を表示...
-
エクセルの行の幅がずれる
-
エクセルのワークシートの間隔...
-
PDFへてのテキストボックスにて...
-
HTMLでクロス抽出したい
-
ホームページビルダーでの画像...
-
パソコンサイズが横30cm縦20cm...
-
Excel で等間隔で縦線を引きた...
-
Photoshop LEでパノラマ写真に...
-
エクセルのグラフで・・・
-
スーパーの袋の「折込幅」って...
-
エクセルの行幅と列幅
-
オートシェイプの枠について
-
枠の幅の固定
-
A4用紙の幅にうまく印刷できるH...
-
Excel セルの幅が合わない
-
ワードの表の幅
-
ホームページサイズについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでサイズに合ったもの...
-
Excelの列や行の幅を表示...
-
PDFへてのテキストボックスにて...
-
バーコードのサイズは拡大縮小...
-
Excel セルの幅が合わない
-
Excel で等間隔で縦線を引きた...
-
エクセルでサイズ指定でPOP...
-
ホームページビルダーで表の列...
-
エクセルの行の幅がずれる
-
【エクセルVBA】シェイプのサイ...
-
パソコンサイズが横30cm縦20cm...
-
パソコンでランドルト環の作成...
-
Excelで文字の幅を変える方法
-
ホームページビルダーで横幅に...
-
ワードで、横書きの数字を縦書...
-
Excelの列の幅(ピクセル)につい...
-
道路幅を調べたいのですが
-
敬語
-
A4の紙をきれいに3等分に折...
-
iphoneでcanvaを利用してるので...
おすすめ情報