人に聞けない痔の悩み、これでスッキリ >>

1つの行に1つのデータが記載されているファイルを引き継ぎました。

データの区別のため、ファイルの旧保有者が、手作業で(!)、
行ごとに赤字・青字・ディフォルト黒字 の3種の文字色を使いわけていたようです。

色付き文字のみを抽出したいのですが、やり方が分かりませんのでご教示ください。

できれば今後の作業の簡略化のために、新しい行を要素として一列増やし、そこに「赤字記載=1、青字記載=2、黒字記載=3」とを入力する方法に変更したいと思っています。
そのようなことがあわせて一発変換としてできれば、その方法をぜひお教え下さい。

人からもらったデータから作業しなくてはならないため、困っています。
マクロは超初心者ですのでよろしくお願いします。

関連質問:No.835122 excelのデータで色つき行の抽出方について教えてください
http://oshiete1.goo.ne.jp/kotaeru.php3?q=835122

このQ&Aに関連する最新のQ&A

A 回答 (2件)

コードをいれる。

いれる数字はカラーインデックス値そのままにしました。
Sheet3のA列にデータがあるとします。
Sub test02()
Dim cl As Range
Worksheets("sheet3").Range("a1:a100").Select
For Each cl In Selection
If cl.Interior.ColorIndex = xlNone Then
cl.Offset(0, 2) = ""
Else
cl.Offset(0, 2) = cl.Interior.ColorIndex
End If
Next
End Sub
----
別シートSheet2に抜き出すならば、
Sub test02()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
'----A
Set sh1 = Worksheets("Sheet3")
Set sh2 = Worksheets("Sheet2")
j = 1
Dim cl As Range
sh1.Activate
sh1.Range("a1:a100").Select
For Each cl In Selection
If cl.Interior.ColorIndex = xlNone Then
cl.Offset(0, 2) = ""
Else
cl.Offset(0, 2) = cl.Interior.ColorIndex

sh2.Cells(j, "A") = cl
sh2.Cells(j, "A").Interior.ColorIndex = cl.Interior.ColorIndex
j = j + 1
End If
Next
End Sub
    • good
    • 0
    • good
    • 0
この回答へのお礼

ありがとうございます。数値データの場合はこれが役に立ちそうです。
でも、今回の場合、数値データではなくて、文字データのを抽出したいのですが…

お礼日時:2004/07/07 10:51

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで文字色がついているセル数をカウント

エクセル初心者です。
エクセルセルに
佐藤
鈴木
青山
渡辺
と入力されてあって佐藤と鈴木の文字の色が青だった場合文字色(青)がついているセルをカウントし,あるセルに2と表示することはできるのでしょうか。条件付書式や検索と思いましたがわかりません。よろしくお願いします。

Aベストアンサー

 質問者様お使いのエクセルのバージョンが不明なので何がアレですが
いちおう 2000 で作成した経験からアドバイスさせていただきます。


>文字色(青)がついているセルをカウントし,

1 残念ながらマクロを使わないと,ご希望のことは難しいようです。
  以下に手順を記しますので参考にしてください。

(1) [ツール]-[マクロ]-[VisualBasicEditor](またはAlt + F11)で
 VBE画面にします。

(2) VBE画面上で[挿入]-[標準モジュール]を選択します。
 するとコードウィンドウが出ますので、以下のコードを記します。
 (コピー&ペーストでもOK)

----------------------------------------------------------------
Function SpecialCell(targetRange As Range, _
intColor As Integer) As Integer
'赤は3,緑は4,青は5,黄は6
Dim myCell As Range

For Each myCell In targetRange
If myCell.Font.ColorIndex = intColor _
Or myCell.Interior.ColorIndex = intColor Then
SpecialCell = SpecialCell + 1
End If
Next
End Function
----------------------------------------------------------------

(3) 元のワークシートに戻って、カウント結果を表示させたいセルに、

赤字のカウントは =SpecialCell(A1:E5,3)
青字のカウントは =SpecialCell(A1:E5,5)
黄字のカウントは =SpecialCell(A1:E5,6)

 などとすればOKです。

 ただし、フォント色が黄でセル色が青などというのは、どちらにも
