![](/img/trans.png)
[英]If a range of cells all equal “true” then it will return a content-filled cell from another sheet, into a 3rd sheet
[英]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.