を見つけるまで、あなたが後でテキストにそれを変更することができますカウントを維持するループ。あなたがより多くを必要とするよう
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
私はあなたが従業員を追跡する列を追加する方が良いと思いますすべての行についてしたがって、それぞれの配偶者と子供の行について、それは従業員を示します。同じテーブルを参照する外部キーによく似ています。これにより、レポートを生成するのがはるかに簡単になります。 – nbayly