数据提取到另一个工作表不正确

时间:2019-10-07 09:09:44

标签: excel vba

我有一个“数据”工作表,其中包含大量数据。它有17列A-Q,G列中的日期是dd / mm / yyyy。我有一个单独的工作表,称为“ NoEntry”,在这里,我希望用户输入日期(L15的开始日期和L16的结束日期),并单击按钮,然后单击开始和结束之间的所有数据。结束日期将进入另一个名为“ DateData”的工作表。

我下面的代码有一定的用处。问题是由于某种原因传输的数据不正确。首先,并非所有数据都保持在边界之内-有些数据被复制为“开始日期”之前的日期。另一件事是,数据中有空白记录(A-F有数据,而往后是空白),即使没有日期,其中的一些记录也会被复制。

我觉得它不是在所有记录中正确循环,或者是格式问题。也许有一种方法可以在复制之前将所有日期列转换为特定格式-必须为dd / mm / yyyy。或者只是我想念的东西?

从测试来看,似乎只有一条记录在开始日期之前通过,但空白数据仍在使用的日期(2019年9月16日至2019年10月10日)被复制

>

任何帮助将不胜感激,

谢谢:)

Private Sub CommandButton2_Click()

Application.ScreenUpdating = False

Dim wsData As Worksheet, wsDate As Worksheet, wsNoEntry As Worksheet
Dim dSDate As Date, dEDate As Date
Dim lRowStart As Long, lRowEnd As Long
Dim aData() As Variant
Dim i As Long


'set the worksheet objects
Set wsData = ThisWorkbook.Sheets("Data")
Set wsDate = ThisWorkbook.Sheets("DateData")
Set wsNoEntry = ThisWorkbook.Sheets("NoEntry")

'required variables
dSDate = wsNoEntry.Range("L15").Value
dEDate = wsNoEntry.Range("L16").Value

'set the array - you can make this dynamic!
aData = wsData.Range("A1:Z1000").Value

'for loop to find start
For i = 1 To 1000
    If aData(i, 7) = dSDate Then
        lRowStart = i
        Debug.Print "Start row = " & lRowStart
        Exit For
    End If
Next i

'now loop backwards to find end date
For i = 1000 To 1 Step -1
    If aData(i, 7) = dEDate Then
        lRowEnd = i
        Debug.Print "End row = " & lRowEnd
        Exit For
    End If
Next i

'now we have start and end dates
'going to use copy/ paste for simplicity
wsData.Range("A" & lRowStart, "Z" & lRowEnd).Copy
'paste in date sheet
wsDate.Range("A1").PasteSpecial Paste:=xlPasteValues
'clear clipboard
Application.CutCopyMode = False

Application.ScreenUpdating = True


End Sub

Input

Output - blacked out due to private information (G5 date shouldn't be there and you can see blanks

0 个答案:

没有答案