使用Excel单元格内容搜索另一个工作表上的范围并返回信息

时间:2011-09-17 10:05:47

标签: excel vba

如何使用Excel单元格内容(日期)搜索另一个工作表上的范围,并返回该范围内该日期右侧单元格中包含的该日期的相关信息。我需要检查一个日期是工作日而不是假日,以及它是否是月末。范围

Column 1     Column 2      Column 3    Column 4   Column 5
  Date     Day of Week     BD or WE    HD or NH    Y or N

BD =营业日,WE =周末,HD =假日,NH =非假日,Y =月末,N =非月末 2011年至2016年的每个日期都在范围内计算

我想将用户输入的日期用于工作表中的单元格以搜索范围,查找日期并使用该日期的信息来确定它是否是一个好日期。 我不是编程新手,但是我比目前的编程语言落后了大约20年,所以我正在学习VBA代码。我想使用VBA代码,因为如果输入的日期不是工作日而不是假日,那么我想将日期提高一个并验证日期,直到我得到一个好日期。如果它是月末,我还想将日期降低1。我相信我可以自己输入If语句和循环,但是我无法知道如何使用用户输入的日期进入单元格(而不是输入框)并从该范围返回有关该日期的信息以便我可以在循环中使用它直到我能得到我想要的日期。 我感谢您提供的任何帮助。感谢

1 个答案:

答案 0 :(得分:1)

当用户在第一张表上输入信息时,您似乎希望触发Visual Basic代码(让我们将其称为第一张表及其代号; Sheet1)。因此,您需要在Visual Basic编辑器中的Sheet1中编写子例程

因此你可以使用......

Private Sub Worksheet_Change(byval target as range)

Dim SelDate as Date

If VBA.IsDate(Cells(target.Row,target.Column)) Then
SelDate=Cells(target.Row, target.Column)

'Assume other range is on sheet with the codename Sheet2, starting at top of page in first column

LookRow = 1

     Do Until (Sheet2.Cells(LookRow, 1) >= SelDate and Sheet2.Cells(LookRow, 3) = "BD" and Sheet2.Cells(LookRow, 4) = "HD" and Sheet2.Cells(LookRow,5) = "N") or Sheet2.Cells(LookRow, 1) = ""
     LookRow = LookRow + 1
     Loop

     If Cells(LookRow, 1) <> "" Then
     Cells(target.Row, "OutputCol") = Sheet2.Cells(LookRow, 1)
     End If
End If

End Sub

如果这个代码是月末,那么这个代码实际上会将日期提高一个,因为你的问题没有说明如果将日期下降导致非工作日会发生什么。你说你可以处理IF语句,所以我不太关心这个细节。你需要单独的循环来找到SelDate和最接近的可接受日期,如果你打算减少日期以及向上

“OutputCol”是您希望将输出放在初始工作表上的任何位置。一般情况下,我建议参考范围名称定义列,以使代码更健壮。 Expert help with that can be found here。我也会使用错误处理

请注意,这一次只能找到一个日期。如果要将多个日期粘贴到工作表中,则它只会作用于范围的左上角单元格。 Worksheet_Change事件定义的“目标”将包括完整选择,因此您可以在target.Count&gt;时重新处理完整列。 1或者您可以使用target.Rows.Count来查看要循环的行数