VBA新手。所以,请原谅我,如果它非常简单。 我正在为各种公司制作一份Excel表格。注册
我的Excel将第一列(A)记录为company_name,其中必须提供他/她的company_name。
C栏总数没有。公司员工(这包括永久+合同雇员)。
D栏和E栏有员工'姓名只是永久性的。
所以,假设;我的C列值为5;列(D和E)可能包含5个或少于5个Employee名称。 (严格不超过5个员工姓名。如果这些列的名称超过5个;它应该在sheet2中抛出错误消息)
我的下一栏F是指定。这可以包含' 经理' Attender ' 开发人员',' 操作','的 CEO '只允许,不允许其他值。这些值也可以重复(对于不同的员工,如下图所示)
为此我写了下面的代码,它工作正常。
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
现在我的下一个要求是;对于每个公司,应该至少有一个经理&#39;
如果某个公司没有经理,那么我必须在&#39; Sheet2&#39;作为&#34;他们应该至少是一个经理&#39;对于这家公司&#34; 链接到sheet1中的正确单元格。
我可以在&#39;经理&#39;写在与Company_Name相同的行中。
但是,当经理&#39;经理&#39;时,我不知道怎么做。不是写在Company_Name的同一行。
以下是我的代码,仅适用于指定 - &#39;经理&#39;假定与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
我尝试编写如下代码来验证&#39; Manager&#39;写在与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
任何人都可以指导我如何正确使用偏移功能和循环/ while循环/查找功能来验证每个公司至少有一个管理器吗?
答案 0 :(得分:1)
当您尝试确定某些内容是否缺失时,通常更容易设置布尔值以便在之后使用它来应用正确的过程。
这可以帮到你:
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