カウントされてしまうので注意が必要です。


 ☆参考:ブックの標準カラーパレットのインデックス番号
  (VBエディタのヘルプにて「ColorIndex」を検索、参照した)

  1 黒   2 白   3 赤   4 黄(薄)緑 5 青
  6 黄   7 桃色  8 水色  9 茶色   10 緑
  11 紺    (濃い緑)

以下 ~ 56 まであるようです。



2 別解(参考)
-----------------------------------------------------------
Function ColoredCell(rngArg As Range, rngSample As Range) As Long
For Each c In rngArg
If c.Interior.ColorIndex = rngSample.Interior.ColorIndex Then
ColoredCell = ColoredCell + 1
End If
Next
End Function
----------------------------------------------------------------
 使う際には =ColoredCell(A1:A10,A5) といったように、第1引数は
調べたい範囲、第2引数には指定する色の(サンプル)セルを当てる。
 ※SUMIF 関数の併用も可



2 実は、マクロを使わない方法があります。
  5~6年程前に、何処かで教わった記憶があります。

  色を判定する式(=GET.CELL(**,**))をブックに登録、判定結果を
 表示したいセルに、登録した式の定義名で記述する。
  その判定結果を SUMIF や COUNTIF 関数の引数として再利用する。

 以下は、その手順です。

 (1) 色を判定する式を登録
   メニューバー「挿入」→「名前」→「定義」名前の定義画面にて
  「参照範囲」欄に
   「=GET.CELL(検査の種類を指定する番号,判定したいセル番地)」
   名前欄に式の名前を(「文字の色」や「セルの色」等)付けて
  「追加」→「OK」で登録完了
☆検査の種類を指定する番号とは?
20→フォントは太字か否か?を判定
24→文字フォントの色を判定
63→セルの塗りつぶし色を判定
 
 なお、後から書式を変更しても結果が自動的には更新されないので、
NOW 関数を組み込み「F9」キーで更新させた方が良いようです。
 例「=GET.CELL(**,**)+NOW()*0」(0を足している為、値に影響なし)

 (2) 判定した結果を表示させる
   判定結果を表示したいセルに「=定義した名前」という式を入力
  すると色の種類すなわち色の番号を判定結果として表示してくれる
   色の番号(Excel のヘルプでカラーインデックスを参照できる)
   例☆黒字(無指定)=>0
     赤      =>3
     青      =>5
     緑      =>10
     薄緑     =>4
     ※その他も、実際に試してみれば結果は分かるはず

 (3) 判定した結果を、SUMIF や COUNTIF関数の引数として利用する。

 言葉で説明するのは非常に難しくこれで理解していただけるかどうか
自信がありませんが、この、色の判定式を登録してしまうという方法は
Excel97 から Excel2002までのバージョンで活用できることは確認済み
です。 もちろんこれも SUMIF 関数との併用(数字として計算する)が
可能です。
 実際のサンプルファイルを見ていただければいいのですが、なかなか
良い方法が思いつきません。

 Excel2007 で読み込んでも反映されましたが、2007でどう作成するの
かは、残念ながら 2007 での作成経験がないので説明できません。



 ところで、この OkWave には Office 系ソフト専門のカテゴリもあり
ます。 そっちの方が詳しい人が多いと思うので、今後は使用ソフトの
バージョンも併記してそちらで質問されるようにした方が解決が速いと
思われます。

http://okwave.jp/207/218/c232.html

 なお、老婆心ながら、その場合の複数カテゴリにわたる(多重投稿)
マルチポストには気をつけましょう。

参考URL:http://miyahorinn.fc2web.com/faq/faq030.html,http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html

 質問者様お使いのエクセルのバージョンが不明なので何がアレですが
いちおう 2000 で作成した経験からアドバイスさせていただきます。


>文字色(青)がついているセルをカウントし,

1 残念ながらマクロを使わないと,ご希望のことは難しいようです。
  以下に手順を記しますので参考にしてください。

(1) [ツール]-[マクロ]-[VisualBasicEditor](またはAlt + F11)で
 VBE画面にします。

(2) VBE画面上で[挿入]-[標準モジュール]を選択します。
 するとコードウィンドウが出ますので...続きを読む

Qエクセル オートフィルタ、文字色で抽出

エクセル_2000なのですが、オートフィルタ等で、テキストの色が違う部分(たとえば、文字色「赤」のみ)抽出するような方法はありませんでしょうか。
VBAはあまりわかりませんので、アドインでそのようなものがあると有難いのですが・・。ご存知のかた、教えてくださいませ。

