例えば。
sub macro1()
dim i
dim j
for i = 1 to 54
if worksheets("Sheet" & i).range("AJ7") > 0 then
j = j + 1
worksheets("仮に週払一覧").range("A1:J1").offset(j, 0).value = _
worksheets("Sheet" & i).range("AB3:AK3").value
end if
next i
end sub
#ところで
>全部で、今の所sheet1~sheet54まで計54枚あるのですが
あなたはご相談で「全角の英数字」でsheet1などと書いていますが,それが事実なのでしょうか。
教わったマクロを「コピーして走らせるしかできない」と,そういった細かい間違いでお互いの手間暇が無駄になるばかりなので,情報提供は正確に。
>関数では無理でしょうか
たとえばまとめのB列に
Sheet1
と書いて下向けに54までオートフィルドラッグしておき
C列に
=INDIRECT(B2&"!AJ7")
と書いて下向けにコピー
D列に
=INDIRECT(B2&"!R3C[24]",FALSE)
と書いて右に計10個,下に54個コピーしておき,
C列にオートフィルタを付けてゼロより大きいで絞ってやれば,欲しい一覧の体裁です。
#あとは趣味で。
A列に更に関数を付けてC列がゼロより大きい行だけに連番を付けておき,その番号を手がかりにO列より右とかに連番の行だけVLOOKUPとかで取り出し直せば,上下の詰まった表を計算だけで並べさせる事も出来ます。
A2:
=IF(C2>0,COUNTIF($C$2:C2,">0"),"")
とかなんとか。
Sub test()
Dim Sh As Worksheet
For Each Sh In Worksheets
If Sh.Name <> "週払一覧" Then
With Worksheets("週払一覧")
If Sh.Range("AJ7").Value > 0 Then
Sh.Range("AB3:AK8").Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1)
End If
End With
End If
Next Sh
Set Sh = Nothing
End Sub
各シートのAB8に必ず何かが記入されていることが前提です。
お礼
回答ありがとうございます。 言われるとうりです。 質問の仕方がわるいですね。 スミマセン 教えていただいた とうりに書きましたら 上手く動きました。 ありがとうございました。