• 締切済み

VBマクロ 色の付いたセルを含む行をコピーしたい。

VB初心者です。 こちらでご指導頂きながら勉強しております。 今回もどなたかご教授お願い致します。 G列~R列内の色の付いたセルを含む行を 次のシートにコピーしたいのですが… マクロを組んで実行したいと思っております。 どなたかアドバイス宜しくお願い致します。

みんなの回答

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

Sub test01() For Each cl In Range("g:I") MsgBox cl.Address Next End Sub 実行すると、範囲内の全セルを横向きに処理することがわかる。 色つきのセルが見つかった段階で次の行の探索に移るコードがやや 面倒。 それであれば色つきのセルが見つかった段階で行をコピーし貼り付け しループを抜ける(Exit For)ほうが簡単な書き方になるので、下記がよかろう ーー 質問例はG列~R列だがG-I列に変えた。なるべくA列に近い例にせよ。 >G列~R列内 下辺行というものが有るだろう。列指定でなく範囲指定のほうが具体的。それで10行目までの例にした。プログラムで最終行を探す手も有るが。 コピー先の列が質問に書いてない。同じ列からとしたが、質問には心配りせよ。 以上は下記のコードを、質問者の要修正点でもある。 多分1番コード行数が少ないのではないかな。 ーーーー Sub test02() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") For i = 1 To 10 For j = 7 To 9 'G-I列の例 If sh1.Cells(i, j).Interior.ColorIndex <> xlNone Then MsgBox sh1.Cells(i, j).Address d = sh2.Range("i65536").End(xlUp).Row sh1.Range("G" & i & ":I" & i).Copy sh2.Cells(d + 1, 7) 'I列から Exit For End If Next j Next i End Sub

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

例えば、 データシートが、Sheet1 転記のシートが、Sheet2 というようにシート名が決まっている場合のコードは書けるのでしょうか。 もし、それも書けないということであれば、 >次のシートにコピーしたい これは次の段階のような気もしますが。。。 (別に難しいと言ってるわけではありませんが) ま、それは置いといて、 質問の文言どおりに アクティブシートのG~R列で色付きセルがあったら その行を アクティブシートの「次の」シートへコピーする場合 '------------------------------------------  Sub test()  Dim R As Long  Dim Clm As Long  Dim Cnt As Long  Dim NextSheet As Worksheet  Set NextSheet = Worksheets(ActiveSheet.Index + 1)  NextSheet.Cells.Clear  For R = 1 To Cells(Rows.Count, "G").End(xlUp).Row    For Clm = 7 To 18      If Cells(R, Clm).Interior.ColorIndex <> xlNone Then        Cnt = Cnt + 1        Rows(R).Copy NextSheet.Cells(Cnt, "A")        Exit For      End If    Next Clm  Next R End Sub '--------------------------------------------- なお、G列で最終行を取得していますので データの最終行のG列には何らかのデータがないといけません。 以上、ここまで。  

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

単純に1行ずつ処理をするものを、ループさせればできると思います。 おおむねこんな感じ(他にも方法はあると思います) 1)準備として、「次のシート」へ記録する行のインデックス変数(あるいは  Rangeでもよい)を用意しておきます。 2)対象範囲を確定するために、G~R列の(データの入っている)最大行  を取得する。(1行目?からこの行まで処理をすればよいことになる。) 3)これ以降について(3~5)↑で取得した行までループで繰り返す  対象とする1行で、G~R列までの各セルに色がついているか調べる。 4)色がついていたら  その行を、「次のシート」のインデックス変数が示す行へコピーし、  インデックス変数を1進めておく。(次にペーストする行を示すため) 5)色がついていない場合は、何もせずに次の行へ

関連するQ&A