ja7awuさん、Thanks
hirosatonn さん、
c.Resize(, 6).Copy
として、6列を取得していますから、「A列のみしかコピー」されない、というのは、コードを見る限りでは、初歩的なコードですから、そのようなことは考えられません。何か、私の書いたコードを変更されたか、A列の右隣-B列移行が、隠し列になっているか、などだと思います。
ただし、念のために、加筆してみました。
Sub FindBlank1()
Dim Rng As Range
Dim i As Long
'Sheet2のフィールド行(名前,住所..)は、1行目にあるとします。
With Sheet1
.Activate
i = 2 '2行目から
Set Rng = .Range("A1", .Range("A65536").End(xlUp))
For Each c In Rng
If Application.CountA(c.Offset(, 2).Resize(, 4)) <> 4 Then
'A列から、A列を含めて6列取得し、Sheet2にコピー
c.Resize(, 6).Copy Sheet2.Cells(i, 1).Resize(, 6)
i = i + 1
End If
Next
End With
End Sub
Sub FildBlank2()
Dim Deliveries As Variant
Dim i As Long, j As Long
Dim DataRows As Long
Dim Result As String
'配列式に格納
Deliveries = Array("請求書", "納品書", "領収書", "到着確認書")
With Sheet2
'Sheet2 をオープン
.Activate
DataRows = Range("A2", Range("A65536").End(xlUp)).Rows.Count + 1
For i = 2 To DataRows '2行目から
For j = 3 To 6 '3列目~6列目
If .Cells(i, j).Value = "" Then '調べたセルの文字列0の長さだったら、
'配列より、取り出す
Result = Result & ";" & Deliveries(j - 3)
End If
Next j
If Result <> "" Then
'結果が空でないなら、H列に貼り付け
.Cells(i, 7).Offset(, 1).Value = Mid(Result, 2)
Result = ""
End If
Next i
End With
End Sub
Sheet3 の"E10" に出すのは、関数などで行ってください。
つまり、"E10" に、全て出すということはありえませんから、INDEX 関数などを使って、Sheet2 から、引き出すのが良いと思います。
=INDEX(Sheet2!A2:H17,H1,8)
H1 に、数字を入れます。
現実の問題として、1000件以上ですから、この後に、印刷という作業が加わるものだと思います。しかし、[教えて!goo]では、書き込みの際の物理的な制約もありますので、専門のExcel のVBAの掲示板なりでお尋ねになるか、goomaniaさんの#2 の内容を参考にしてください。ここら辺が限界です。
お礼
色々とありがとうございました。そしてすみませんでした。コードをちょっといじっていました。 関数を使って頑張ってみます。