Excel VBAで全てのセルを読み込み、背景色で判断する方法

このQ&Aのポイント
  • VBA初心者のため、WindowsXPとExcel2003の環境で、1~3のシートの全てのセルを読み込んで、背景色が赤色のセルの文字をシート4にコピペしたいです。結合セルは、最初のH列として扱い、コピペする際には、赤色のセルから上に上がって、最初の空白のあるセルの下3行も一緒にコピペします。
  • ほとんどのセルは文字と数字で埋まっているため、空白セルを条件にして組むことができると考えています。最終的なシート4のイメージは、赤色のセルの内容を表示し、シート1とシート2で繰り返しています。
  • VBAに詳しい方、WindowsXPとExcel2003の環境で、1~3のシートの全てのセルを読み込んで、背景色が赤色のセルの文字をシート4にコピペし、さらに上に上がって最初の空白のあるセルの下3行も一緒にコピペする方法について教えてください。
回答を見る
  • ベストアンサー

Excel VBA 全てのセルを読み込み、背景色で判断

VBA初心者です。環境はWindowsXP,Excel2003です。 よろしくお願い致します。 1~3のシートの全てのセルを読み込んで、背景色が赤色のセルの文字をシート4にコピペしたいのです。 このとき、赤色になるセルの列は必ずF~ABまで結合されています。 替わるのは何行目かという行数のみです。 (結合セルは、最初のH列と見なせば良いのであれば気にしないで下さい。) さらに、赤色のセルをコピペする際に、 赤色のセルから上に上がって、 最初の空白のあるセルの下3行も一緒にコピペして シート4に連れて行きたいのです。 ほとんどのセルは文字と数字で埋まっていますので、 空白セルを条件にすると組み易いかと考えました。 【シート4】は下記のようになる予定です。  ABCDEFGHIJKLMNOPQRSTU 1~背景色が赤かったシート1のセル~~~~~ 2~を上に行って最初の空白のあったセルの~~ 3~下3行の丸々コピペ~~~~~~~~~~~ 4~~背景色が赤かったシート1のセル内容~~ 5~背景色が赤かったシート2のセル~~~~~ 6~を上に行って最初の空白のあったセルの~~ 7~下3行の丸々コピペ~~~~~~~~~~~ 8~~背景色が赤かったシート2のセル内容~~ 9~背景色が赤かったシート1のセル~~~~~ 10~を上に行って最初の空白のあったセルの~~ 11~下3行の丸々コピペ~~~~~~~~~~~ 12~~背景色が赤かったシート1のセル内容~~ カナリの初心者なため、組まれたものは読めるのですが、 最初から組む事がなかなか出来ません。 お手数をおかけしますが、 どなたか分かる方がいらっしゃったらお願い致します。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

カナリの初心者は普通、組まれたものも読めませんよ。 全てのセルって 16777216個もあります。 たぶん一個ずつ色を調べるって話では無いと思いますが、条件があまりに不透明です。 参考程度にサンプルを書きましたので、希望に近いようなら修正してお使い下さい。 A列を1行目から調べて、最初に見つけた背景が赤いセル(ColorIndex = 3)を含む行、および、その上方の空白セルから下3行をコピー状態にします。 Sub Test() Dim i As Long, r As Range With Worksheets("Sheet1")   For i = 1 To .Range("A65536").End(xlUp).Row     If .Range("A" & i).Interior.ColorIndex = 3 Then       Set r = .Range("A" & i).EntireRow       Set r = Union(r, r.End(xlUp).Resize(3).EntireRow)     End If   Next i End With If Not r Is Nothing Then r.Copy End Sub

a_student
質問者

お礼

非常に助かりました。 ありがとうございましたm( _ _ )m

a_student
質問者

補足

助かります。ありがとうございます。 質問なのですが、 >A列を1行目から調べて、最初に見つけた背景が赤いセル(ColorIndex = 3)を含む行、および、その上方の空白セルから下3行をコピー状態にします。 【質問1】 最初に見つけた背景が赤いセルだけでなく、 背景が赤いセルに関しては、同じように対象としたいのですが、 どのようにすれば宜しいでしょうか。 【質問2】 >A列を1行目から調べて、最初に見つけた背景が赤いセル >(ColorIndex = 3)を含む行、および、その上方の空白セルから >下3行をコピー状態にします。 これを A列を1行目から調べて、見つけた背景が赤いセル(全て)をコピーし、 その際、その上方の空白セルから下3行(背景が赤いセルは含まない)もコピー状態にする。 としたいのですが、どのようにすれば宜しいでしょうか。 背景色が赤いセルとあわせてコピペしたいのはタイトル行となっている 3行で、背景色が赤いセルのかなり上方にあるため、このようにしています。 よろしくお願い致します。

