VBA根据多个标准(数量和日期)更改单元格值

时间:2014-06-17 10:45:19

标签: excel vba excel-vba

我需要VBA帮助根据多个标准替换某个列的内容。

如果在Sheet2的Extension列中找到Sheet1中的扩展列中的值 并且Sheet1中的日期等于或落在Sheet2中的Date From和Date To之间,将Sheet1中的Number替换为Sheet2中的相应Number,Else,什么都不做。

这是详细信息的屏幕截图。 http://prntscr.com/3tnf6t

带有示例条目的文件的链接。 http://1drv.ms/1skLYJR

我尝试录制一个执行自动过滤器的宏,但无法找到为符合所有条件的记录输入相应数字的方法。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我必须对您的Excel进行一些小的更改才能使其正常工作。我用Sheet-Function TODAY()替换了Sheet2中的Today,它只返回当前日期。之后这个快速而肮脏的解决方案应该可以解决您的问

Sub checkAndReplace()

Dim currentRowS1, currentRowS2 As Integer

Range("B1:A" + CStr(ThisWorkbook.Worksheets("Sheet1").UsedRange.Count) + ",A1:A" + CStr(ThisWorkbook.Worksheets("Sheet2").UsedRange.Count)).Select

For currentRowS1 = 2 To ThisWorkbook.Worksheets("Sheet1").UsedRange.Count
    For currentRowS2 = 2 To ThisWorkbook.Worksheets("Sheet2").UsedRange.Count
    If ThisWorkbook.Worksheets("Sheet1").Range("B" & currentRowS1).Text = ThisWorkbook.Worksheets("Sheet2").Range("A" & currentRowS2).Text Then
        If DateDiff("d", ThisWorkbook.Worksheets("Sheet1").Range("A" & currentRowS1), ThisWorkbook.Worksheets("Sheet2").Range("B" & currentRowS2)) <= 0 And DateDiff("d",     ThisWorkbook.Worksheets("Sheet1").Range("A" & currentRowS1), ThisWorkbook.Worksheets("Sheet2").Range("C" & currentRowS2)) >= 0 Then
        ThisWorkbook.Worksheets("Sheet1").Range("C" & currentRowS1).Value = ThisWorkbook.Worksheets("Sheet2").Range("D" & currentRowS2).Value
        End If
    End If

    Next
Next

End Sub