プロが教える店舗&オフィスのセキュリティ対策術

「とある座標x」の「色」が「a」であった場合「○○をする」
違う場合は何もしないというマクロを組む場合は下記のようにやればできるのですが

-----------------------------------------------------------------------
ifb PEEKCOLOR(「とある座標x」) = ($「a」) then //「とある座標x」の「色」が「a」であった場合
ACW(GETID("BpOnline__0.02.UWS - メモ帳","Notepad") //「○○する(ここではメモ帳をアクティブに)」
 else //「色がaでないなら何もしない」
 
 Endif 
-------------------------------------------------------------
「とある座標x」の「色」が「a」であり
なおかつ「とある座標y」の「色」が「b」であった場合「○○をする」
違う場合は何もしない
(両方の条件を満たしている場合意外は何もしてほしくない)

というようにしたい場合はどのようにしたらいいのでしょうか

自分なりに考えて下記のようにやってみたのですが上のものと同じ挙動をしてしまいます。

----------------------------------------------------------------
ifb PEEKCOLOR(「とある座標x」) = ($「a」) then //「とある座標x」の「色」が「a」であった場合
ifb PEEKCOLOR(「とある座標y」) = ($「b」) then //「とある座標y」の「色」が「b」であった場合
ACW(GETID("BpOnline__0.02.UWS - メモ帳","Notepad") //「○○する(ここではメモ帳をアクティブに)」

 else //「色がaでないなら何もしない」
  Endif 
 else //「色がaでないなら何もしない」
  Endif 
--------------------------------------------------------------------------
ifb PEEKCOLOR(「とある座標x」) = ($「a」) and PEEKCOLOR(「とある座標y」) = ($「b」)then 
//「とある座標x」の「色」が「a」であった場合 and 「とある座標y」の「色」が「b」であった場合

ACW(GETID("BpOnline__0.02.UWS - メモ帳","Notepad") //「○○する(ここではメモ帳をアクティブに)」
 else //「色がaでないなら何もしない」
 
 Endif 
-------------------------------------------------------------------
ifb PEEKCOLOR(「とある座標x」) = ($「a」) and PEEKCOLOR(「とある座標y」) = ($「b」)then
これのandをorにしても同じでした。

どうかご教示くださいませ

A 回答 (1件)

($「a」)ですが、本当にこんな書き方ですか?不用意に()をつけると、ANDがPEEKCOLOR関数の結果ではなく、括弧内を見てしまうのではと心配になります。

おそらく今回はそのせいで、ちゃんと動かない予感がします。

括弧の中身が色指定$FFFFFFや変数だけなら、()は消してください。括弧内で何か計算しているなどで()を消せないまたは消したくない場合は、IF (PEEKCOLOR(「とある座標x」) = ($「a」)) and …と言う感じで、PEEKCOLOR関数全体を括弧でくくるべきでしょう。

それと最初のIFBを使う場合は、本当にエラーを出さずに動くとは信じられない形になっています。普通ならIFBにはTHENはつけずにこういう形式になります。

IFB 判定a
  IFB 判定b
    処理

    処理
  ENDIF
ENDIF

これで、判定aと判定bが両方とも真になった場合のみ、処理が実行されます。ELSEの場合には何も処理しないんだったら、とっととENDIFで終わらせてしまえばよいです。ELSEは書くだけ無駄ですよ。でもこれよりは、ANDでつないでIFをひとつにした方がより簡潔ですけどね。
    • good
    • 0

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