関連するQ&A

  • エクセル2003 VBAで セル内を 一発呼び出し

    エクセル2003 オートフィルタではなく VBAで セル内を 一発呼び出ししたいので。  よろしく お願いします。 表 列A~E(結合2行) :商品名と内容   列H~K(結合2行) 住所氏名電話番号を記載してます。 1年分を オートフィルターで  氏名 や 商品名で 探すのは 結構 時間がかかります。 同じものが ほぼ少ないため。。。 そこで  たまに 同じ氏名  同じような 品を 検索する セルを 2個ほど作って  そこへ セル1へ 商品名を入力すると  該当する 行のみ 表示される。 セル2に 名前をを入力すると  該当する 行のみ 表示される。 また、セルを赤色に塗った部分の結合行(2~3行)を 赤色に塗りつぶした行のみ 表示も できれば うれしいです。 コマンドボタン等を使ってもいいので お願いします。 そんな VBAを 作っていただけませんでしょうか^^; お手数おかけしますが どなたか よろしく お願いします。 

  • エクセルで特定の背景色を持つセル内の数値を検査したいのですが

    エクセルでブック内の全シートに対して、B列からE列に数値が設定されているブックがあり、 A列にデータのナンバーが振られており、最後のデータの一つ下にはデータの終わりを告げる、EOFという文字列が入っています。 その数値群の中で、特定の背景色を持つセルには必ず0が入っているはずなのですが、手入力のミスでいくつかのセルに他の数値が入っていました。 手作業ですとミスが発生してしまうので、エクセルの機能かマクロで以下の条件で検索をかけ、NGデータがあるかどうかの検査をしたいと考えていますが、可能でしょうか。 条件1:セルの背景色=灰色(エクセルの背景色選択画面で一番薄い灰色です) 条件2:セルの数値=0以外の数値や文字列 データの構造例     A列 /  B列   /  C列   /  D列   /  E列   / 1行目 1 /10(背景白)/0(背景灰)/0(背景灰)/10(背景青)/ 2行目 2 /10(背景白)/0(背景灰)/2(背景灰)/10(背景青)/ 3行目 3 /10(背景灰)/0(背景赤)/0(背景赤)/10(背景青)/ 中略 145行目 145 /55(背景白)/0(背景白)/0(背景灰)/0(背景青)/ EOF 上記の場合だとセル2Dに誤った数値が入っていることを告知するようなものを考えています。 シート総数は140シートで、エラーが見つかった時点で検索を終わっても問題ありません。(最後にたどり着くまで修正、チェックを繰り返しますので)

  • エクセル印刷で上下の結合セルが別ページにならない方法?

    エクセル2000です。 一枚のシートに表が複数あります。 表中のセルはすべて数式が入っています。 A列は続き番号がふってあります。 B列~E列は上下のセルが結合しています。(2行分) F列は結合していません。 G列は上下の結合あります。(2行分) このような様式の表が、同一シートに1行あけて上から下へ続いています。 しかも、計算結果により表中の行が空白になる場合がよくあります。 その場合、は表中の空白行は非表示になるようにマクロで設定しています。 このシートを印刷した場合、2行を上下で結合したセルが、別ページに分かれてしまうことがよくあります。計算結果で表示がかわるので改ページを事前に入れておけません。 結合セルがページで分割されないようにするにはどうしたらよいでしょうか?

  • Excel VBAで結合セルに連番を振っていくには?

    Microsoft Excel 2003での質問です。 表を作成しました。 結合セルが複数ある1列に(セル数はまちまち・複数の列には非結合)、連番を振っていく作業をしています。 これをVBAを使って自動化したいのです。 列に連番がすでに入力されている最終行の下のセル(つまりこれから連番が入る空白セル)を選択、 範囲指定し(セル数はまちまちなのでこれは手作業)、 セルを結合させるまではできたのですが、 この結合させたセルに、[(一つ上の結合セル)+(1)]の値を入力させるにはどうプログラムしたらよいでしょうか? わかりにくい説明で恐縮ですが、どなたかご教示ください。

  • エクセル2002のVBAで、一グループごとにセルを追加する方法

    エクセル2002で、 A列のみにデータが入力されており、 一グループごとに上から順に並んでいます。 一グループの最初のセルの文字だけ赤色、 それ以外の文字は黒色です。 基本的に一グループごとに5行です。 ですが、中には一グループで3行になったり、4行になったりまちまちです。 例えば上から順に、 1つ目のグループの1番目(文字:赤色) 1つ目のグループの2番目 1つ目のグループの3番目 2つ目のグループの1番目(文字:赤色) 2つ目のグループの2番目 2つ目のグループの3番目 2つ目のグループの4番目 2つ目のグループの5番目 3つ目のグループの1番目(文字:赤色) 3つ目のグループの2番目 3つ目のグループの3番目 3つ目のグループの4番目 このように一グループの行数が3行になったり5行になったりしています。 一グループの最後の行のすぐ下に、次のグループのデーターが表示され、 対象となっているグループが変わっても、空白セルが挿入されることはなくA列にびっしりと入力されています。 この場合、 一グループの行数を6行以上にして、 一グループの行数が6行に足りない場合は最後のセルの下に6行になるまで空白セルを追加する方法があれば教えてください。 なお、私なりに試行錯誤した結果、 セルA2からセルA3までのセルの文字が赤色の場合に、赤字のセルの上に空白セルを追加するマクロを下記の通り作成するところまでは出来ました。 参考になるかもしれませんのでご覧下さい。 どうぞ宜しくお願い致します。 記 Sub Macro1() If Cells(3, 1).Font.ColorIndex = 3 Then Cells(3, 1).Select Selection.Insert Shift:=xlDown End If If Cells(2, 1).Font.ColorIndex = 3 Then Cells(2, 1).Select Selection.Insert Shift:=xlDown End If End Sub 以上

  • エクセルの結合したセル

    こんにちわ。 上下に結合したセルがAの列に並んでいます。A1、2で一つ、A2、3で一つというふうに。 そこに日付が入っています。 Bの列も同様にあり、そこには文字列が入っています。 それらを一つのセルにまとめたものを別のシートに作ろうと思いました。 文字列と日付なので&とTEXTを使い、うまくいったのですが、一番上を合わせて、下へスライドコピーしたらデータが飛び飛びになってしまいました。 結合した場合番地が上のセルの番地になります。A1,2なら番地はA1。 なのでA2には何も数値がないので、空白扱いとなってしまいました。 データ量が多いので、できればスライドさせて一気にやりたいのですが、なにかいい方法はありませんでしょうか? 難解な文章で申し訳ありません。。

  • エクセルVBAのコードの書き方を教えてください

    エクセルVBAの初心者です。 下記①-⑲のようなコードを書きたいのですが、どなたかお分かりになる方がいましたら、 ご教示いただけますと幸いです。 ① オートフィルターでシート[list]のA列に"●"がある特定の行だけを以下作業の対象にしたい ② ①で特定した行のE列セルの値を、シート[output]のB9セルにコピペする ③ ①で特定した行のF列セルの値を、シート[output]のB12セルにコピペする ④ ①で特定した行のG列セルの値を、シート[output]のB15セルにコピペする ⑤ ①で特定した行のH列セルの値を、シート[output]のB18セルにコピペする ⑥ ①で特定した行のI列セルの値を、シート[output]のB21セルにコピペする ⑦ ①で特定した行のJ列セルの値を、シート[output]のB24セルにコピペする ⑧ ①で特定した行のK列セルの値を、シート[output]のB27セルにコピペする ⑨ ①で特定した行のL列セルの値を、シート[output]のB30セルにコピペする ⑩ ①で特定した行のM列セルの値を、シート[output]のB33セルにコピペする ⑪ ①で特定した行のN列セルの値を、シート[output]のB36セルにコピペする ⑫ ①で特定した行のO列セルの値を、シート[output]のB39セルにコピペする ⑬ ①で特定した行のP列セルの値を、シート[output]のB42セルにコピペする ⑭ ①で特定した行のQ列セルの値を、シート[output]のB45セルにコピペする ⑮ ①で特定した行のR列セルの値を、シート[output]のB48セルにコピペする ⑯ ①で特定した行のS列セルの値を、シート[output]のB51セルにコピペする ⑰ ①で特定した行のT列セルの値を、シート[output]のB54セルにコピペする ⑱ ①で特定した行のU列セルの値を、シート[output]のB57セルにコピペする ⑲ シート[output]のB3:B59をテキストファイルを呼び出してコピペする ※このとき、上記②-⑱で記述したB9からB57のセルには改行が含まれる場合が  あるため、テキストファイルへのペースト時に""が表示されてしまうが、  もし可能であれば、この""が表示されないようにしたい。

  • Jtableの特定のセルの背景色や文字色について

    Jtable内部の特定のセルの背景色や文字色、フォントの変更に関して質問があります。25行30列のJtableの20行20列目のセルの背景色だけ赤色にしたい場合、具体的にどの様にプログラミングすれば良いでしょうか? サンプルソースなどを教えてくださるとありがたいです! javaに関して詳しい方、ぜひともお力を貸してください!

    • ベストアンサー
    • Java
  • (エクセルマクロ)複数の一連作業をマクロで行う処理について

    以下の一連の処理についてマクロのコードを一式で教えてください。 【エクセルの構成】 1.シート名 日付だけ都度変更する形式 (例:YYYYMM_教えてGoo) 2.表 列 AからAAまでデータあり 行 1行目はタイトル。2行目以降からデータ。 【処理手順】 1.表全体のフォントを「MS Pゴシック フォント9」にする。 2.1行目から11行目と13行目を削除 3.A列とD列削除 4.一行目の項目行にオートフィルタを設定 5.ウインドウ枠の固定(先頭行(一行目の項目行)の固定) 6.H列に文字が入ってる行のみ削除 7.E列とF列を昇順に並び替え(優先順位は(1)F列、(2)E列) 8.データの最終行の次の行のU列からZ列に表を入れる。 (例)5行目が最終データ行の場合  A…U V W X Y Z 1 ・ 5   6 A =SUM() 7 B 8 C     =SUM() (書式設定と詳細) セルU6 「文字列A」と入力し、背景は黄色、文字色は赤 セルV6 背景は黄色、文字色は赤 セルW6 背景は黄色、文字色は赤 セルX6 背景は黄色、文字色は赤 セルY6 背景は黄色、文字色は赤 セルZ6 数式入力(=SUM(Z$2:Z5(最終行))、背景は黄色、文字色は赤 セルU7 「文字列B」と入力し、背景は黄色、文字色は赤 セルV7 背景は黄色、文字色は赤 セルW7 背景は黄色、文字色は赤 セルX7 背景は黄色、文字色は赤 セルY7 背景は黄色、文字色は赤 セルZ7 背景は黄色、文字色は赤 セルU8 「文字列C」と入力し、背景は黄色、文字色は赤 セルV8 背景は黄色、文字色は赤 セルW8 背景は黄色、文字色は赤 セルX8 背景は黄色、文字色は赤 セルY8 背景は黄色、文字色は赤 セルZ8 数式入力(=SUM(Z6:Z7)、背景は黄色、文字色は赤 すべて掛け線なし 9.データ最終行(表も含む)から5行目全体をグレーにし、その行のA列に「データA」と入力。 10.I列に文字が入ってる行のみを切り取り、一番最後にデータが入ってる行から6行目(「データA」と入力した下の行から) から貼り付ける。(切り取った行は行削除し、上詰め) 11.データ最終行(切取貼り付けしたデータAを含む)から3行目全体を黄色にし、その行のA列に「データB」と入力。 12.X列の前に列を挿入し、挿入した列の一行目(項目行)に「タイトル」と記入。 13.挿入した列の2行目から前の列(W列)にデータが入ってる行まで数式(=ROUND(W2/1.05,0)※2行目に入力した場合)をコピー。 14.セルAB1に「No.」と記入。 15.G列からW列とY列からAA列を非表示にする。 6と8以降からマクロの自動記録ではできませんでした。 ご教授お願いします。

  • マクロ セルを自動的に結合したい

    A列~C列に文字がバラバラ入っています。(多くても50行辺りまで) 文字が入っているセルの下に空白がいくつが並んでいます。 次の文字があるまで文字+空白をまとめて結合したいのです。 力をお借りできないでしょうか? 宜しくお願いします。

専門家に質問してみよう