通過設置「梯隊」的數值,你可以改變它的文本以後。這樣的話,你會得到這樣的事情:
Sub dadada()
Dim data As Variant, output() As Variant, i As Long, j As Long, mb As VbMsgBoxResult
With Sheets("sheet1")
data = .[A1].Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 2).Value2
ReDim output(1 To UBound(data), 1 To 3)
output(1, 1) = "Name"
output(1, 2) = "# Dependents"
output(1, 3) = "Tier"
j = 1
For i = 1 To UBound(data)
If data(i, 2) = "Employee" Then
j = j + 1
output(j, 1) = data(i, 1)
output(j, 2) = 0
output(j, 3) = 0
ElseIf data(i, 2) = "Spouse" Then
output(j, 2) = output(j, 2) + 1
output(j, 3) = output(j, 3) Or 1
ElseIf data(i, 2) = "Child" Then
output(j, 2) = output(j, 2) + 1
output(j, 3) = output(j, 3) Or 2
ElseIf Len(data(i, 2)) Then '<- skip start
mb = MsgBox("Can't evaluate '" & data(i, 2) & "' at row " & i & " ('" & data(i, 1) & "')!", vbAbortRetryIgnore + vbApplicationModal + vbCritical, "Error")
If mb = vbAbort Then Exit Sub
If mb = vbRetry Then
If MsgBox("Is this a new employee?", vbYesNo) = vbYes Then
data(i, 2) = "Employee"
ElseIf MsgBox("Is this a new spose?", vbYesNo) = vbYes Then
data(i, 2) = "Spouse"
Else
MsgBox "'" & data(i, 2) & "' will be used as 'Child'."
data(i, 2) = "Child"
End If
i = i - 1
End If '<- skip end
End If
Next
For i = 2 To j
output(i, 3) = "EE" & Application.Choose(output(i, 3) + 1, "", "+Spouse", "+Child", "+Family")
Next
.[E1].Resize(i - 1, 3).Value = output
End With
End Sub
的mb
部分是可選的(所以如果你不喜歡它,只需刪除所有行之間,並且包括skip start
和skip end
)
聽起來像是你需要更多的'if'語句。 – findwindow
或者查看['Select Case'](http://www.techonthenet.com/excel/formulas/case.php)作爲'If'替代方案 – BruceWayne
我認爲您最好通過添加一個跟蹤Employee爲所有行。因此,對於每個配偶和子女行,都會顯示員工。很像引用同一個表的外鍵。這將使生成報告變得更容易。 – nbayly