1

サンプルエクセル

要件は、文字列 ie(ABC,DEF,GHK) のインスタンスを、色付きのセルに存在するかどうかに基づいてカウントし、結果を下のセルに入れることができるコードです。

誰でもアドバイスできますか?

サンプルコードを試してみました

Sub Color()

Dim varCounter As String
Dim color As Integer
Dim nocolor As Integer

Range("E5").Select
color= 0
nocolor= 0

      Do Until Selection.Value = ""
                  If Selection.Font.Color = RGB(255, 0, 0) Then
                   color= color+ 1
                     Else
                   nocolor= nocolor+ 1
                   End If
                   Selection.Offset(1, 0).Select
        Loop
  Range("E47").Select
  Selection.Value = no


  Range("E48").Select
Selection.Value = color

End Sub

これは、テキスト フォントが色付けされているかどうかを確認する非常に単純なコードですが、セルの背景色を確認するものは見つかりませんでした。

Excel formula も試しましたが、それでは text と count しか検索できず、セルの背景色に基づいてカウントされません。

4

3 に答える 3

3

これは単純なユーザー定義関数です。通常のモジュールに入れることができます。その後、ワークブック内の任意のワークシートから呼び出すことができます。

Public Function CountByColorAndText(rng As Excel.Range, SearchText As String, CountColored As Boolean) As Long
Dim cell As Excel.Range
Dim CellCount As Long

For Each cell In rng
    If cell.Value = SearchText Then
         If (cell.Interior.ColorIndex = -4142 And Not CountColored) Or _
           (cell.Interior.ColorIndex <> -4142 And CountColored) Then
            CellCount = CellCount + 1
        End If
    End If
Next cell
CountByColorAndText = CellCount
End Function

3 つの引数を取ります: 評価する範囲、検索する文字列、および色付き (または色なし) のセルをカウントするかどうかです。

ここに画像の説明を入力

したがって、上記の列 E の式は次のとおりです。

=CountByColorAndText($A$2:$A$13,$D3,FALSE)

CountColored列 F では、最後の引数isを除いて同じですTRUE

私はあまりユーザー定義関数を書いていないので、誰かが来て、問題や改善点を指摘してくれるかもしれません。

于 2013-01-09T05:20:24.200 に答える
2

Font.Color使用する代わりにInterior.Color

于 2013-01-09T03:03:13.540 に答える
0

もう一度コードを書くのは素晴らしいことです。しかし、ご覧になりたい場合は、ここに改訂されたコードがあります..これが一般的なプロジェクトであるかどうかは疑問ですが、昨日OPがまったく同じ質問をします....

VBA、COUNTIF、セルの色による除外

ところでINTERIOR.COLOR、RGB を表す大きな数値が表示されます。INTERIOR.COLORINDEX

RGBフォーマットを確認しているので、次のことを試してください。ただしselect、コードを遅くするため、使用しないことをお勧めします。sheets必要にranges応じて変更できます。

例えば

Dim rng as Range
Dim cell as Range

'-- name column
Set rng = Sheets(2).Cells(Sheets(2).Rows.Count, "C").End(xlUp).Row

color= 0
nocolor= 0

 For Each Cell In rng
    If  Cell.InteriorColor = RGB(256,0,0) then
      color= color+ 1
    Else
      nocolor= nocolor+ 1
    End If
  Next Cell

'--output
Sheets(2).Range("E47").Value = nocolor
Sheets(2).Range("E48").Value = color
于 2013-01-09T07:50:28.667 に答える