[[20170608122343]] 『元データから転記先データへ2行空けながら最終行』(ゆぅー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『元データから転記先データへ2行空けながら最終行までコピーしたい』(ゆぅー)

コピー転記のマクロを教えてください。

 元データには、「B3セル〜J3」までデータが入っています。
 データ数は、300件

 転記先シートには、1行転記したら2行空けて元データの「B4〜J4」を
 転記していきたいです。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 1)転記先シートの何列・何行から元データを移していけばいいですか?
 2)元データを転記したら、データは消しますか? それとも、転記済マークでもつけますか?
(稲葉) 2017/06/08(木) 12:49

稲葉様

転記先シートは、「C4〜K4」まで、でした。
元データは、消したくないので転記済マークが良いです。
宜しくお願いいたします。
(ゆぅー) 2017/06/08(木) 13:05


 このような形でいかがでしょう?
 転記済マークの指定がなかったので、元データのB列が赤くなっているところは済としました。
  2行おき は Offset(3) を指しています。 3行おきなら Offset(4)にしてください。
  B3〜J3  は Resize(,9) を指しています。 範囲がKまで広がるなら、Resize(,10)等適宜変更してください。
  データ数300件 は 動的に末端を探しています。
  手作業で行う場合、元データシートのB列の一番最後の行から、Ctrl+↑を押したセルまで繰り替えす、という処理です。
  Cells(Rows.Count, "B").End(xlUp) のコードがそれに当たります。

 その他わからないことがあれば聞いてください。

    Sub yuxu()
        Dim n As Long
        Dim WS1 As Worksheet
        Dim WS2 As Worksheet
        Dim r1  As Range
        Dim r2  As Range
        Set WS1 = Sheets("sheet1") '元データシート名を入れる
        Set WS2 = Sheets("sheet2") '転記先シート名を入れる
        For n = 3 To WS1.Cells(Rows.Count, "B").End(xlUp).Row
            Set r1 = WS1.Cells(n, "B")
            Set r2 = WS2.Cells(Rows.Count, "C").End(xlUp)
            If r1.Interior.Color <> vbRed Then
                r2.Offset(3).Resize(, 9).Value = r1.Resize(, 9).Value
                r1.Interior.Color = vbRed
            End If
        Next n
    End Sub

(稲葉) 2017/06/08(木) 13:45


 For n = 3 To WS1.Cells(Rows.Count, "B").End(xlUp).Row
            Set r1 = WS1.Cells(n, "B")
            Set r2 = WS2.Cells(Rows.Count, "C").End(xlUp)
 の、「r2」の所で、常に「セット」を読みに行くので「r2」に入っているものが
 「C3」セルのままになりその結果「C6」セルへ上書きされ元データはどんどん転記済
 となってしまいます。
 Set〜を、Forの前に持っていくとエラーします。
(ゆぅー) 2017/06/08(木) 14:57

 こちらでは再現できません。
 テスト環境を提示しますので、違いをご説明ください。

 元データ
     |[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]
 [1] |   |   |   |   |   |   |   |   |   |   |   
 [2] |   |   |   |   |   |   |   |   |   |   |   
 [3] |   |  1|  1|  1|  1|  1|  1|  1|  1|  1|   
 [4] |   |  2|  2|  2|  2|  2|  2|  2|  2|  2|   
 [5] |   |  3|  3|  3|  3|  3|  3|  3|  3|  3|   
 [6] |   |  4|  4|  4|  4|  4|  4|  4|  4|  4|   
 [7] |   |  5|  5|  5|  5|  5|  5|  5|  5|  5|   
 [8] |   |  6|  6|  6|  6|  6|  6|  6|  6|  6|   
 [9] |   |  7|  7|  7|  7|  7|  7|  7|  7|  7|   
 [10]|   |  8|  8|  8|  8|  8|  8|  8|  8|  8|   
 [11]|   |  9|  9|  9|  9|  9|  9|  9|  9|  9|   

 転記シート
     |[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]|[L]
 [1] |   |   |   |   |   |   |   |   |   |   |   |   
 [2] |   |   |   |   |   |   |   |   |   |   |   |   
 [3] |   |   |   |   |   |   |   |   |   |   |   |   
 [4] |   |   |  1|  1|  1|  1|  1|  1|  1|  1|  1|   
 [5] |   |   |   |   |   |   |   |   |   |   |   |   
 [6] |   |   |   |   |   |   |   |   |   |   |   |   
 [7] |   |   |  2|  2|  2|  2|  2|  2|  2|  2|  2|   
 [8] |   |   |   |   |   |   |   |   |   |   |   |   
 [9] |   |   |   |   |   |   |   |   |   |   |   |   
 [10]|   |   |  3|  3|  3|  3|  3|  3|  3|  3|  3|   
 [11]|   |   |   |   |   |   |   |   |   |   |   |   
 [12]|   |   |   |   |   |   |   |   |   |   |   |   
 [13]|   |   |  4|  4|  4|  4|  4|  4|  4|  4|  4|   
(稲葉) 2017/06/08(木) 15:25

 稲葉様
 
ありがとうございます。

 元データ
     |[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]
 [1] |   |   |   |   |   |   |   |   |   |   |   
 [2] |   |   |   |   |   |   |   |   |   |   |   
 [3] |   |  1|   |   
 [4] |   |   |  2|   |   
 [5] |   |   |   |  3|     
 [6] |   |   |   |   |  4|      
 [7] |   |   |   |   |   |  5|   |   
 [8] |   |   |   |  6|   |   
 [9] |   |   |   |   |  7|   |   
 [10]|   |   |   |   |   |  8|   |   
 [11]|   |   |  9|   |   

 元データが、こんな感じです。
 全てに、データが入ってるか入ってないかで動作は変わるのでしょうか?
(ゆぅー) 2017/06/09(金) 09:38

 変わります。
 (稲葉) 2017/06/08(木) 13:45の投稿で
 >手作業で行う場合、元データシートのB列の一番最後の行から、Ctrl+↑を押したセルまで繰り替えす、という処理です。
 と説明しました。
 試していただけましたか?

 元データシートはデータ以外に何か入力されていますか?
 特にデータの最終行より後ろに。
 データ範囲を調べるために必要な情報です。

(稲葉) 2017/06/09(金) 10:43


 暫定で修正あげておきます。
    Sub yuxu()
        Dim n   As Long
        Dim j   As Long
        Dim r   As Range
        Dim WS1 As Worksheet
        Dim WS2 As Worksheet
        Dim r1  As Range
        Dim r2  As Range
        Set WS1 = Sheets("sheet1") '元データシート名を入れる
        Set WS2 = Sheets("sheet2") '転記先シート名を入れる
        Set r = WS2.Cells.Find(What:="*", SearchDirection:=xlPrevious)
        If r Is Nothing Then
            j = 4
        Else
            j = r.Row + 3
        End If
        For n = 3 To WS1.Cells.Find(What:="*", SearchDirection:=xlPrevious).Row
            Set r1 = WS1.Cells(n, "B")
            Set r2 = WS2.Cells(j, "C")
            If r1.Interior.Color <> vbRed Then
                r2.Offset(3).Resize(, 9).Value = r1.Resize(, 9).Value
                r1.Interior.Color = vbRed
                j = j + 3
            End If
        Next n
    End Sub
(稲葉) 2017/06/09(金) 11:46

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.