• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:書式の条件に合致したら〇を付ける)

Excelマクロで変更する方法

このQ&Aのポイント
  • Excelマクロを使用して、3つのグループのいずれかに太字で色塗りがある行を特定する方法を教えてください。
  • 初心者向けに、BooleanのTrueとFalseの使い方を説明してください。
  • 以前の質問と画像のリンクを提供しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (774/1620)
回答No.1

グループ内の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でつなぎたいときに威力を発揮します。

honeybeans
質問者

お礼

度々ありがとうございます。そうですね、この場合はグループ分けは考えなくてもよいですね。でも、ORの場合はそうやればいいのかと勉強になりました。Booleanはまだ難しくて分からないです。なぜLflag=Flase となって、そこの位置なのか、LFlag = LFlag Or GFlagはどういうことなのか???

honeybeans
質問者

補足

すみませんが、もう一つ質問が出てきました。こちらの方にも回答いただけませんでしょうか? マクロ IF分岐 結果がうまく表示されない https://okwave.jp/qa/q9348392.html

その他の回答 (1)

  • SI299792
  • ベストアンサー率47% (774/1620)
回答No.2

最初の説明はわかりにくかったですね。 あれは、前のプログラムをどうすればいいかという質問だったので、 前のプログラムの必要最低限の修正箇所を上げました。     LFlag = True         ↓     LFlag = False 。       LFlag = LFlag And GFlag         ↓       LFlag = LFlag Or GFlag に置き換えるように、という意味です。 新しいこるグラムを利用するのであれば、前のプログラムの修正は必要ありませんね。余計なことを書いてしまいました。 なぜこうするか。 「いすれかに」ということであれば、And をOrに置き換えればいいわけです。その場合初期値をFalse にする必要があります。 「いすれにも」であれば逆に言えば、どれか1つが条件に合わなければということになります。最初にTrueにして置き、条件に合わないものが出てくればFalse にすればいいわけです。

honeybeans
質問者

お礼

何度もありがとうございます。まだまだ、初心者でわからないのですが、勉強してみます。

関連するQ&A