2017-11-28 4 views
0

事前にお手伝いしていただきありがとうございます。私は一日だけでなく、月と年を気にします。各ループは動的セット内の最初の変数に対してのみ実行されます

Data Min Date Max Date 
a 4/10/1985 10/30/2012 
b 4/1/1996 11/1/2010 
c 4/1/1997 11/1/2010 
d 4/1/1998 11/1/2010 

と列Gにおける最大の日付に分から毎月自動入力、およびこのような列H中のDを介して関連するデータ列Aを移入:私は(大佐A、B、C)は、このデータを利用したいです。

(Col.H) (Col.G) 
a 4/10/1985 
a 5/10/1985 
a 6/10/1985 
a 7/10/1985 
a 8/10/1985 

だから、あなたは毎月のオートフィルのすべて、Cのオートフィル全てをBのすべてを自動入力し、それに先行するA、B、C、Dの値で、Dのすべてを自動入力します。

私のコードは今のように見えますが、それは他の3つのデータポイントではなく、aのためのオートフィルです。

Dim Summary As Worksheet 
Dim DataCell As Range 
Dim DataRange As Range 
Dim SummaryLastRow As Range 
Dim StartDate As Date 
Dim EndDate As Date 
Dim NoDays As Integer 

Set Summary = Worksheets("Summary") 
Set SummaryLastRow = Summary.Range("G" & Rows.Count).End(xlUp).Rows 
Set DataRange = Summary.Range(Summary.Range("A2"), Summary.Range("A" & Rows.Count).End(xlUp).Rows) 

On Error Resume Next 
    For Each DataCell In DataRange 
     StartDate = DataCell.Offset(0, 1).Value 
     EndDate = DataCell.Offset(0, 2).Value 
     NoDays = EndDate - StartDate + 1 
      If IsEmpty(SummaryLastRow.Offset(1, 0)) Then 
      SummaryLastRow.Offset(1, 0) = StartDate 
       SummaryLastRow.Offset(1, 0).Resize(NoDays).DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _ 
        xlMonth, Step:=1, Stop:=EndDate, Trend:=False 
        Range(SummaryLastRow.Offset(1, 0), SummaryLastRow.Offset(1, 0).End(xlDown)).Offset(0, -1).Value = DataCell 
      End If 
    Next DataCell 

ご協力いただければ幸いです!ありがとうございました!

+0

最初に「On Error Resume Next」を再度実行し、エラーがどこにあるかを教えてください。 –

+1

FWIW - Set SummaryLastRow = Summary.Range( "G"&Rows.Count).End(xlUp).Rows'のようなステートメントに '.Rows'を含めるのはなぜですか?単一のセルの 'Rows'プロパティは、あなたが始めた単一のセルを返すだけなので、それを使用するのは無意味です。 – YowE3K

+0

OPはそれらの '.Rows'を削除しなければならないと思うし、うまくいくはずです。 SummaryLastRowで起こりうる問題は、ループ内を決して移動しません。 'Set SummaryLastRow ='行をForループの中に移動します。 – PatricK

答えて

0

ループの最初の繰り返しを実行するとすぐに、SummaryLastRow.Offset(1, 0)Emptyでなくなり、他の繰り返しは何も行いません。

あなたはその下のセルが空になり、If文はその後、無意味になるというを知っので、あなたは、あなたのループ内SummaryLastRowを設定するステートメントを配置する必要があります。

Dim Summary As Worksheet 
Dim DataCell As Range 
Dim DataRange As Range 
Dim SummaryLastRow As Range 
Dim StartDate As Date 
Dim EndDate As Date 
Dim NoDays As Integer 

With Worksheets("Summary") 
    Set DataRange = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)) 

    For Each DataCell In DataRange 
     StartDate = DataCell.Offset(0, 1).Value 
     EndDate = DataCell.Offset(0, 2).Value 
     NoDays = EndDate - StartDate + 1 
     Set SummaryLastRow = .Range("G" & .Rows.Count).End(xlUp) 
     SummaryLastRow.Offset(1, 0) = StartDate 
     SummaryLastRow.Offset(1, 0).Resize(NoDays).DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _ 
        xlMonth, Step:=1, Stop:=EndDate, Trend:=False 
     Range(SummaryLastRow.Offset(1, 0), SummaryLastRow.Offset(1, 0).End(xlDown)).Offset(0, -1).Value = DataCell.Value 
    Next DataCell 
End With 
+0

こんにちはすべて、ありがとうございました!私はSummaryLastRowの後に.rowsを削除し、if文を削除してから、SummaryLastRowをFor Eachに追加して、完全に機能しました。 – user9022729

関連する問題