Aベストアンサー

作業列を使う方法です。
A列に色分けされたデータが入力されてあるとします。

B1セルを選択して
「挿入」→「名前」→「定義」を選択し、「名前の定義」画面を表示します。
名前に「color」
参照に「=GET.CELL(24,sheet1!$A1)」
と入力し「OK」を押して「名前の定義」画面を閉じます。
※sheet1!$A1のところにはデータが入力されているセル番地を入力します

B1セルに
=color
と入力し、必要な件数分コピーします。

あとはオートフィルターで作業列が「0と等しくない」で抽出できるはずです。
因みに、赤なら3という数字が出るはずです。

これは「4.0マクロ関数」というものを使用した方法です。
一般的な関数などでは文字色による判定などはできません。
「4.0マクロ」を使ったブックを保存した場合、次に開いたときに
「このブックには Microsoft Excel 4.0 マクロが~」というメッセージが出ると
思います。
これが出ないようにするには
「=color」と入力したセルすべてを選択→コピー→値のみ貼り付け→
「挿入」→「名前」→「定義」を選択し、「名前の定義」画面を表示→
「color」を選択→削除→「OK」
として保存します。
この作業をした後に文字色を変更した場合はもう一度始めから設定しなおしてください。
メッセージが出てもかまわないのであれば、出る度に「はい」を選択してください。

参考URL:http://hpcgi1.nifty.com/kenzo30/a_cbbs/cbbs.cgi?mode=al2&namber=32468&no=0&KLOG=166

作業列を使う方法です。
A列に色分けされたデータが入力されてあるとします。

B1セルを選択して
「挿入」→「名前」→「定義」を選択し、「名前の定義」画面を表示します。
名前に「color」
参照に「=GET.CELL(24,sheet1!$A1)」
と入力し「OK」を押して「名前の定義」画面を閉じます。
※sheet1!$A1のところにはデータが入力されているセル番地を入力します

B1セルに
=color
と入力し、必要な件数分コピーします。

あとはオートフィルターで作業列が「0と等しくない」で抽出できるはずです。
因...続きを読む

Q色が付いたセルの合計を出したいのですが…

いつもお世話になります。

エクセル2002を使用していますが、特定の色が付いたセルの個数を数えたいのです。
同時に「色が付いてあるセルを数える」に加えて、「色を付けたら直後、そのセルの個数が数えられる」ようにしたいのです。
「色が付いたセルの引数を数える」というのは分かるのですが、「セルだけの合計」となると分かりません…。

以前にも質問しましたが、結局分からず終いでしたので、改めてお願い致します。

例題)A1~G1を赤で色付けした時に、赤色の付いたセルの個数をA2に出す。
理想とする結果) A2に赤色のセルの合計「7」が出た。

Aベストアンサー

ユーザー定義関数による方法です。

一般の関数のような使い方で、指定した色のセル数をカウント出来ます。
色を変更し、<Enter>等で他のセルに移動した時点で再計算します。

書式: CCount(範囲,色番号(カラーインデックス))
使用例 : CCount(A1:A100,3)   A1:A100範囲の赤色をカウント
(赤=3 ですが、他の色の番号を知るには、後述の GetIndx関数で調べられます。)

これで良かったら、詳しく操作手順を書きますので、新しいブックでテストして
みてください。

VBAコード設定方法
1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。

Function CCount(Rng As Range, idx)
Dim R As Range
Dim Cnt As Long
Application.Volatile
For Each R In Rng
  If R.Interior.ColorIndex = idx Then Cnt = Cnt + 1
Next R
CCount = Cnt
End Function

Function GetIndx(Rng As Range)
If Rng.Count > 1 Then
  GetIndx = vbNullString
  Exit Function
End If
GetIndx = Rng.Interior.ColorIndex
End Function

'---------------------------------------
◎ 各色のカラーインデックスを調べる関数(付録)
コード後半は、GetIndx関数は、カラーインデックス番号を調べる関数です。
必要なときに使ってみてください。

使い方例: A1をインデックス番号を調べたい色で塗り潰します。
例えば、セルA1を任意の色で塗り潰し、B1に
 =GetIndx(A1) を入力するとそのカラーインデックス番号が表示されます。

