Excel VBA计数单元格,直到找到日期

时间:2014-02-24 12:08:18

标签: excel excel-vba sorting count vba

我从.pdf中的表中复制了大量数据,当粘贴到excel中时,将其全部放入一列。实际上有多个页面,每个页面都有自己的表格(数据是一个连续的长表格,更准确地分割在多个页面上),每页的顶部是一系列我不感兴趣的行(相同的不需要的数据是在每页的顶部)。我感兴趣的是在原始.pdf文档的表格中重新排序标题下的数据,删除过程中的标题。粘贴到一列中的数据本质上是x行的纯文本项列表,后面是x行的开始日期列表,然后是每行重复的x行的结束日期列表。 / p>

我已经想出如何通过从单元格(B2)开始寻找我感兴趣的第一段数据(“AAAA”)来计算我不想要的行数; < / p>

Cells(2, 2).Select

    For i = 1 To 50
    If ActiveCell = "AAAA" Then
        Exit For
    End If

ActiveCell.Offset(1, 0).Select
Next i

Cells(2, 3) = i

    If i = 51 Then
        Range("B3") = "Cannot find data"
    End If

从单元格(B2)开始向下搜索,直到找到“AAAA”,然后打印向下移动的行数,以便在单元格(C2)中找到它。

我现在希望能够从刚刚找到的单元格开始[在这种情况下为(B34)]并向下计数,直到找到包含日期的第一个单元格。

最终,我需要倒计时相同数量的单元格才能找到相关的结束日期,并将它们全部打印在一行中,继续输入整列数据。

如果有人可以帮助我从第一个单元格“AAAA”开始,然后向下计数直到找到日期,那将非常有帮助。

2 个答案:

答案 0 :(得分:0)

以下代码段在单元格A1中开始并向下搜索,直到找到包含日期值的单元格。代码仅搜索到第一列中的最后一条记录(如果没有找到日期,则避免一直搜索到表格的底部)。

Sub FindFirstDate()
    Dim i As Long

    For i = 1 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
        If IsDate(ActiveSheet.Cells(i, 1).Value) = True Then Exit For
    Next i
    MsgBox "The first cell with a date is " & ActiveSheet.Cells(i, 1).Address
End Sub

在此示例中,MsgBox中返回第一个日期的单元格的地址。

答案 1 :(得分:0)

我最大的挑战是了解你想成为什么样的人。我试着列出你想要的东西。

  1. 你有一个PDF,当粘贴到Excel时它会转换所有 一栏中的文件。
  2. 您要删除的每个Excel页面都有一个标题。
  3. 找到标题后,您要查找两个日期,并且它们与标题的距离相同。
  4. 我该怎么做:

    For iCounter = 1 to Cells(1048576, 1).End(xlUp).Row
      If Cells(iCounter,1) = "YOUR HEADER HERE" then
        For kCounter = iCounter to Cells(1048576, 1).End(xlUp).Row
           If IsDate(Cells(kCounter,1)) = true then
               initialDate = Cells(kCounter,1)
               endDate = Cells(2*kCounter-iCounter,1)
           End if
        Next kCounter
      End if
    Next iCounter