正确使用偏移量函数和for / while循环

VBA的新function 所以,如果非常简单,请原谅我。 我正在为各种公司的注册制作Excel表格。

我的Excel将第一列(A)logging为company_name,其中必须给出其company_name。

C栏总共没有。 公司员工人数。 (这包括永久+合同雇员)。

D栏和E栏只有永久性的员工姓名。

所以,假设 我的专栏C有价值5; 列(D和E)可能有5个或less于5个员工姓名。 (严格不超过5个员工姓名,如果这些列的名字超过5个,应在表2中填写错误信息)

我的下一个F栏是指定。 这可以在“ pipe理者 ”,“ 参与者 ”,“ 开发者 ”,“ 操作者 ”,“ 首席执行官 ”之间具有价值,并且不允许其他价值。 这些值也可以重复(对于不同的员工,如下图所示)

My_Excel

为此,我写了下面的代码,它工作正常。

Dim celadr, celval, celadrI, celvalI, celadrN, celvalN As Variant Range("F2:F" & LastRow).Select ' Selection.Clearformats For Each cell In Selection celadr = cell.Address celval = cell.Value celadrI = cell.Offset(0, 4).Address celvalI = cell.Offset(0, 4).Value celadrN = cell.Offset(0, 9).Address celvalN = cell.Offset(0, 9).Value If Len(celval) >= 1 Then If InStr(1, ("MANAGER,ATTENDER,DEVELOPER,OPERATOR,CEO,"), Trim(UCase(celval) & ",")) < 1 Then Range(celadr).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & " The Designation is incorrect" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) Sheets("Sheet2").Hyperlinks.Add Anchor:=Sheets("Sheet2").Range("A65536").End(xlUp), Address:="", SubAddress:=strstr End If End If Next 

现在我的下一个要求是; 对于每个公司,应该有至less一个“ 经理 ”。

如果某个公司没有pipe理者,那么我必须在“Sheet2”中给出“他们应该是这家公司的至less一个”pipe理者“的消息,并链接到sheet1中正确的单元格。

当“经理”写入公司_姓名的同一行时,我可以validation它。

但是,当“经理”不写在Company_Name的同一行时,我不知道如何去做。

下面是我的代码,只有当指定 – “经理”被假定写入与Company_Name相同的行时才起作用。

 Range("A2:A" & LastRow).Select For Each cell In Selection celadr = cell.Address celval = cell.Value If Len(celval) >= 1 Then If Trim(cell.Offset(i, 5).Value) <> "Manager" Then cell.Offset(i, 5).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & "Their should be atleast a single 'Manager' for this company" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) Sheets("Sheet2").Hyperlinks.Add Anchor:=Sheets("Sheet2").Range("A65536").End(xlUp), Address:="", SubAddress:=strstr End If End If Next 

我尝试写下面的代码来validation当'经理'写在不同于Company_Name的行上时。

(我已经评论了给我错误的部分。)

 Range("A2:A" & LastRow).Select ' Selection.Clearformats For Each cell In Selection celadr = cell.Address celval = cell.Value If Len(celval) >= 1 Then ' For i = 0 To cell.Offset(0, 2).Value If Trim(cell.Offset(i, 5).Value) <> "Manager" Then 'And cell.Offset(1, 0).Value < 1 Then ' Do Nothing ' Else cell.Offset(i, 5).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & "Their should be atleast a single 'Manager' for this company" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) Sheets("Sheet2").Hyperlinks.Add Anchor:=Sheets("Sheet2").Range("A65536").End(xlUp), Address:="", SubAddress:=strstr End If ' Next i ' If cell.Offset(1, 0).Value >= 1 Then ' End If End If Next 

任何人都可以指导我如何正确使用偏移function和循环/ while循环/查找function来validation每个公司至less有一个经理?

当你试图确定是否缺less某些东西时,通常会设置一个布尔值来使用它来应用正确的过程。

这应该可以帮助你:

 Dim HasManager As Boolean, _ LastRow As Long LastRow = ActiveSheet.Range(Rows.Count).End(xlUp).Row Range("A2:A" & LastRow).Select 'Selection.Clearformats For Each cell In Selection celadr = cell.Address celval = cell.Value If Len(celval) >= 1 Then HasManager = False 'For i = 0 To cell.Offset(0, 2).Value i = 0 Do While HasManager = False And _ (cell.Offset(i, 0).Value = "" Or cell.Offset(i, 0).Value = celval) And _ cell.Offset(i, 0).Row <= LastRow + 1 If LCase(Trim(cell.Offset(i, 5).Value)) = "manager" Then HasManager = True i = i + 1 Loop If HasManager Then 'The company has at least one Manager Else 'The company doesn't have any Manager cell.Offset(i - 1, 5).Interior.Color = vbRed Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Value = celval & "Their should be atleast a single 'Manager' for this company" strstr = "'" & shname & "'!" & Range(celadr).Address(0, 0) End If Else End If Next cell