良い状況では、古い値に関数を適用することで、古い値に基づいて新しい値を計算できます。この場合、新しい値は古い値だけでなく、それが属するグループの要素数(1、2、3、...)にも依存するため、純粋な数式/関数を記述できません。に。
したがって、グループを追跡するソース要素上にループを作成する必要があります。「グループ」を見るときは、「辞書」と考えてください。Ifと変数を使用してグループ識別子の変更を追跡する代わりに、辞書を機能させてください。追加のボーナス:注文に依存しません。
コード内:
Dim aSrc : aSrc = Split("TS-1 TS-1 TS-1 TS-2 TS-2 TS-3 TS-3 TS-3 TS-3")
WScript.Echo "aSrc:", Join(aSrc)
Dim aExp : aExp = Split("TC-1-1 TC-1-2 TC-1-3 TC-2-1 TC-2-2 TC-3-1 TC-3-2 TC-3-3 TC-3-4")
ReDim aRes(UBound(aSrc))
Dim dicN : Set dicN = CreateObject("Scripting.Dictionary")
Dim nRow : nRow = 0
Dim sInp
For Each sInp In aSrc
Dim aParts : aParts = Split(sInp, "-")
dicN(aParts(1)) = dicN(aParts(1)) + 1
aRes(nRow) = "TC-" & aParts(1) & "-" & dicN(aParts(1))
nRow = nRow + 1
Next
WScript.Echo "aExp:", Join(aExp)
WScript.Echo "aRes:", Join(aRes)
出力:
aSrc: TS-1 TS-1 TS-1 TS-2 TS-2 TS-3 TS-3 TS-3 TS-3
aExp: TC-1-1 TC-1-2 TC-1-3 TC-2-1 TC-2-2 TC-3-1 TC-3-2 TC-3-3 TC-3-4
aRes: TC-1-1 TC-1-2 TC-1-3 TC-2-1 TC-2-2 TC-3-1 TC-3-2 TC-3-3 TC-3-4