• 締切済み

エクセルで色分けした列とその付近の2列を表示

Excel 2013を使用しています。 ある表があって、1000列50行ほどデータが詰まっており、その300列ほどが青く塗りつぶされています。 その青く塗りつぶされている列の上下2例または、下2列も一緒に抜き取りたいのですが、どうすればよいのでしょうか。 教えていただけますと幸いです。よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>1000列50行ほどデータが詰まっており 普通は50列1000行のような表を作るのだが、ここでは質問の通りに考えよう。 >青く塗りつぶされている列の上下2例または、下2列も・・ あとの2列を問題にしているなら、塗りつぶされている列の1塊りの、始まりの左の2列、終わりの右2列も、抜き出したいという表現となるのではないか? 表現が私らとは違うね。 ーー それにとびとびの列において、足すと>300列ほどが青く塗りつぶされています、なのか、大事なことを書いてないので、わかりづらい。 ーー 手作業かVBAでしかできないと思うが、質問者はVBAには、なじみが無いようだ。 質問者以外の他の人も、将来この質問を見ると思う(ただしよくあるケースの課題ではないと思う)ので、やってみる。 質問者は以下無視してもらっても良い。 例データ A列ーI列 あ1 a1 b1 1 2 3 X1 y1 い1 あ2 a2 B2 1 2 3 x2 Y2 い2 あ3 a3 b3 1 2 3 X3 y3 い3 あ4 a4 b4 1 2 3 X4 y4 い4 あ5 a5 b5 1 2 3 X5 y5 い5 以下行略 1,2,3の列に縫いつぶしの色が塗りつぶされていると仮定する すなわち、D、E、F列に青色塗りつぶしされているとする。 ーー VBAコードは ALTキー+F11を押すと、 出てくるVBE画面で、挿入ー標準モジュールをおこない、 そこに以下を貼り付け。 Sub test03() k = 1 fst = "y" rc = Worksheets("Sheet1").Cells(2, 1000).End(xlToLeft).Column rl = Worksheets("Sheet1").Cells(1000, 1).End(xlUp).Row 'MsgBox rc 'msgbox rl For j = 1 To rc '1000行の例 If Worksheets("Sheet1").Cells(2, j).Interior.ColorIndex = 42 Then '黄色で塗りつぶしの例 MsgBox j If fst = "y" Then Worksheets("sheet1").Range(Cells(1, j - 2), Cells(rl, j - 2)).Copy Sheets("Sheet2").Cells(2, k) k = k + 1 Worksheets("sheet1").Range(Cells(1, j - 1), Cells(rl, j - 1)).Copy Sheets("Sheet2").Cells(2, k) k = k + 1 fst = "N" End If lst = j Worksheets("sheet1").Range(Cells(1, j), Cells(rl, j)).Copy Sheets("Sheet2").Cells(2, k) k = k + 1 '該当した列をA列から順次詰めて行く End If Next j Worksheets("sheet1").Range(Cells(1, lst + 1), Cells(rl, lst + 1)).Copy Sheets("Sheet2").Cells(2, k) k = k + 1 Worksheets("sheet1").Range(Cells(1, lst + 2), Cells(rl, lst + 2)).Copy Sheets("Sheet2").Cells(2, k) k = k + 1 End Sub ーー 塗りつぶされたその色のColorIndex のコードは すなわちColorIndex = 42 の「42」は Sub test05() MsgBox Worksheets("Sheet1").Cells(2, 4).Interior.ColorIndex End Sub を実行して、知ってください 結果 Sheet2に(A-G列に) a1 b1 1 2 3 X1 y1 a2 B2 1 2 3 x2 Y2 a3 b3 1 2 3 X3 y3 a4 b4 1 2 3 X4 y4 a5 b5 1 2 3 X5 y5 元データSheet1の1,2,3のD,E,F列の両側に2列づつ、拾って加えている。

akko0130
質問者

お礼

丁寧なご解答ありがとうございます。 結局関数を使って無事作業終了しました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。 http://www.becoolusers.com/excel/filter-by-color.html に操作による、「セルの色や文字の色でデータを抽出!色フィルター」の解説があります。 2010の例ですが2013でも同じと思います。 ーー ただし、本来フィルタは行方向(上行から下行に)のデータ並びを予定しているようなので、#1のご回答のように、事前に、データ縦横を並び替える操作(Transpose)が必要でしょう。 TRANSPOSEは、同名のエクセル関数がありますので、フィルタ処理前と処理後(抽出後のデータについて、縦横を元へ戻す)に使うこともできます。操作でやるほうが簡単でしょうが。

akko0130
質問者

お礼

ご回答ありがとうございます。 色フィルターは簡単ですが、その上下、あるいは下2列も選択したいので、この方法だともれてしまいます。 リンクまで貼っていただいたのに、申し訳ないです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

(1)エクセルというと関数を思う人が多いと思うが、関数では、今もセルの塗りつぶし色を捉えることはできません。だから本件にはつかえません。 (2)2007以後は操作では、塗りつぶし色を捉えて、何かをする仕組みが広がり始めました (3)エクセルVBAを使うと、簡単です 「青く塗りつぶされています」の300列が固まっている(間の列に塗りつぶしされない列や、他の色に塗りつぶされている列がない)なら、簡単です。1行で済む。 Sub test01() Worksheets("sheet1").Range("C1:E20").Copy Sheets("Sheet2").Range("a1") End Sub ・コピー元とコピー先のSheet1やSheet2のシート名を、実際のものに変える。 ・コピー元のRange("C1:E20").の部分を、「青く塗りつぶされています」の列に変える。 ・コピー先の左上セルRange("a1")の部分を変える   でできる ・最終行は、質問者の実情のデータ行数を捉えらえて、設定するように改良できる。 ・青く塗りつぶされている列が飛び飛び”!でも、VBAコードを改良すれば、できる。 Sub test02() k = 1 For j = 1 To 10 ’10列の例 If Worksheets("Sheet1").Cells(2, j).Interior.ColorIndex = 6 Then ’黄色で塗りつぶしの例 ’20行の例 Worksheets("sheet1").Range(Cells(1, j), Cells(20, j)).Copy Sheets("Sheet2").Cells(2, k) k = k + 1 ’該当した列をA列から順次詰めて行く End If Next j End Sub

akko0130
質問者

お礼

ご回答ありがとうございます。 塗りつぶし箇所ですが、他にはグレーで塗りつぶされているところもあります。。マイクロソフトのカスタマーサポートサービスに問い合わせたら、データ→並べ替えとフィルターの「詳細設定」で抽出箇所を選択していく方法を教えてもらいましたが、それだったら手動でするのとあまりかわりません。。 また、データ内は関数は使われていませんので、もちろん関数も無効です。 せっかく回答をいただいたのに、いただいたものをどこで使えばいいのか素人の私には理解できません。 お時間頂いたのに、本当に申し訳ないです。手動でします。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

コピーしたデータの行列を入れ換えて別シートに貼り付けてから、フィルター機能の色フィルターをかけてから、コピーして、別シートに貼り付けてみてください。

akko0130
質問者

お礼

ご回答ありがとうございます。 コピーして行列を入れ替えて貼り付けようとしたら、コピー領域と貼り付けサイズが違うため、貼り付けることができません、と表示されました。 この場合、どうすればよいのでしょうか。 また、上記の方法だと、指示した青の列についているほかの列は選択できないと思うのですが。。

関連するQ&A

専門家に質問してみよう