通过员工号码循环查看某个date是否在一段时间内

谁可以帮助一个初学者。 我添加了两个截图,使我的故事更清晰。

计算

项目

我的Excel表是两个选项卡。 一个是“计算”,另一个是“项目”。

我想知道的是如何在VBA中编程以下内容:

在“计算”选项卡中,E列中有一个员工编号。我必须查看该编号是否也写在“项目”选项卡中。 如果是这样,我需要知道计算选项卡的date是否落在项目选项卡中的开始date和结束date之内。 如果是这样,那么写信息,如果该行到计算选项卡中的空列。

员工在“项目”选项卡中执行多个任务时会出现另一个问题。 我想这里需要另一个循环:

如果“计算”选项卡中的date不在“项目”选项卡中从开始到结束的时间段内,是否有另一行具有相同的员工编号,并且可能在该期间内。

我希望我讲清楚了我的故事。 我知道这些步骤应该是什么,而不是如何编程。 我希望有人能够帮助我。

让我们知道,到目前为止你所做的事情是很棒的。 我觉得初学者最简单的方法就是使用两个循环。 一个用于计算,另一个用于项目选项卡。

然后你可以开始开发你的function。 为每个工作表使用“行计数器”并迭代通过行。 这里是一个伪代码的例子:

Dim lRowCountCalc as Long Dim lRowCountPrj as Long lRowCountCalc = 1 lRowCountPrj = 1 do do If Table2.Range("A" & lRowCountPrj).Value = Table1.Range("E" & lRowCountPrj).Value Then If ... dates are equal 'Do some stuff End if End If lRowCountPrj = lRowCountPrj +1 Loop Until lRowCountPrj = 5000 Or Table2.Range("A" & lRowCountPrj).text = "" lRowCountCalc = lRowCountCalc +1 Loop Until lRowCountCalc = 5000 Or Table1.Range("A" & lRowCountCalc).text = "" 

只要在计算中检查每个员工编号是否在项目当前行中有相同的编号。 如果是的话,做你的支票,并填写你所需要的信息。 如果有多个项目,你会发现它也是因为所有的行将被检查。

不过要小心。 这是非常昂贵的,因为这个代码迭代计算中所有行的项目中的每一行。 但是一开始我会这样做。

由于您的屏幕截图显示为Windows的Excel,因此您只需使用Windows的JET / ACE引擎(.dll文件)就可以考虑使用SQL解决scheme,只需将两个工作表joindatefilter的WHERE子句即可。 在这种方法中,您可以避免循环和使用数组/集合。

要在下面进行集成,请添加一个名为RESULTS的新工作表,因为工作簿上的SQL查询是只读操作,不会更新现有数据。 LEFT JOIN用于保留Calculations中的所有logging,而不pipe项目中是否匹配,但匹配的数据将填充到空列中。 结果应该在结构上重复计算 。 根据需要调整SELECTONWHERE子句中的列名(因为我无法从屏幕截图中清楚地读取列名)。 最后,一个非常重要的项目:确保date列被格式化为datetypes。

 Dim conn As Object, rst As Object Dim strConnection As String, strSQL As String Dim i As Integer Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset") ' OPEN DB CONNECTION strConnection = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" _ ' & "DBQ=C:\Path\To\Workbook.xlsx;" conn.Open strConnection ' OPEN QUERY RECRDSET strSQL = "SELECT t1.*, t2.[Project] AS [Which Project], t2.[Customer] As [Which Customer]," _ & " t2.[Start], t2.[End planned], t2.[Hours per week]" _ & " FROM [Calculation$A$3:$D$1048576] t1" _ & " LEFT JOIN [Projects$A$3:$J$1048576] t2" _ & " ON t1.EmployeeNum = t2.EmployeeNum" _ & " WHERE t1.[Date] BETWEEN t2.Start AND t2.[End planned];" rst.Open strSQL, conn ' COLUMNS For i = 1 To rst.Fields.Count Worksheets("RESULTS").Cells(3, i) = rst.Fields(i - 1).Name Next i ' DATA ROWS Worksheets("RESULTS").Range("A4").CopyFromRecordset rst rst.Close conn.Close Set rst = Nothing Set conn = Nothing