场景:我正在尝试使用for循环中的输入来选择一个单元格。
目标:循环从工作表1中检索标识符和日期,并使用日期的月份/年和标识符在工作表2中查找值。
数据示例: WS2:
ident1 ident2 ident3 ident4 ident5
20/01/2010 aa az zc bc ht
20/02/2010 er da ea cr hd
20/03/2010 ok ju nh lo gk
20/04/2010 uj hg gj eg nh
20/05/2010 ug cd ad ea ga
从我的循环中我得到2个值,例如:ident3和15/04/2010。首先,我想找到该月份和年份在该标识符列表中的位置。在这种情况下,它将是“gj”。
问题:在这里我遇到了2个问题,首先是能够只为月份和年份考虑日期。如果我只想找到月份,那么使用MONTH()功能会很简单,但由于我还要考虑今年,我很遗憾(我也试过考虑整个日期,但是从那天开始不匹配,我无法绕过)。如何才能做到这一点? 其次,我正在使用第一行的选择,然后是每个标识符的查找和替换过程,我无法使用它来进行协调。这样做的正确方法是什么?
到目前为止代码:
Option Explicit
Sub FindData()
Dim wb As Workbook
Dim lrow As Integer, a_number As Integer
Dim date_number As Date, LMonth As Date
For lrow = 2 To wb.Sheets("CAs").UsedRange.Rows.count
a_number = Range("B" & lRow).Value
date_number = Range("C" & lRow).Value
LMonth = Month(date_number)
wb.Sheets("AMT").Cells(a_number,date_number).Value
lastRow = Sheet1.Cells(Rows.count, 1).End(xlUp).Row
lastCol = wb.Sheets("AMT").Cells(2, Columns.Count).End(xlToLeft).Column
lastColLetter = Col_Letter(lastRow)
datefinalmatch = Application.WorksheetFunction.VLookup(wb.Sheets("CAs").Range("C"&lrow), _
"AMT!$A$2:§"&lastColLetter&"$"&lastRow&","&"lastCol&",TRUE)" + 1
isinfinalmatch = Application.WorksheetFunction.HLookup(wb.Sheets("CAs").Range("B"&lrow), _
"AMT!$B$1:§"lastColLetter"$"&lastRow&","&"lastRow&",False)"
Next lrow
End Sub
答案 0 :(得分:1)
这是一个函数,它将接受您的日期和标识符作为字符串,并从表中返回相应的代码。 testSheet
只是我的表单的名称。如果没有找到,则返回零长度字符串。
在Set r = ws.Range("$A:$Z")
行上,只需将范围设置为足以包含整个查找表。
Public Function FindCode(date_number, ident) As String
Dim ws As Worksheet
Dim r As Range
Set ws = ThisWorkbook.Sheets("testSheet")
Set r = ws.Range("$A:$Z")
Set c = r.Find(date_number)
If Not c Is Nothing Then
daterow = c.Row
End If
Set c = r.Find(ident)
If Not c Is Nothing Then
identcol = c.Column
End If
If daterow = Empty Or identcol = Empty Then
FindCode = ""
Else
FindCode = ws.Cells(daterow, identcol)
End If
End Function
示例用法是:
Debug.Print FindCode("20/04/2010", "ident2")