Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2003 / 13645 ツリー ←次へ | 前へ→

【70539】四角形の大きさが変 すなさん 11/11/26(土) 23:10 質問[未読]
【70540】Re:四角形の大きさが変 UO3 11/11/27(日) 7:51 発言[未読]
【70546】Re:四角形の大きさが変 すなさん 11/11/28(月) 0:13 発言[未読]
【70551】Re:四角形の大きさが変 UO3 11/11/29(火) 9:32 発言[未読]
【70557】Re:四角形の大きさが変 すなさん 11/11/29(火) 23:25 お礼[未読]
【70541】Re:四角形の大きさが変 UO3 11/11/27(日) 8:02 発言[未読]
【70547】Re:四角形の大きさが変 すなさん 11/11/28(月) 0:18 発言[未読]
【70552】Re:四角形の大きさが変 とおりすぎ 11/11/29(火) 10:32 回答[未読]

【70539】四角形の大きさが変
質問  すなさん  - 11/11/26(土) 23:10 -

引用なし
パスワード
   EXCEL2010を使っています。
下記コードで四角形を描画したのですが、縦横の比率がおかしいです。

Sub test()
  '1_縦長長方形
  ActiveSheet.Shapes.AddShape(msoShapeRectangle, 300, 300, 100, 200).Select
  With Selection.ShapeRange.Fill
    .Visible = msoTrue
    .ForeColor.RGB = RGB(255, 255, 255)
    .Transparency = 0
    .Solid
  End With
  
  '2_横長長方形
  ActiveSheet.Shapes.AddShape(msoShapeRectangle, 300, 300, 200, 100).Select
  With Selection.ShapeRange.Fill
    .Visible = msoTrue
    .ForeColor.RGB = RGB(255, 255, 255)
    .Transparency = 0
    .Solid
  End With

End Sub

描いた図のプロパティを見ると
1_縦長長方形は タテ7.28 cm ヨコ3.5cm
2_横長長方形は タテ3.63 cm ヨコ7cm
となり、同じ大きさになりません。
2_横長長方形 のほうが少し小さくなります。
同じにならないのはなぜでしょうか?
同じにする方法はないでしょうか?

【70540】Re:四角形の大きさが変
発言  UO3  - 11/11/27(日) 7:51 -

引用なし
パスワード
   ▼すなさん さん:

おはようございます。

アップされたコードを、こちらの環境(2010 と 2003) で試しましたら
いずれも、縦横数値が逆転しているだけで、同じ値でした。

ところで、エクセルで指定する長さはポイント単位ですね。
実際には、これを、Windowsが画面に描画する際には、ピクセル(いわゆる画素)に変換して処理します。(たぶん?)

で、想像ですけど

1.そのときの表示倍率に基づいた1インチあたりのポイント数を取得。
2.1インチあたりの画素数を取得。(表示倍率にかかわらず一定)
3.指定されたポイント数に相当する画素数を取得。
4.その画素数分のドットを描画。

このようにしているんだろうと理解しています。
で、2.の数字は、標準設定であれば縦も横も同じで、96あたりに設定されていると
思われますが、ここは、任意に設定することもできます。

以下を実行してみて、同じ数になるかどうか、確認してみられてはいかがでしょう。

Option Explicit

Declare Function GetDC Lib "User32.dll" (ByVal hWnd As Long) As Long
Declare Function ReleaseDC Lib "User32.dll" (ByVal hWnd As Long, _
                          ByVal hdc As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, _
                        ByVal nIndex As Long) As Long

Const LOGPIXELSX = 88
Const LOGPIXELSY = 90

Sub TestDPI()
  MsgBox "横は" & GetDPI(LOGPIXELSX) & vbLf & "縦は" & GetDPI(LOGPIXELSY)
End Sub

