• 締切済み

エクセル2010のvbaについて

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をしている時にあるので 回答と原因もお願いします

みんなの回答

回答No.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) やったわけではありませんから、確かとは言いませんが。

atamanotaisou1
質問者

お礼

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

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

まず >MsgBox ("120x90px以外の画像以外は挿入できません") を実現したいなら、andではなく If a.Width * 4 / 3 <> 90 or a.Height * 4 / 3 <> 120 Then ですね。 Andじゃ、片方の寸法が合ってたらメッセージは立ちません。 また、 >高さを調べても121pxではなく120pxでした と、高さが120pxと判っているのに >高さが1px多くなってしまいます とは、一体どういうことでしょうか。 先のANDとORの間違いだったのならそれはそれでですが、そうじゃないならもうちょっと詳しく状況を添えて新しいご相談として投稿し直してみて下さい。

atamanotaisou1
質問者

お礼

有難う御座いました AndとOrが違うのは勉強になりました >>高さが1px多くなってしまいます 原因は前のマクロでした (前のマクロにaが代入されたままこのマクロが実行されたのが原因でした)

関連するQ&A