簡體   English   中英

使用Excel單元格內容在另一個工作表上搜索范圍並返回信息

[英]Use an Excel cell content to search a range on another sheet and return information

如何使用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語句並自己循環執行,但是我不知道如何使用用戶輸入的日期到單元格(而不是輸入框)中,並且無法從范圍返回有關該日期的信息,因此我遇到了麻煩在Loop中使用它,直到獲得所需的日期為止。 感謝您提供的任何幫助。 謝謝

似乎您希望您的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”是您要在初始工作表上放置輸出的任何位置。 通常,我建議參考范圍名稱來定義列,以使您的代碼更健壯。 可以在這里找到專家幫助 我也會使用錯誤處理

請注意,這一次只能找到一個日期。 如果您將一些日期粘貼到工作表中,則它將僅作用於范圍的左上方單元格。 由Worksheet_Change事件定義的“目標”將包括完整的選擇,因此您可以在target.Count> 1時重新處理完整的列,或者可以使用target.Rows.Count來查看要循環的行數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM