【Excel】エクセルで色をカウントする関数【CountColor】

Excel/VBA

本日はエクセル関数で任意の色を数える関数CountColorのご紹介をしたいと思います。
Excel全バージョン対応

スポンサーリンク

背景色のついたセルをカウントする為に

ここのページに辿りついた方のやりたい事はきっと、セル背景色の色毎に数を数えて数値を出す。
そしてその数値を利用して他の関数と混ぜて使いたい って所じゃないでしょうか?


先ず初めにお伝えしたいのが、 エクセル標準搭載の関数では出来ません。色々調べたのであれば薄々察しているかと思いますがVBA(マクロ)を利用するしかないです。 


でも、あぁやっぱりか…と回れ右するのは少し待って欲しい。思ってる以上にVBAは敷居が低いし、コピペするだけで願いを叶える事が出来るので腹を括って是非トライしてみよう!

VBE (Visual Basic Editor) を起動する

エクセルを起動した状態で、Alt+F11 を押します。すると↓こんなのが出てきます。

出てきたら左側のプロジェクトの追加したいエクセルにカーソルを合わせて右クリック➡標準モジュールを選択

すると何もないまっさらな画面が出てきたと思います。
後はここに後述するコードをコピペするだけの簡単なお仕事になります。

コピペするコード:CountColor

とりあえず何も考えず下記を張り付けてみましょう。

Function CountColor(Color As String, Rng As Range) As Long
 
  ' カウントする範囲の変数
  Dim myRng As Range
  ' 数を数える変数
  Dim nCol_cnt As Long
  ' ColorIndexの変数
  Dim nColor As Integer
 
  ' 再計算を行わせる
  Application.Volatile
  ' 初期化
  nCol_cnt = 0
  nColor = 0
  
  ' ColorIndex 必要な色が無ければ追加も可
  Select Case Color
      Case "black"
           nColor = 1
      Case "white"
           nColor = 2
      Case "red"
           nColor = 3
      Case "green"
           nColor = 4
      Case "blue"
           nColor = 5
      Case "yellow"
           nColor = 6
      Case "pink"
           nColor = 7
      Case Else
           ' ここに無い色の場合は終了
           Exit Function
  End Select
  
  ' 指定範囲をぐーるぐる
  For Each myRng In Rng
    If myRng.Interior.ColorIndex = nColor Then
      ' 指定の色があればインクリメント
      nCol_cnt = nCol_cnt + 1
    End If
  Next myRng
  
  ' 指定の色の数を返す
  CountColor = nCol_cnt
 
End Function

上記貼り付けさえすれば、後はエクセル側で普通の数式と同じ感覚!
使い方はCountColor(”色英語(全小文字)”,範囲)で指定した色の指定範囲内の数を数えれます。

保存の仕方

で、最後に保存する時ですが、最近のエクセルで作ったファイルだとファイル拡張子がxlsxになってると思いますけども、
このままだと自分で作った関数(今回のCountColor)を保存する事が出来ません。

普通に上書き保存すると上記ウィンドウが出てくるので、ファイル形式を変更して保存します。
選択肢としてはxlsmxlsのどちらかで保存をするんですけども、xlsmだとファイルアイコンにマークがつくので、
それが嫌な場合は xls で保存しましょう。

おわり

VBAとかちょっと… って苦手意識を持ってた方も是非これを機にエクセルワールドにどっぷり使ってくれたら嬉しいです!
はまみも現在社内SEやってますけども、出だしは営業にいた時にエクセルワールドに足を踏み入れたのがきっかけです。
自分のやりたいことに合わせてオリジナル関数を作りまくれるので、エクセルマスターを目指しましょう~(ᵔᴥᵔ)

コメント