[[20210604185214]] 『ディスプレイの解像度によってObjectの高さが変わ』(じょあ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ディスプレイの解像度によってObjectの高さが変わる。』(じょあ)

AddShapeのmsoShapeRoundedRectangleで四角のオブジェクトを書き、長さでスケジュールを表す(ガントチャート)マクロを書いています。
行の高さを16ポイント、図形の大きさを12ポイント、図形の高さを2ポイント下げたところに設定し、行の中央に配置させています。
4K(3840x2160)では行の中央に配置されるのですが、例えばフルHD(1920x1080)にするとオブジェクトが徐々に下にズレていき、50行位になると一行下に表示されてしまいます。(ディスプレイの解像度を変えるといろんな位置にズレます。)

オブジェクトが問題なのかなと思いますが、ディスプレイの解像度に依存せず、左右の位置は動かさず、オブジェクトの位置(高さ)だけを行の中央に配置する方法はないでしょうか。
もしも良いアイディアがあればご助言ください。

< 使用 Excel:Office365、使用 OS:Windows10 >


 こんばんは!
私の勉強不足なんでしょうけど、、、ディスプレイの解像度によって図形の位置が変わるのですね?
試しにこんな↓コードを書いてみましたが、、、やっぱり変わりますか???

 Option Explicit
Sub kk()
Dim MyLeft
Dim MyTop
Dim MyWidth
Dim MyHeight
MyLeft = ActiveCell.Left
MyTop = ActiveCell.Top
MyWidth = ActiveCell.Width
MyHeight = ActiveCell.Height
Sheets(1).Shapes.AddShape msoShapeRoundedRectangle, MyLeft, MyTop + (MyHeight - MyHeight / 2) / 2, MyWidth, MyHeight / 2
End Sub
(SoulMan) 2021/06/04(金) 20:01

SoulManさん
ややこしい質問にも関わらずSampleまでお示し頂きありがとうございました。

数行ではわからない程度のズレなのでネットで拾ったSampleを使って100行以上図形を書いてみましたが、ズレませんでした。
私の記載に問題がありそうです。
行の設定や開始行、幅の計算など、ここで私のコードを示すには長すぎるので、もう少し自分で考えてみます。
ありがとうございました。
(じょあ) 2021/06/04(金) 21:44


 まぁ、、そんなに深くお考えにならなくても
高さは、セルの高さでしょ?
今回の場合は、Topはセルの上から図形の半分を引いた残りをさらに半分

 図形の高さをセルの1/3にしている場合は
セルの高さから図形の高さ1/3を引いた残りをさらに半分
それをTopにプラス。。。です。。。

 まぁ、、お気軽にいきましょう(^^;
(SoulMan) 2021/06/04(金) 21:51

SoulMan様
行の高さを16ポイントから18ポイントにする事で解決しました。
相性というか、ディスプレイのピクセル数で割り切れるとか割り切れないとかそんな理由だったのでしょうか。
1920x1080だとうまく表示されるのですが、2560x1440だと横幅がズレるなど、それはそれで悩ましい事象も現れました。
詳細はわかりませんが、VBAではなく、行の高さとディスプレイの関係が原因である事が分かりましたのでご報告いたします。
(じょあ) 2021/06/07(月) 13:36

 こんばんは!
そうなのですね。。貴重なご意見をありがとうございます。

 私の認識では、、Topというのは文字通り上からの距離だと認識しています。
で、上からの距離をすべて上から指示するとこれは当然ずれます。あいません。
なので表示したいセルのTop + その距離と考えています。

 なのでこちらが指示するのは上からの距離ではなく、あくまでも表示したいセルのTopからの距離です。
ごくごく少ないほんの僅かな距離です。。。

 とは言っても実際にずれるのですからそのことついての異論・討論するつもりはありませんし、
繰り返しになりますが、貴重なご意見をありがとうございます。

 今後の参考にさせていただきたいと思います。m(__)m
(SoulMan) 2021/06/07(月) 20:00

SoulMan様
ありがとうございます。
ピクセル数の変更で一部画面設定で解決したものの、実際は下に行くほどズレが大きくなっていたので、私は最初の行のTopからのピクセル数でObjectの位置を設定していたようです。SoulMan様のご指摘の通りなのだと思います。
別のWorksheetからDataを引っ張り、必要な行に該当するObjectを記載していたため、そのようになってしまったのだと思います。
もっと勉強してSoulMan様のご意見の通り各行のセルTopで設定できるよう改修してみます。
そうすればどのディスプレイでも正しく表示できますね。
勉強になりました。本当にありがとうございました。
(じょあ) 2021/06/08(火) 10:56

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.