----------------------------------------
※ CCount関数を自動再計算に対応させる設定

 色を変更しただけでは、再計算されませんので Enter等でセルを移動した時点
 で、再計算されるようにします。(シートモジュールに記述)

【 操作手順 】
・この関数を使用しているシートのシート名タブを右クリックして「コードの表示」を
 指定します。
・開いたコードウィンドウに下記コードをコピーして貼り付けます。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Calculate
End Sub

ユーザー定義関数による方法です。

一般の関数のような使い方で、指定した色のセル数をカウント出来ます。
色を変更し、<Enter>等で他のセルに移動した時点で再計算します。

書式: CCount(範囲,色番号(カラーインデックス))
使用例 : CCount(A1:A100,3)   A1:A100範囲の赤色をカウント
(赤=3 ですが、他の色の番号を知るには、後述の GetIndx関数で調べられます。)

これで良かったら、詳しく操作手順を書きますので、新しいブックでテストして
みてください。

VBAコード設定方法
1.Alt +...続きを読む

QExcel 書式を関数で判断。

Excelで、「もしA1が緑色ならば」などと、書式を関数で判断させるにはどうすればよいのでしょうか。

Aベストアンサー

#1の回答通り関数はありません。マクロでなら可能です。

ここでは「色の付いたセルを合計」という質問が結構出ています。
http://okwave.jp/kotaeru.php3?q=2000523

Qexcelのデータで色つき行の抽出方について教えてください

excelでシート一つでデータを入れてるのですが列の一部分行の数箇所に黄色で色をつけてるのですがその色つきの行だけを抽出したいのですが色での抽出ってできますか?教えてください 急いでいます

Aベストアンサー

やはりフォントではなくセルの色だったんですね。とんだ回り道をしてしまいました。
で、こんどは新条件登場ですか。

確認です。
データはZ列以降には入っていませんね?
データは4001行以降には入っていませんね?
A~D列のどれか一つでもセルに色がある行は抽出するのですね?

そうであれば以下で試してください。
今度は、上記の条件に合致するものを並べ替えで上にもってくるやり方です。

Sub IROTEST3()
For i = 1 To 4000
For x = 1 To 4
If Cells(i, x).Interior.ColorIndex <> xlNone Then Cells(i, 27).Value = 1
Next x
Next i
Range("A1:AA4000").Select
Selection.Sort Key1:=Range("AA1"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
Range("AA:AA").ClearContents
End Sub

やはりフォントではなくセルの色だったんですね。とんだ回り道をしてしまいました。
で、こんどは新条件登場ですか。

確認です。
データはZ列以降には入っていませんね?
データは4001行以降には入っていませんね?
A~D列のどれか一つでもセルに色がある行は抽出するのですね?

そうであれば以下で試してください。
今度は、上記の条件に合致するものを並べ替えで上にもってくるやり方です。

Sub IROTEST3()
For i = 1 To 4000
For x = 1 To 4
If Cells(i, x).Interior.ColorIndex <> xlNone Th...続きを読む

Qエクセルで色の付いたセルを抽出したいです

エクセル2003を使っていてOSはウインドウズXPです

エクセルで色をつけたセルの行だけを抽出したいです
例えば
セルB1に
=IF(A1=セルパタ-ン緑色,"抽出","")
のようにして、"抽出"という言葉を表示させれば、オ-トフィルタで抽出できると思っています
ですが、「セルパタ-ン緑色」の部分をどうすればいいかわかりません

また書式を条件に並べ替えをすれば、抽出できると思っています

何かいいアイデアがありましたら教えてください

Aベストアンサー

CELL関数で色が付いているかどうかまでは確認できますが、色までは分かりません。ユーザ関数を記述する必要があります

まず以下のマクロをALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。

Private Function CellColor(ByVal target As Range) As Integer
CellColor = target.Interior.ColorIndex
End Function

シートに戻り任意のセルに
=IF(CELLCOLOR(A1)=10,"抽出","")
と入力すると「背景色が緑色」のセルの時「抽出」となります(=CELLCOLOR(A1) はセルの背景色を返すユーザ関数となります)

色と数値(カラーインデックス)の対応表は下記URLを参照してください

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/dic/dic02a.html#colorpalet

CELL関数で色が付いているかどうかまでは確認できますが、色までは分かりません。ユーザ関数を記述する必要があります

まず以下のマクロをALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。

Private Function CellColor(ByVal target As Range) As Integer
CellColor = target.Interior.ColorIndex
End Function

シートに戻り任意のセルに
=IF(CELLCOLOR(A1)=10,"抽出","")
と入力すると「背景色...続きを読む

Qエクセルで特定の色の数字だけ計算させることはできますか?

売上げ表内で、A社は赤、B社は青と売上げ数字が混在しています。
最終的にその月の売上げを社ごとに計算したいのですが、混在しているので、今は手計算しています。
せっかく色分けしているので、赤の数字だけを足す、
青の数字だけを足すということができれば楽なのになぁと思い質問させていただきました。
SUMIF関数などでできるのでしょうか?
エクセルは2003を使用しています。
アドバイスお願いいたします。

Aベストアンサー

こんにちは。KenKen_SP です。

通常、関数は値しか扱えません。つまり、フォント色やセル背景色などの書式
を関数で扱うことはできません。では、どうするか? 方法は2つあります。

1. 4.0マクロ関数を使う
  このカテゴリー内で GET.CELL で検索すると過去に類似の質問があります。
  参考にして下さい。

2. マクロ(VBA)を使う
  フォント色で集計を行うツールを作ってみました。お試し下さい。

  【手順】
  1)[Alt]+[F11]で Visual Basic Editor (以下 VBE )を起動
  2)[挿入]-[標準モジュール]
  3)2)で開いたスペースに以下のコードをコピー&ペースト
  4)VBE を閉じる

  【使い方】
  [ツール]-[マクロ]-[マクロ]で実行

