• ベストアンサー

Excel2002 データの抽出

Excel2002で塗りつぶしたデータの抽出をしたいのですがうまくいきません。やはり値でないと抽出できないのでしょうか? 一覧の表のデータの中でいくつかの行だけ塗りつぶしをしてあります。この塗りつぶしをした行だけ抽出したいのですが無理ですか? どなたかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#9284
noname#9284
回答No.4

1.A列から右に色がついているとします。 2.D列を作業列として使います。 3.今回、マクロ関数を使います。 「D1を選択し」て、 挿入メニュー→名前→定義で 名前(W)に 色 という名前を入力し 参照範囲(R)というボックスに =GET.CELL(63,!A1)+NOW()*0 という数式を入力してOKします。 (=色 とセルに入力すると、セルの塗りつぶしの色番号が出ます。赤なら3とか塗りつぶしなしなら0とか) D列の好きな行から下に =色>0 という数式を埋めます。 1行目は見出しだと思いますから、 A1:D1を選択してデータメニュー→フィルタ→オートフィルタ を設定します。 で、TRUEだけ絞り込めば色つきの行だけが絞り込めます。 B列から右に色がついている場合、 D1を選択して名前を定義するときに =GET.CELL(63,!B1)+NOW()*0 という数式を入力してください。 この法則、おわかりでしょうか? 参考になるサイトにリンクを張らせていただきますね。 エクセル技道場

参考URL:
http://www2.odn.ne.jp/excel/waza/name.html#SEC23

その他の回答 (3)

noname#29107
noname#29107
回答No.3

VBAを使用しない方法としては、旧世代のマクロ関数を使用する方法があります。 ここを参考にしてみてください。 http://www.moreexcellent.com/excel/tips/color.htm この方法で塗りつぶしの色番号を特定し、その番号で抽出するということが可能でしょう。 ただ、もうヘルプからも消えている方法なので、あまり新規には使用しない方が良いのかもしれません。その点では#1さん、#2さんの言われるようにVBAを使用する方が正道かも。

参考URL:
http://www.moreexcellent.com/excel/tips/color.htm
  • tascany
  • ベストアンサー率48% (15/31)
回答No.2

ユーザー定義関数を使った方法をご紹介します。ワークシート関数のなかにセルの色を取得するものはないようなので・・・。 1)VBエディタに下記コードを貼り付ける。(引数で指定された)セルの色を表す値(ColorIndexプロパティ値)を返す関数です。 Function Color(x) Color = x.Interior.ColorIndex End Function 2)リストの一番右の列の右隣に「=Color(A2)」などとして、下方向にコピペ。 3)Color関数の値としては、色が着いてたら正の整数が返され(たとえば、赤なら「3」)、色が着いてなければ「-4142」が返されます。そこで、オートフィルタのオプションで「1以上」として抽出してやれば、ご希望がかなうと思います。 ※注意点・・・塗りつぶしをキャンセルしたり色を変更したりしても自動的に再計算してくれません。ですので、変更を反映させるにはColor関数が入った列を選択するなどして「Ctrl+Alt+F9」する必要があります。

参考URL:
http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html
  • RECARO
  • ベストアンサー率47% (49/103)
回答No.1

マクロを使用しないと無理のような気がしますね・・・ 書式を判定する関数はなかったような・・・? もし有ったらすみません。誰か教えてください(^^;)。 マクロで簡単なものを書いてみました。 まず,セルA1~A5に適当な数値を入れ,そのセルの中のいくつかを「黄」色(ColorIndex=6)に塗りつぶします。 そして以下のマクロを実行すると,黄色く塗りつぶしたセルの中身だけその横のセルにコピーされます。 ------------------------------------------------- Sub 黄色いセルの中身を横にコピー() For i = 1 To 5 Cells(i, 1).Select If ActiveCell.Interior.ColorIndex = 6 Then Cells(i, 2).Value = Cells(i, 1).Value End If i = i + 1 Next i End Sub -------------------------------------------------

関連するQ&A