2の回答者です。
私の問いに関しては、質問者さんは、完全無視のままのようですが、このままでは格好がつかないので、分かっている範囲で回答して置きます。私は、質問中途で質問が変わるご質問には、基本的には回答しない建前としていますし、ご質問者さんが、画像をアップしているのを知らなかったので、回答がちぐはぐになってしまったことは否定出来ません。今回、初めての質問のようでしたが、レスをつけようがつけまいが構いませんが、そのままにせずに、締めるようにしてください。
あえて、配列変数を使う理由などはありませんが、配列を生かすように作ってみました。コピー元の場所変更は可能ですが、書くときは、順序として隣り合ったセルの場合、必ず、コロン(:)でつなぐのがコツです。
'-------------------------------------------
Sub TransferTest1()
Dim myData(6) As Variant
Dim rng As Range
Dim c As Variant
Dim i As Long, j As Long, k As Long
'最初のrng の部分を決めてくれれば良いです。ただし、隣り合うセルは、{:}でつなぎます。
Set rng = Worksheets("Sheet1").Range("B11:B12,D11:G11,F12")
For j = 0 To Cells(Rows.Count, 2).End(xlUp).Row Step 4 '4行置き
i = 0
For Each c In rng.Offset(j).Cells
myData(i) = c.Value
i = i + 1
Next c
Worksheets("Sheet2").Range("D2").Offset(k).Resize(, 7).Value = myData()
Erase myData()
k = k + 1
Next j
Set rng = Nothing
End Sub
質問者
お礼
一応、下記のようにして使用できそうです。
処理の早さはさすがに早かったです。
RIGHTBやLEFTBもチャレンジしてみたいとおもいます。
Sub TransferTest1_ST()
Dim n As Long
Dim myData(24) As Variant 'myDataも24
Dim rng As Range
Dim c As Variant
Dim i As Long, j As Long, k As Long
'最初のrng の部分を決めてくれれば良いです。ただし、隣り合うセルは、{:}でつなぎます。
Set rng = Worksheets("Sheet1").Range("A5,A5,B5,B6,D5,E5,F5,F7,G5,G7,H5,H7,L5,L7,M5,N5,O5,P5,Q5,S5,S6,S7,S8,T6")
'myDataもResizeも24にする↑24個あるから
For j = 0 To Cells(Rows.Count, 2).End(xlUp).Row Step 4 '4行置き
i = 0
For Each c In rng.Offset(j).Cells
myData(i) = c.Value
i = i + 1
Next c
Worksheets("Sheet2").Range("B2").Offset(k).Resize(, 24).Value = myData() 'Resizeも24
Erase myData()
k = k + 1
Next j
Set rng = Nothing
End Sub
貼り付けるシート名がどう言う規則になっているのか判りませんでしたので、とりあえずSheet2~Sheet10までを対象としたサンプルを提示します。
あまり良いコードでは有りませんが、勉強の取っ掛かりになれば幸いです。
データのコピー&ペースト部は質問に有ったマクロの一部だけを入れて居ます。
Sub Sample()
Dim sPasteSheet As String
Dim i
For i = 2 To 10 'Sheet2~Sheet10が対象の場合(ループ開始)
sPasteSheet = "Sheet" & i '貼り付け先シート名
Sheets("Sheet1").Select
Range("B14:C14").Select
Application.CutCopyMode = False
Selection.Copy
Sheets(sPasteSheet).Select '貼り付けシート選択
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= xlNone, SkipBlanks:=False, Transpose:=False
Next i '(ループ終了)
End Sub
お礼
一応、下記のようにして使用できそうです。 処理の早さはさすがに早かったです。 RIGHTBやLEFTBもチャレンジしてみたいとおもいます。 Sub TransferTest1_ST() Dim n As Long Dim myData(24) As Variant 'myDataも24 Dim rng As Range Dim c As Variant Dim i As Long, j As Long, k As Long '最初のrng の部分を決めてくれれば良いです。ただし、隣り合うセルは、{:}でつなぎます。 Set rng = Worksheets("Sheet1").Range("A5,A5,B5,B6,D5,E5,F5,F7,G5,G7,H5,H7,L5,L7,M5,N5,O5,P5,Q5,S5,S6,S7,S8,T6") 'myDataもResizeも24にする↑24個あるから For j = 0 To Cells(Rows.Count, 2).End(xlUp).Row Step 4 '4行置き i = 0 For Each c In rng.Offset(j).Cells myData(i) = c.Value i = i + 1 Next c Worksheets("Sheet2").Range("B2").Offset(k).Resize(, 24).Value = myData() 'Resizeも24 Erase myData() k = k + 1 Next j Set rng = Nothing End Sub
補足
ありがとうございます。 配列は苦手ですが、 処理時間は、早くなりそうな気がするので、 本当は、配列を使った方がよい気がします。 シンプルで短いソースがいいなぁと 作成していくうちに、思うようになりました。 時間はかかるかもしれませんが、 こちらも使って、作ってみたいとおもいます。 レスのつけ方が、いまいちですみません。