'以下コードです。


Sub フォント色別に数値集計()

  Dim rngTARGET As Range
  Dim rngTEMP  As Range
  Dim DIC    As Dictionary
  Dim rngCELL  As Range
  Dim lngC_IDX As Long
  Dim dblNUM  As Double
  Dim vntKEY  As Variant
  Dim i     As Long
  
  'ユーザーに集計範囲を指定してもらう
  If TypeName(Selection) = "Range" Then
    Set rngTEMP = Selection
  Else
    Set rngTEMP = ActiveCell
  End If
  On Error Resume Next
  Set rngTARGET = Application.InputBox( _
    Prompt:="フォント色別に数値を集計します。" _
        & vbCrLf & "集計範囲をマウスで選択して下さい。", _
    Title:="集計範囲の選択", _
    Default:=rngTEMP.Address, _
    Type:=8)
  Set rngTEMP = Nothing
  If rngTARGET Is Nothing Then Exit Sub
  On Error GoTo 0
  
  'フォント色別に集計開始
  Set DIC = CreateObject("Scripting.Dictionary")
  For Each rngCELL In rngTARGET
    With rngCELL
      If .Value <> "" And IsNumeric(.Value) Then
        lngC_IDX = .Font.ColorIndex
        If Not DIC.Exists(lngC_IDX) Then
          DIC.Add Key:=lngC_IDX, Item:=.Value
        Else
          dblNUM = .Value + DIC.Item(lngC_IDX)
          DIC.Item(lngC_IDX) = dblNUM
        End If
      End If
    End With
  Next rngCELL
  
  '結果出力
  On Error Resume Next
  Set rngTARGET = Application.InputBox( _
    Prompt:="集計が終了しました。結果の貼り付け先を指定して下さい", _
    Title:="結果出力", _
    Type:=8)
  If Not rngTARGET Is Nothing Then
    Set rngTARGET = rngTARGET.Cells(1, 1)
    i = 0
    Application.ScreenUpdating = False
    For Each vntKEY In DIC.Keys
      With rngTARGET
        With .Offset(i, 0)
          .Font.ColorIndex = vntKEY
          .Value = "FONT COLOR:= " & vntKEY
        End With
        .Offset(i, 1).Value = CDbl(DIC.Item(vntKEY))
      End With
      i = i + 1
    Next vntKEY
  End If

Terminate:
  On Error GoTo 0
  Application.ScreenUpdating = True
  Set rngTARGET = Nothing
  Set DIC = Nothing

End Sub

こんにちは。KenKen_SP です。

通常、関数は値しか扱えません。つまり、フォント色やセル背景色などの書式
を関数で扱うことはできません。では、どうするか? 方法は2つあります。

