搜索日期并复制并粘贴整行:VBA

Posted

技术标签:

【中文标题】搜索日期并复制并粘贴整行:VBA【英文标题】:Search for Date and copy and Paste Whole Row: VBA 【发布时间】:2019-03-13 13:54:20 【问题描述】:

我是 VBA 新手,我不确定如何完成以下任务。

我想询问用户一个日期范围,然后获取该日期范围并在“源表”的 BB 列中搜索该范围内的任何日期。如果日期在该范围内,我想获取整行并复制它,然后将其粘贴到另一个名为“Dest Sheet”的工作表中

任何帮助表示赞赏!我尝试了许多不同的方法来做到这一点,但我所做的一切都没有奏效。这是我目前拥有的

Dim N As Integer
Dim i As Integer
Dim StartDate As Date
Dim EndDate As Date

N = Cells(Rows.Count, "E").End(xlUp).Row    'determines the last row with data in it
                                              'uses column E because E should never be Null if not after last active row

Dim j As Integer 'declares j for indexing of the rows on the target spreadsheet
j = 2

Dim fRow As Long                                    'is the role of j in an attempt to copy and paste
fRow = Sheets("Dest Sheet").UsedRange.Rows.Count         'defines the variable

For i = 2 To N          'indexes 2 to N to begin with row after the title row to the last active ro
Cells(i, "BB").Select
    If Cells(i, "BB").Value <> "" Then

    Columns("BB").Select
    Selection.NumberFormat = "mm/dd/yyyy"

    Range("BB2").End(xlDown).Select

    StartDate = Application.InputBox("Enter the start date")
    EndDate = Application.InputBox("Enter the end date")

    'in row i execute the if statement

        If ("BB" >= StartDate & "BB" <= EndDate) Then

         Sheets("Source Sheet").Cells(i, 1).EntireRow.Copy Destination:=Sheets("Dest Sheet").Cells(fRow, 1).Offset(1, 0)
         fRow = fRow + 1

        End If

 End If  'declares end of the if statements

Next i

End Sub

【问题讨论】:

阅读高级排序 - 这将使这个 vba 变得更好。您甚至可以使用它记录自己,并从那里作为基地 另外,最好avoid using .Select/.Activate 是否需要格式化并询问循环的每次迭代的开始日期和结束日期? 我看到的一件事是,您正在将一个日期(Excel 将其视为一个数字)与用户输入的日期的字符串(文本)版本进行比较。 有没有办法强制用户输入作为日期而不是字符串输入? 【参考方案1】:

我认为下面的代码可能是您正在寻找的。​​p>

但是,变量“j”的用途是什么?此外,BB 列中的值是否未格式化为日期?我不确定执行 Selection.NumberFormat = "mm/dd/yyyy" 的行的用途

Dim wb As Workbook
Dim wsSrc As Worksheet
Dim wsDest As Worksheet
Dim n As Long
Dim i As Long
Dim fRow As Long
Dim startDate As Date
Dim endDate As Date

Set wb = ActiveWorkbook
Set wsSrc = wb.Sheets("Source Sheet")
Set wsDest = wb.Sheets("Dest Sheet")

n = wsSrc.Range("E:E").Find(what:="*", searchdirection:=xlPrevious).Row
startDate = Application.InputBox("Enter the start date")
endDate = Application.InputBox("Enter the end date")

For i = 2 To n

    If wsSrc.Range("BB" & i).Value >= startDate And wsSrc.Range("BB" & i).Value <= endDate Then

        fRow = wsDest.Range("A:A").Find(what:="").Row
        wsSrc.Range("BB" & i).EntireRow.Copy wsDest.Cells(fRow, 1)

    End If

Next

【讨论】:

嘿蒂姆 j 是我以前用作索引变量的东西,它应该被删除了! 就您的版本而言,一切看起来都不错,直到它达到 n。当我到达 n 时,我收到“对象变量或未设置块”的运行时错误。对此有何意见? 它可能没有找到 E 列中填充的任何值。看起来您正在使用 E 列来确定工作表中的总行数。这是你打算做的吗? 为了看看它在没有 n 的情况下如何运行,我将 n 赋值行注释掉,并让循环从 2 运行到 100 只是为了尝试它,当我这样做时,if 语句出现错误“需要对象” 是的! E 是正确的列。我重组以测试一些东西,并没有意识到它让 E 空了。现在我只需要运行 if 语句

以上是关于搜索日期并复制并粘贴整行:VBA的主要内容,如果未能解决你的问题,请参考以下文章

在字符串中搜索文本,将行复制并粘贴到新工作表

Excel VBA遍历列以将非空白复制并粘贴到其他3列?

在 VBA 中使用数组复制和粘贴

VBA自动过滤复制值,去重并粘贴到其他工作表中

VBA复制最后一行范围并粘贴到另一个工作表

Excel VBA - 复制图表并粘贴为增强的图元文件