- ベストアンサー
Excelマクロで変更する方法
- Excelマクロを使用して、3つのグループのいずれかに太字で色塗りがある行を特定する方法を教えてください。
- 初心者向けに、BooleanのTrueとFalseの使い方を説明してください。
- 以前の質問と画像のリンクを提供しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
グループ内の3つのうち1つが色塗りで太字ならという条件は変わっていないのでしょうか?、であれば、一番簡単なのは、 LFlag = False にして、 LFlag = LFlag Or GFlag にすればいいです。 しかし、そのような条件であれば、グループ分けの必要はなくなり、9つのうちどれか1つが条件に合っていたら、という風に考えることもできます。 ' Sub Macro2() ' Dim IY As Long Dim IX As Integer Dim LFlag As Boolean ' Application.ScreenUpdating = False ' For IY = 1 To Cells(Rows.Count, "A").End(xlUp).Row LFlag = False ' For IX = 1 To 9 With Cells(IY, IX).DisplayFormat LFlag = LFlag Or .Font.Bold And .Interior.Pattern = xlSolid End With Next IX ' If LFlag Then Cells(IY, "J") = "〇" Else Cells(IY, "J").ClearContents End If Next IY End Sub この方がプログラムは簡単です。 Boolean は論理型変数で、比較の結果を格納します。値はTrueとFalse しかありません。 例えば If A = 5 Then を LFlag = A = 5 If LFlag Then に置き換えることが可能です。 If LFlag = True Then でも構いません。私はこの書き方は嫌いですが。 今回の場合、 .Font.Boldは太字の時、Trueになります。 .Interior.Pattern は背景色が指定してあればxlSolid になるので、 .Interior.Pattern = xlSolid は背景色が指定してあればTrueになります。 この2つをAnd でつないでいるので、両方Trueになってはじめて結果がTrueになります。 LFlag = LFlag Or …はA = A + …と同じ感じです。 S = A(1) + A(2) は S = 0 For IX = 1 To 2 S = S + A(IX) Next IX と書くことができます。同様に If A(1) = 1 Or A(2) = 1 Then は LFlag = False For IX = 1 To 2 LFlag = LFlag Or A(IX) = 1 Next IX IF LFlag Then と書くことができます。これは沢山の項目をOrでつなぎたいときに威力を発揮します。
その他の回答 (1)
- SI299792
- ベストアンサー率47% (774/1620)
最初の説明はわかりにくかったですね。 あれは、前のプログラムをどうすればいいかという質問だったので、 前のプログラムの必要最低限の修正箇所を上げました。 LFlag = True ↓ LFlag = False 。 LFlag = LFlag And GFlag ↓ LFlag = LFlag Or GFlag に置き換えるように、という意味です。 新しいこるグラムを利用するのであれば、前のプログラムの修正は必要ありませんね。余計なことを書いてしまいました。 なぜこうするか。 「いすれかに」ということであれば、And をOrに置き換えればいいわけです。その場合初期値をFalse にする必要があります。 「いすれにも」であれば逆に言えば、どれか1つが条件に合わなければということになります。最初にTrueにして置き、条件に合わないものが出てくればFalse にすればいいわけです。
お礼
何度もありがとうございます。まだまだ、初心者でわからないのですが、勉強してみます。
お礼
度々ありがとうございます。そうですね、この場合はグループ分けは考えなくてもよいですね。でも、ORの場合はそうやればいいのかと勉強になりました。Booleanはまだ難しくて分からないです。なぜLflag=Flase となって、そこの位置なのか、LFlag = LFlag Or GFlagはどういうことなのか???
補足
すみませんが、もう一つ質問が出てきました。こちらの方にも回答いただけませんでしょうか? マクロ IF分岐 結果がうまく表示されない https://okwave.jp/qa/q9348392.html