|
|
| Excel VBA Macro ・ セル制御 ・ FAQ |
|
太字または赤色文字のセルの数を求めるには?
|
|
|
|
Question 48.6 |
Excel VBA Borad (掲示板)より |
 |
 |
|
|
1〜30,000(20列150行)まで数字を入力したRange("番号")の範囲から、太字(又は文字色=赤)になっている数字のセルの個数を求めたいのですが・・・?
いろいろやってみましたが・・・ヒントをお願いします。
空白を検索するのであれば次のように考えました。
Sub 空白検索()
x = Range("番号").SpecialCells(xlCellTypeBlanks) _
.Cells.Count
MsgBox x & "個の空白があります"
End Sub
これが、文字が太字や文字の色でセルの個数を数える場合を、教えていただきたいと思います。
表示形式なので xlCellTypeAllFormatConditions などを使うのかなと思いましたが、うまくいきません。 よろしく・・・。
|
|
|
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...
の解説をお願いします。すみません。
|
|
|
And演算子は論理積を返します。俗に言う「かつ」ですが、数値について考える場合2進数が基本となります。
このとき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 の意味がよくわからなかったので・・・。勉強になります。よくわかりました。
またよろしくお願いします。
|
|
|
|
| |
|
|