- 締切済み
VBマクロ 色の付いたセルを含む行をコピーしたい。
VB初心者です。 こちらでご指導頂きながら勉強しております。 今回もどなたかご教授お願い致します。 G列~R列内の色の付いたセルを含む行を 次のシートにコピーしたいのですが… マクロを組んで実行したいと思っております。 どなたかアドバイス宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17070)
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)
例えば、 データシートが、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)
単純に1行ずつ処理をするものを、ループさせればできると思います。 おおむねこんな感じ(他にも方法はあると思います) 1)準備として、「次のシート」へ記録する行のインデックス変数(あるいは Rangeでもよい)を用意しておきます。 2)対象範囲を確定するために、G~R列の(データの入っている)最大行 を取得する。(1行目?からこの行まで処理をすればよいことになる。) 3)これ以降について(3~5)↑で取得した行までループで繰り返す 対象とする1行で、G~R列までの各セルに色がついているか調べる。 4)色がついていたら その行を、「次のシート」のインデックス変数が示す行へコピーし、 インデックス変数を1進めておく。(次にペーストする行を示すため) 5)色がついていない場合は、何もせずに次の行へ