or では大丈夫なのにandではダメな理由は?
セルA1に2007/10/3を入れ、
2007年ならピンク
2008年なら黄緑
とやろうとして、2つのマクロを作りました。
Macro1では正常に動作するのですが
Macro2を実行すると2007/10/3なのに、黄緑になってしまいます。
2008/10/3でMacro2を実行すると何も動きません。
Macro1とMacro2の違いは「or」と「and」の違いだけです。
Sub Macro1()
If 39081 >= CLng(Range("a1")) Or CLng(Range("a1")) <= 39447 Then
Range("a1").Interior.ColorIndex = 38
ElseIf 39448 >= CLng(Range("a1")) Or CLng(Range("a1")) <= 39813 Then
Range("a1").Interior.ColorIndex = 4
End If
End Sub
Sub Macro2()
If 39081 >= CLng(Range("a1")) And CLng(Range("a1")) <= 39447 Then
Range("a1").Interior.ColorIndex = 38
ElseIf 39448 >= CLng(Range("a1")) And CLng(Range("a1")) <= 39813 Then
Range("a1").Interior.ColorIndex = 4
End If
End Sub
「and」なら2007/1/1より大きい なおかつ 2007/12/31より小さい
と思い、最初はMacro2を作りましたが、うまくいかない為Macro1を作りました。
でも
「or」だと、2007/1/1より大きい もしくは 2007/12/31より小さい
ですよね?
2008/1/1でも「2007/1/1より大きい もしくは 」にヒットしてしまうため、
andにしたのですが、なぜandではうまくいかないのでしょうか?
よろしくお願いします。
No.2
- 回答日時:
単純なミスだと思います。
2007/1/1<=2007/10/3<=2007/12/31 → ピンク
上記の式をプログラムで行うと
If #2007/1/1# <= #2007/10/3# And #2007/10/3# <= #2007/12/31# Then
になります。
※不等号の向きが違うと思います。
If 39081 >= CLng(Range("a1")) And CLng(Range("a1")) <= 39447 Then
↓
If 39081 <= CLng(Range("a1")) And CLng(Range("a1")) <= 39447 Then
注)39081は2006/12/30 だと思います。
No.3
- 回答日時:
こんばんは!
不等号の向きが違うみたいですね!
余計なお世話かもしれませんが、
コードを入力するとき、シリアル値とRangeの順番をそろえた方が間違いが少ないかもしれません。
もっと単純に
Sub test()
If Year(Range("A1")) = 2007 Then
Range("A1").Interior.ColorIndex = 38
ElseIf Year(Range("A1")) = 2008 Then
Range("A1").Interior.ColorIndex = 4
End If
End Sub
ではダメでしょうか?m(__)m
No.4
- 回答日時:
No.3です!
たびたびごめんなさい。
投稿した後で気づきました。
前回の当方のコードではA1セルの日付が2007・2008年以外に変わっても
そのままの色付けになってしまいます。
結局、No.1様の方法とダブってしまいましたが
Sub test()
If Year(Range("A1")) = 2007 Then
Range("A1").Interior.ColorIndex = 38
ElseIf Year(Range("A1")) = 2008 Then
Range("A1").Interior.ColorIndex = 4
Else: Range("A1").Interior.ColorIndex = xlNone
End If
End Sub
に訂正してください。
何度も失礼しました。m(__)m
No.5
- 回答日時:
IF 式Aが真 AND 式Bが真 THEN
・・・・(1)
ELSE
・・・・(2)
ENDIF
を書き換えたもの
IF 式Aが真 THEN
IF 式Bが真 THEN
・・・・(3)
ELSE
・・・・(4)
ENDIF
ELSE
IF 式Bが真 THEN
・・・・(5)
ELSE
・・・・(6)
ENDIF
ENDIF
において、
(1)に相当するのは(3)ですが、(5)も(1)と同じと解釈しているからでは?。
頭の中だけでなく、イミディエイト使ってきっちり真偽結果を検証すると良いです。
ANDを羅列する場合はケース漏れに注意してください。
階層複雑のときは記載多くなって面倒でもきっちり書く方が答えきっちりでます。
No.7
- 回答日時:
最初に、何か別の言語を学んだことがありますか?
ここでは、論理式の問題ですから、Year 関数の話は、置いておきます。ANDそのものは、間違いありませんが、ご質問の書き方は、とても間違いやすいのです。(以下はリテラル値を使っています)
本来、 If #12/30/2006# <= Range("A1").Value <= #12/31/2007# Then
と書ければよいのですが、VBAでは許されていません。
そこで、このように書きます。
If #12/30/2006# <= Range("A1").Value And Range("A1").Value <= #12/31/2007# Then
Range("A1").Interior.ColorIndex = 38
ElseIf #1/1/2008# <= Range("A1").Value And Range("A1").Value <= #12/31/2008# Then
Range("A1").Interior.ColorIndex = 4
End If
となるのです。
しかし、間違いないようにするには、右辺と左辺を揃えたほうが間違いが少ないのです。(なお、リテラル値を書くのはコーディングルールとしては、あまり関心しません。)以下のように書くと分かりやすいはずです。
Sub TestMacro1()
If Range("A1").Value >= DateValue("2006/12/30") And _
Range("A1").Value <= DateValue("2007/12/31") Then
Range("A1").Interior.ColorIndex = 38
ElseIf Range("A1").Value >= DateValue("2008/1/1") And _
Range("A1").Value <= DateValue("2008/12/31") Then
Range("A1").Interior.ColorIndex = 4
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
えエクセルで○は1とし△は0.5で...
-
数IIBの数列の問題、、、
-
エクセルのif関数の条件入力
-
UWSCのCALLで呼び出すファイル...
-
EXCELで2つの数値のうち大きい...
-
エクセル初心者です 関数の入れ...
-
PowerPointで表の1つの列だけ...
-
LOOKUP関数を使えばいいのでし...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
エクセルの表から正の数、負の...
-
エクセルでオートフィルタのボ...
-
エクセルでの複数条件下での標...
-
Excel関数で、範囲内の最後のセ...
-
エクセル 文字数 多い順 並...
-
Excelでグループの最大値から項...
-
50人を数回、グループ分けする...
-
エクセルで最初のスペースまで...
-
重複行を削除して数値を合算し...
-
SUMIFとCOUNTIFを合わせたよう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
えエクセルで○は1とし△は0.5で...
-
UWSCのCALLで呼び出すファイル...
-
Excel 英大文字小文字を区別せ...
-
VBAで組み合わせ算出やCOUNTIFS...
-
以下の条件に合う関数を教えて...
-
数IIBの数列の問題、、、
-
エクセルのFINDで複数のワード...
-
iPhone15Proに搭載されるa17Pro...
-
誰か解いてください!
-
Excel 関数ifについて
-
格納したデータを配列のように...
-
ゴルフのティーチングプロにな...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
おすすめ情報