[[20160210123102]] 『vbaでのコピペについて2』(らむ) ページの最後に飛ぶ

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

 

『vbaでのコピペについて2』(らむ)

前回『範囲の決まったコピペ』について教えていただきました。

再度つまづいておりまして、お知恵を貸して下さい。

シート1のB列からAF列まで3行ごと、5行おきに
データがあります。
※具体的にはB2からAF4までデータがあり、
B5からAF9まで空白というように、
B2から3行分はデータあり、その後5行は空白
というデータがつづいてます。

ひとまず、データのある行は下記コードでとれるかと
思うのですが、
その後、B列からAF列まで3行ごと、5行おきに
コピーし、シート2のCの2に値のみ貼り付けたい場合、
どの様にしたらいいでしょう??

シート2のA列にはA2から氏名が1人につき31行分並んでおり、
シート2のA2からの1人目31行分が、シート1のB2からAF4まで、
シート2の2人目がシート1のB10からAF12〜、、、
とそれぞれ対応してます。

Dim i As Long

With Worksheets("シート1")
i= .Range(Cells(2, 2), .Cells(Rows.Count, 32).End(xlUp)).Value '「シート1」B2〜AF列最終行まで取得
End With

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


 丸ごと、値を代入すればいいんじゃないですか?

 Sub valShift()
     Dim rngToShift As Range
     With Worksheets("シート1")
          Set rngToShift = .Range("B2", .Cells(.Rows.Count, 32).End(xlUp))
     End With

     Worksheets("シート2").Range(rngToShift.Address).Offset(, 1).Value = rngToShift.Value
 End Sub

(半平太) 2016/02/10(水) 16:35


 もしかして、シート2の方は3行の下に何かデータとか数式とか入っているんでしょうか?

(半平太) 2016/02/10(水) 16:37


 こんなことでしょうか?

 Sub Sample()
    Dim shF As Worksheet
    Dim shT As Worksheet
    Dim i As Long
    Dim z As Long
    Dim x As Long

    Set shF = Sheets("Sheet1")
    Set shT = Sheets("Sheet2")

    z = shF.Range("B" & Rows.Count).End(xlUp).Row   'Sheet1最終行番号
    x = 2                                           'Sheet2転記開始行番号

    For i = 2 To z Step 8
        shT.Cells(x, "C").Resize(31, 3).Value = WorksheetFunction.Transpose(shF.Range("B" & i & ":AF" & i + 2))
        x = x + 31
    Next

 End Sub

(β) 2016/02/10(水) 20:53


β様

まさにその通りです!!
3行ごと、5行おきに、、、で思考停止してましたが、
For以下のコードを見て、脱帽致しました!
本当にありがとうございます!
もっと勉強致します。

半平太様
ご協力ありがとうございました!

(らむ) 2016/02/10(水) 23:31


コメント返信:

[ 一覧(最新更新順) ]


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