1. 4.0マクロ関数を使う
  このカテゴリー内で GET.CELL で検索すると過去に類似の質問があります。
  参考にして下さい。

2. マクロ(VBA)を使う
  フォント色で集計を行うツールを作ってみました。お試し下さい。

  【手順】
  1)[Alt]+[F11]で Visual Basic Editor (以下 VBE )を起動
  2)...続きを読む

Q【Excel】 色の一致するセル数をカウントしたい。

こんにちは。

ある条件にあてはまるセルに、書式でセルの色を設定してあります。
いくつかの条件で色分けしてあるのですが、これらのセルの色が「赤」は幾つ、「青」は幾つというふうに、
カウントすることは出来るのでしょうか。

よろしくお願いいたします。

Aベストアンサー

繰り返し何度も出てくる質問です。関数でと考えているなら、直接はできません。
VBAで中身たった1行のユーザー関数を作ればできます。
http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html
など
Googleで「エクセル セル 色 カウント」などで照会すると似た質問が出る。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1225959
にはCELL関数のことも載っているが、旧いバージョンの関数なので
私は、除外して言ってます。

Qエクセル・・色の着いたセルの個数を数える関数はある?

エクセルの表内で塗りつぶしされているセルだけを数える様な関数はありますか?
セルには文字や数値は入力されておらず、塗りつぶしているだけです。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもしれませんね。

なお、以下は、引数のインデックスに0を入れると、配列出力するようにしてあります。

'------------------------------------
Function ColorCellCount(範囲 As Range, Optional インデックス As Integer = 1, Optional パターン As Integer = 0)
  Dim myRng As Range
  Dim myIndex As Integer
  Dim myPattern As Integer
  Dim myColor() As Integer
  Dim Ret() As Double
  Dim c As Range
  Dim i As Long
  Dim j As Long
  Set myRng = 範囲
  myIndex = インデックス
  myPattern = パターン
For Each c In myRng
   On Error Resume Next
   If myPattern = 0 Then
     i = WorksheetFunction.Match(c.Interior.ColorIndex, myColor, 0)
   Else
     i = WorksheetFunction.Match(c.Font.ColorIndex, myColor, 0)
   End If
   If i = 0 Then
     ReDim Preserve myColor(j)
     ReDim Preserve Ret(j)
      If myPattern = 0 Then
       myColor(j) = c.Interior.ColorIndex
      Else
       myColor(j) = c.Font.ColorIndex
      End If
      Ret(j) = 1
     j = j + 1
     On Error GoTo 0
     Else
      Ret(i - 1) = Ret(i - 1) + 1
   End If
  Next
  If myIndex <= 0 Then
   ColorCellCount = Ret()
  ElseIf myIndex > UBound(Ret) + 1 Then
   ColorCellCount = Ret(UBound(Ret()))
   Else
   ColorCellCount = Ret(myIndex - 1)
  End If
  Set myRng = Nothing
End Function

ワークシート上での使い方は、

A列
色付き
色なし
色なし
色付き
色付き

=ColorCellCount(A1:A5, 1 )

とすれば、上から数えて、1番目の色のセルの数が出ます。

=ColorCellCount(A1:A5, 2 )
を入れれば、色なしのセルの数が出ます。

=SUMPRODUCT(ColorCellCount(A1:A5, 0 ))

とすれば、全部の合計が出ます。

なお、
=ColorCellCount(A1:A5,1,1)

とすれば、文字の色を数えます。

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもし...続きを読む

Qエクセルで条件により文字色を変える関数教えて下さい

エクセル2003を使っています。
セルa1に下限値,a2に上限値を入力、c3にデータを入力します。
入力したデータがa1下限値,a2上限値の範囲内であればデータの文字色はそのままで、その範囲を超えるとデータの文字色が「赤」に変わる数式を教えて下さい。よろしくお願いします。

Aベストアンサー

C1セルを選択し、次の方法で如何でしょうか。
(1)書式→条件付き書式
(2)条件を「セルの値が」、「次の値の間以外」、「=A1」、「=B1」で設定
(3)書式→フォントタブの色リストで赤を選択→OK
(参考)下行も同様にしたい場合、C1セル下方向にコピーして下さい。


人気Q&Aランキング