- ベストアンサー
マクロで空白行の処理方法についての質問
- マクロで条件付き書式設定で太字が設定された2列の行に〇を付ける処理を作成したが、空白行の処理がうまくいかない。
- 空白行がある場合に、空白を返すようにしたいが、現在は〇が入力されてしまう。
- 空白行以外の行は正しく太字なら〇が付いている。空白行を空白にするにはどうすればいいか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
どのような条件の時に、太字にしているのかわかりませんが、条件付き書式で空白の時に太字になるように設定してあるのではないでしょうか。 空白でなければという条件を追加するのが一番簡単だと思います。 If文を置き換えてみて下さい。 If Cells(nRow, 9) > "" And Cells(nRow, 10) > "" And Cells(nRow, 9).DisplayFormat.Font.Bold And Cells(nRow, 10).DisplayFormat.Font.Bold Then = Trueはなくてもいいので除きました。 別質問で、Trueがわからないといっていましたが、ここで使っているではありませんか。(笑)
その他の回答 (4)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【追加訂正】無駄なIf-Then文を省略 よくよく考えたら、(1)isBoldの初期値設定、(2)If-Then文による分岐は無駄。そういうことで最訂正しておきます。無理をすれば、1行で書けるってことです。 Option Explicit Sub test() Dim isValue As Boolean Dim isBold As Boolean Dim I As Integer For I = 1 To 10 isValue = Len(Cells(I, 2) & "") * Len(Cells(I, 3) & "") isBold = Cells(I, 2).DisplayFormat.Font.Bold * Cells(I, 3).DisplayFormat.Font.Bold Cells(I, 1) = Mid("○", 1, Abs(isValue * isBold)) Next I End Sub
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【訂正】No.3の回答を見て・・・ やっぱり、最初に書いたコードでも動くのではと思ってテスト。すると、問題なく動作。単なる、Cells→Cell のタイプミスでした。よって、先の回答を訂正。 Option Explicit Sub test() Dim isValue As Boolean Dim isBold As Boolean Dim I As Integer For I = 1 To 10 isBold = False isValue = Len(Cells(I, 2) & "") * Len(Cells(I, 3) & "") If isValue Then isBold = Cells(I, 2).DisplayFormat.Font.Bold * Cells(I, 3).DisplayFormat.Font.Bold End If Cells(I, 1) = Mid("○", 1, Abs(isBold)) Next I End Sub
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【お詫び】1行消すのを忘れていた! Sub test() Dim isValue As Boolean Dim isBold As Boolean Dim I As Integer For I = 1 To 10 isBold = False isValue = Len(Range(Cells(I, 2), Cells(I, 2)).Value & "") * Len(Range(Cells(I, 3), Cells(I, 3)).Value & "") If isValue Then isBold = Cells(I, 2).DisplayFormat.Font.Bold * Cells(I, 3).DisplayFormat.Font.Bold End If Cells(I, 1) = Mid("○", 1, Abs(isBold)) Next I End Sub Cells(I, 1) = Mid("○", 1, Abs(isBold)) は、最後の1行のみで十分。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
Excel未経験の70歳になる爺が挑んでみた。 一回目:なるほど空白行もOが付いた。 これは、BOLDを指定しているので当たり前のこと。そこで、空行か否かをチェックすることにした。でも、そんな知識も経験もない。で、Cells Value で検索した。結果、次のようなコードを書いてみた。 Sub test() Dim isValue As Boolean Dim isBold As Boolean Dim I As Integer For I = 1 To 10 isBold = False isValue = Len(Range(Cells(I, 2), Cells(I, 2)).Value & "") * Len(Range(Cells(I, 3), Cells(I, 3)).Value & "") If isValue Then isBold = Cells(I, 2).DisplayFormat.Font.Bold * Cells(I, 3).DisplayFormat.Font.Bold Cells(I, 1) = Mid("○", 1, Abs(isBold)) End If Cells(I, 1) = Mid("○", 1, Abs(isBold)) Next I End Sub 添付図のような結果を得た。 PS、空白チェック要領が正しいかどうかは自信がない。でも、一応は成功しているような???
お礼
なんども回答いただきありがとうございます。試してみます。
お礼
空白でなければ、はそうやるのですね。勉強になりました。たくさん教えていただきありがとうございます。