重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Sub abc()
Dim a
Set a = Selection
If a.Width * 4 / 3 <> 90 And a.Height * 4 / 3 - 1 <> 120 Then
MsgBox ("120x90px以外の画像以外は挿入できません")
End If
End Sub

上のコードを実行するとなぜか120×90以外でも
メッセージが表示されなくなります
(Msgbox a.Width * 4 / 3は90
Msgbox a.Height * 4 / 3は120と正しく表示されます)

更に高さが1px多くなってしまいます(-1)
(高さを調べても121pxではなく120pxでした)

たまにvbaをしている時にあるので
回答と原因もお願いします

A 回答 (2件)

こんにちは。



>If a.Width * 4 / 3 <> 90 And a.Height * 4 / 3 - 1 <> 120 Then
And ではなくて、Or であるのは、別にして、

>更に高さが1px多くなってしまいます(-1)

VBA上で、小数点計算で、そんなにピッタリと行くとは思えないのです。

特に、小数点の割り算で、それも無限小数ですから、Int で端数を切るなり、四捨五入で丸めるなりしないとVBA上では、小数点誤差が出てしまい、そのままでは無理だと思います。

ただ、4 / 3 でpoint から pixel 計算させずに、67.5(90)と90(120)のpointで判定させたほうが誤差は少ないように思います。(括弧内はpixel) やったわけではありませんから、確かとは言いませんが。
    • good
    • 0
この回答へのお礼

有難う御座いました
pixelではなくpointで計算するのは意外でした

>VBA上で、小数点計算で、そんなにピッタリと行くとは思えないのです。
原因は前のマクロでした
(前のマクロにaが代入されたままこのマクロが実行されたのが原因でした)

お礼日時:2012/12/07 20:17

まず


>MsgBox ("120x90px以外の画像以外は挿入できません")

を実現したいなら、andではなく
If a.Width * 4 / 3 <> 90 or a.Height * 4 / 3 <> 120 Then
ですね。

Andじゃ、片方の寸法が合ってたらメッセージは立ちません。



また、
>高さを調べても121pxではなく120pxでした

と、高さが120pxと判っているのに

>高さが1px多くなってしまいます

とは、一体どういうことでしょうか。
先のANDとORの間違いだったのならそれはそれでですが、そうじゃないならもうちょっと詳しく状況を添えて新しいご相談として投稿し直してみて下さい。
    • good
    • 0
この回答へのお礼

有難う御座いました
AndとOrが違うのは勉強になりました

>>高さが1px多くなってしまいます
原因は前のマクロでした
(前のマクロにaが代入されたままこのマクロが実行されたのが原因でした)

お礼日時:2012/12/07 20:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!