添加代码以比较日期,然后运行宏以匹配列

问题描述 投票:0回答:1

Sheet1全年积累了很多建议工作。 Sheet2会积累已完成的建议。 Sheet1上任何不匹配的行都需要跟进。重复项显示为第14行中的突出显示。由于第14行的工作发生在19年4月4日,因此该建议在该日期之前可能尚未完成。这是我用于MatchColums的代码;

Sub MatchColums()

Dim i, total, fRow As Integer
Dim found As Range

total = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To total
    answer1 = Worksheets(1).Range("C" & i).Value
 Set found = Worksheets(2).Columns("C:C").Find(what:=answer1) 'finds a match

If found Is Nothing Then
    Worksheets(1).Range("H" & i).Value = "NO MATCH"
Else
    fRow = Sheets(2).Columns("C:C").Find(what:=answer1).Row
    Worksheets(1).Range("I" & i).Value = Worksheets(2).Range("A" & fRow).Value
    Worksheets(1).Range("J" & i).Value = Worksheets(2).Range("B" & fRow).Value
    Worksheets(1).Range("K" & i).Value = Worksheets(2).Range("C" & fRow).Value
    Worksheets(1).Range("L" & i).Value = Worksheets(2).Range("D" & fRow).Value
    Worksheets(1).Range("M" & i).Value = Worksheets(2).Range("E" & fRow).Value
    Worksheets(1).Range("N" & i).Value = Worksheets(2).Range("F" & fRow).Value
    Worksheets(1).Range("O" & i).Value = Worksheets(2).Range("G" & fRow).Value

 End If
 Next i

End Sub

我添加了以下代码以防止重复;

Sub CompareDates()

If Sheet1.Range("A1") < Sheet2.Range("A1") Then
Run "MatchColums"
End If
End Sub

我没有收到任何错误消息,但是我的CompareDates宏似乎无法正常工作。我尝试过运行matchcolums宏1st,但是再次得到如下相同的结果;

enter image description here

我是一个非常新手的用户,所以将不胜感激。

excel vba date-comparison
1个回答
0
投票

看来您有其他各种免费问题。

从顶部开始...

Dim i, total, fRow As Integer

  • 您的变量itotal都是Variants,因为您的代码与Dim i As Variant, total As Variant, fRow As Integer相同。我假设您想像Integer一样是fRow,那就是... Dim i As Integer, total As Integer, fRow As Integer

total = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row

  • 我什至不知道您要在这里做什么,.End(xlUp).Row?如果我没记错的话,如果1没有任何空单元格,它将返回Column A,否则它将返回最后一个填充行上方的空单元格i的行号。那是你的意图吗?

  • 您已经将范围限定为工作表级别,但是Rows.Count不合格。

    Set found = Worksheets(2).Columns("C:C").Find(what:=answer1)

  • 看起来您不是在搜索唯一值。您的样本数据在Column C中具有“姓氏”,并且在Shhet1中“ Moss”出现的时间不同,但是Find函数将仅在Sheet2中返回“ Moss”的首次出现。这意味着将为Sheet2中的每个“ Moss”写入Sheet1中的第一个“ Moss”。因此,您得到的误报和匹配不佳。这在您的输出中很明显,您没有提供Sheet2的示例,但我知道“ Moss”的首次出现是在“ 12/18/2018”上的“ Job Number 13774”,因为它在[ C0]。要解决此问题,请使用具有唯一值的Sheet1或查找每个匹配项,然后比较日期,职位编号等,直到获得正确的为止。

    Worksheets(1).Range(“ I”&i).Value = Worksheets(2).Range(“ A”&fRow).Value工作表(1).Range(“ J”和i).Value =工作表(2).Range(“ B”和fRow).Value工作表(1).Range(“ K”&i).Value =工作表(2).Range(“ C”&fRow).Value工作表(1).Range(“ L”和i).Value =工作表(2).Range(“ D”和fRow).Value工作表(1).Range(“ M”和i).Value =工作表(2).Range(“ E”和fRow).Value工作表(1).Range(“ N”和i).Value =工作表(2).Range(“ F”和fRow).Value工作表(1).Range(“ O”和i).Value =工作表(2).Range(“ G”和fRow).Value

  • 可以缩短为一行`Worksheets(1).Range(“ I”&i“:O”&i)= Worksheets(2).Range(“ A”&fRow&“:G”&fRow )

© www.soinside.com 2019 - 2024. All rights reserved.