excel中带双条件的For/While循环

excel中带双条件的For/While循环,excel,vba,for-loop,if-statement,while-loop,Excel,Vba,For Loop,If Statement,While Loop,我有一个与日期间隔和货币转换相关的列表。见下例: Start Date Close Date EUR 30/03/2013 26/04/2013 1.18 30/03/2013 26/04/2013 1.18 27/04/2013 24/05/2013 1.19 25/05/2013 28/06/2013 1.17 29/06/2013 26/07/2013 1.17 27/07/2013 23/08/2013 1.16 24/08/2013 27/09/2013

我有一个与日期间隔和货币转换相关的列表。见下例:

Start Date  Close Date  EUR
30/03/2013  26/04/2013  1.18
30/03/2013  26/04/2013  1.18
27/04/2013  24/05/2013  1.19
25/05/2013  28/06/2013  1.17
29/06/2013  26/07/2013  1.17
27/07/2013  23/08/2013  1.16
24/08/2013  27/09/2013  1.16 
28/09/2013  25/10/2013  1.19
26/10/2013  22/11/2013  1.17
23/11/2013  27/12/2013  1.2
28/12/2013  24/01/2014  1.2
05/01/2014  21/02/2014  1.21
22/02/2014  28/03/2014  1.21
29/03/2014  25/04/2014  1.21
26/04/2014  23/05/2014  1.21
04/05/2014  27/06/2014  1.24
08/06/2014  25/07/2014  1.25
26/07/2014  22/08/2014  1.26
23/08/2014  25/09/2014  1.25
26/09/2014  23/10/2014  1.28
我需要将每个日期间隔转换为单行,包括间隔内所有可能的日期,并保持各自的转换率。因此,第一个日期间隔为:

30/03/2013  1.18
31/03/2013  1.18
01/04/2013  1.18
02/04/2013  1.18
03/04/2013  1.18
04/04/2013  1.18
05/04/2013  1.18
06/04/2013  1.18
07/04/2013  1.18
08/04/2013  1.18
09/04/2013  1.18
10/04/2013  1.18
11/04/2013  1.18
12/04/2013  1.18
13/04/2013  1.18
14/04/2013  1.18
15/04/2013  1.18
16/04/2013  1.18
17/04/2013  1.18
18/04/2013  1.18
19/04/2013  1.18
20/04/2013  1.18
21/04/2013  1.18
22/04/2013  1.18
23/04/2013  1.18
24/04/2013  1.18
25/04/2013  1.18
26/04/2013  1.18
对于所有日期范围,是否都有这样简单的方法?我在excel中提出了如下内容:

=IF(和(A1>='Sheet1'!$A$1,A1像这样

Option Explicit

Sub GenerateAllInfo()

    Dim inputArr()
    inputArr = Worksheets("Sheet1").Range("A2:C21").Value 'Exludes header

    Dim i As Long, y As Long, rowCounter As Long
    Application.ScreenUpdating = False

    For i = LBound(inputArr, 1) To UBound(inputArr, 1)
        For y = inputArr(i, 1) To inputArr(i, 2)
            rowCounter = rowCounter + 1
            With Worksheets("Sheet2")
                .Cells(rowCounter, 1) = y
                .Cells(rowCounter, 2) = inputArr(i, 3)
            End With
        Next y
    Next i
    ActiveSheet Columns("A:A").NumberFormat = "dd/mm/yyyy"
    Application.ScreenUpdating = True
End Sub
也就是说,如果日期数量太大,转置无法处理,则可以使用数组完成整个操作,并直接写入工作表:

 Option Explicit

Sub GenerateAllInfo()

    Dim inputArr()
    inputArr = Worksheets("Sheet1").Range("A2:C21").Value 'Exludes header. 
    Dim outputArr
    ReDim outputArr(1 To 2000, 1 To 2)

    Dim i As Long, y As Long, rowCounter As Long
    Application.ScreenUpdating = False

    For i = LBound(inputArr, 1) To UBound(inputArr, 1)
        For y = inputArr(i, 1) To inputArr(i, 2)
            rowCounter = rowCounter + 1
            outputArr(rowCounter, 1) = y
            outputArr(rowCounter, 2) = inputArr(i, 3)
        Next y
    Next i

    outputArr = Application.WorksheetFunction.Transpose(outputArr)

    ReDim Preserve outputArr(1 To 2, 1 To rowCounter)
    outputArr = Application.WorksheetFunction.Transpose(outputArr)

    With Worksheets("Sheet2")
        .Range("A2").Resize(UBound(outputArr, 1), UBound(outputArr, 2)).Value = outputArr
        .Columns("A:A").NumberFormat = "dd/mm/yyyy"
    End With

    Application.ScreenUpdating = True
End Sub

两个代码中的小更改

活动表列(“A:A”).NumberFormat=“m/d/yyyy”


ActiveSheet.Columns(“A:A”).NumberFormat=“m/d/yyyy”

你好,可能是,我对VBA了解不够了:p它太长了。我看到了循环的双精度,所以它是这样的。我已将代码添加到sheet1,将日期格式更改为“dd/mm/yyyy”但无法找到激活和填写工作表2的方法。它是否应自动创建另一个工作表并填写值?我选择它以添加新工作表并在那里填写。您希望它在工作表2中的何处?代码位于标准模块中,而不在工作表代码窗格中。我已根据您的注释更新了两个版本。这应该是对n QHarr的答案。我尝试了两种方法进行更正,但都没有填入值。我是否应该期望当我添加另一张表时,这些值会填入A列?我很抱歉,由于缺乏声誉,我无法发表评论。在我获得必要的声誉之前,我不会进行任何更改。问候。@antoniogouveia代码w我将自己创建一个新工作表并填写值。请确保将代码粘贴到模块中。还有一件事,如果我现在想将代码应用到我的整个数据集,我需要做哪些更改?我有68行5列,不同的68个日期范围有不同的货币转换。