Private Function GetDPI(ByVal nFlag As Long) As Long
  Dim hdc As Long
  hdc = GetDC(Application.hWnd)
  GetDPI = GetDeviceCaps(hdc, nFlag)
  Call ReleaseDC(&H0, hdc)
End Function

【70541】Re:四角形の大きさが変
発言  UO3  - 11/11/27(日) 8:02 -

引用なし
パスワード
   ▼すなさん さん:

ちょっと、ググってみますと、DPI(ドット パー インチ)以外にも影響する要素がありそうなんですが
なにぶん、私のような素人には、なかなかわかりませんでした。

ちなみに、縦も横も 200ポイント(つまり正方形)で作成した場合、どうなりますか?

【70546】Re:四角形の大きさが変
発言  すなさん  - 11/11/28(月) 0:13 -

引用なし
パスワード
   ▼UO3 さん:
おしえていただいたコードを実行してみました。
縦横とも96と出ました。
あのあといろいろやってみて、2010で新規ファイル作成してみたところ縦横比は正常でした。
どうも2003のファイルを2010で開いて、そのブックに四角形を追加すると縦横比がおかしくなるようです。
お手数で申し訳ありませんが、UO3さんのEXCEL2003で任意のオートシェイプを含むブックを作成していただいて、それを2010で開いて、私と同じような問題が起こるか確認していただけないでしょうか。

どうもEXCEL2010はクセがあって古いファイルを開くといろいろトラブルが起きます。特にオートシェイプは概念が違うようで変なことがいろいろと起きて悩ましいです。

【70547】Re:四角形の大きさが変
発言  すなさん  - 11/11/28(月) 0:18 -

引用なし
パスワード
   ▼UO3 さん:
>ちなみに、縦も横も 200ポイント(つまり正方形)で作成した場合、どうなりますか?
EXCEL2010でEXCEL2003のファイルを開いてVBAで作成に対して実行すると
高さ3.1cm、幅3.19cmになりました。
EXCEL2010で作成したファイルでは
高さ3.18cm、幅3.18cmになりました。これは正方形で正しいみたいです。

3.1、3.18、3.19のどれが正しいのかはまだ判断できていません。

【70551】Re:四角形の大きさが変
発言  UO3  - 11/11/29(火) 9:32 -

引用なし
パスワード
   ▼すなさん さん:

しばらく帰宅が遅い時間になり、レス遅れました。

以下を実行しました。結果は、すべて「正常」です。
(2003と2010では短いほうの長さが0.1ミリの差は、ありましたけど)

・2003 で実行。
・これをxlsで保存したものを2010PCに持っていき、そこで互換モードで開く。
 2003で作成済みの四角形の大きさは、変化なし。
・あらためて、この互換モードのxls上でコードを実行。
・念のため、2010の「オリジナルモード」でxlsmブックを作って実行。

【70552】Re:四角形の大きさが変
回答  とおりすぎ  - 11/11/29(火) 10:32 -

引用なし
パスワード
   再現しません。

ActiveWindow.Zoom=100
を先頭に入れて実行してみる。

【70557】Re:四角形の大きさが変
お礼  すなさん  - 11/11/29(火) 23:25 -

引用なし
パスワード
   ▼UO3 さん:
>▼すなさん さん:
>
>しばらく帰宅が遅い時間になり、レス遅れました。
>
>以下を実行しました。結果は、すべて「正常」です。
>(2003と2010では短いほうの長さが0.1ミリの差は、ありましたけど)
>
>・2003 で実行。
>・これをxlsで保存したものを2010PCに持っていき、そこで互換モードで開く。
> 2003で作成済みの四角形の大きさは、変化なし。
>・あらためて、この互換モードのxls上でコードを実行。
>・念のため、2010の「オリジナルモード」でxlsmブックを作って実行。
UO3 さん、確認ありがとうございます。
再現性を得るのが難しいのかもしれません。
原因がつかめませんが、こういうものだと思えばいいことにして、デザインに励みます。
おつきあいありがとうございました。

2003 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free