すぐに役立つエクセルVBAマクロ集 すぐマク
すぐに役立つ Excel VBA マクロ集 Excel VBA Macro
FAQ
Google
 
Home |  What's New! |  Gallery |  Introduction |  Service |  Profile 500連発・組み方講座フォロー Big Color Pallet
[広告]
Excel VBA Macro
Excel DownLoad
© 1997 - 2007
永井善王.
All RightsReserved.
HappyTech & Co., Ltd.
www.happy500z.com
Excel VBA Macro ・ セル制御 ・ FAQ
太字または赤色文字のセルの数を求めるには? Click Here! Click Here!
Question 48.6 Excel VBA Borad (掲示板)より Previous Next
1〜30,000(20列150行)まで数字を入力したRange("番号")の範囲から、太字(又は文字色=赤)になっている数字のセルの個数を求めたいのですが・・・?
範囲「番号」のイメージ いろいろやってみましたが・・・ヒントをお願いします。

空白を検索するのであれば次のように考えました。
Sub 空白検索()
    x = Range("番号").SpecialCells(xlCellTypeBlanks) _
        .Cells.Count
    MsgBox x & "個の空白があります"
End Sub
これが、文字が太字や文字の色でセルの個数を数える場合を、教えていただきたいと思います。 表示形式なので xlCellTypeAllFormatConditions などを使うのかなと思いましたが、うまくいきません。 よろしく・・・。
Answer   2001.8.26 ムラジロ〜
1つ1つチェックするしかしょうがないでしょう。
はずしてたらすみません。
Dim myRng As Range
Dim myFlag As Byte                          '※1
Dim myBoldCnt As Long, myRedCnt As Long
Dim myBoldOrRedCnt As Long, myBoldAndRedCnt As Long

    For Each myRng In Range("番号")
        myFlag = 0
        With myRng
            If .Font.Color = RGB(255, 0, 0) Then myFlag = myFlag + 1
            If .Font.Bold Then myFlag = myFlag + 2
        End With
        If myFlag And 1 Then myRedCnt = myRedCnt + 1
        If myFlag And 2 Then myBoldCnt = myBoldCnt + 1
        If myFlag And 3 Then myBoldOrRedCnt = myBoldOrRedCnt + 1
        If myFlag = 3 Then myBoldAndRedCnt = myBoldAndRedCnt + 1
    Next
    MsgBox "太字" & vbtab & vbtab & myBoldCnt & vbcrlf _
        & "赤" & vbtab & vbtab & myRedCnt & vbcrlf _
        & "太字または赤" & vbtab & myBoldOrRedCnt & vbcrlf _
        & "太字かつ赤" & vbtab & myBoldAndRedCnt
※1 Excel 95では、As Byteを As Integerに変えればエラーにはならない (WebMaster注)
解説のお願い
まだ初心者なので・・・簡単にはいかないと思ってました。ムラジロ〜さんありがとうございました。
ひとつ解説をお願いしたいのですが・・・。
if...thenステートメントの

if myflag and 1 then ...
myflag and 1...
myflag and 2...
myflag and 3...
の解説をお願いします。すみません。
Answer   2001.8.28 ムラジロ〜
And演算子は論理積を返します。俗に言う「かつ」ですが、数値について考える場合2進数が基本となります。

school このときmyFlagは0〜3ですので、00、01、10、11となります。
 00 何もない
 01 赤
 10 太
 11 赤太
つまり、1桁目の1は赤であることを表し、2桁目の1は太字であることを表しています。
これと 1(01)をAnd演算子でつなぐと各桁について積を返しますので 00→00、01→01、10→00、11→01となります。
>同様に 2(10)だと 00→00、01→00、10→10、11→10。
3(11)だと 00→00、01→01、10→10、11→11となります。
If 〜 Then ステートメントは条件が真であるときに実行されると、よく物の本には書いてありますが、実際には偽でないときに実行されます。 数値で考えたらわかりやすいのですが、非ゼロの時に実行されます。
そのため
If myFlag And 1 Then とすれば、myFlagが1または3であるときにコードが実行され
If myFlag And 2 Then とすれば、myFlagが2または3   〃      〃
If myFlag And 3 Then とすれば、myFlagが0でないときにコードが実行されます。
こんな説明でよろしいでしょうか?
ありがとうございました
ムラジロ〜さんありがとうございます。myFlag And 1 の意味がよくわからなかったので・・・。勉強になります。よくわかりました。
またよろしくお願いします。
Click here to visit our sponsor