如何根据其他列的值增加一列中的值?
前者
如果是
A B
TS-1
TS-1
TS-1
TS-2
TS-2
TS-3
TS-3
TS-3
TS-3
应该是
A B
TS-1 TC-1-1
TS-1 TC-1-2
TS-1 TC-1-3
TS-2 TC-2-1
TS-2 TC-2-2
TS-3 TC-3-1
TS-3 TC-3-2
TS-3 TC-3-3
TS-3 TC-3-4
B列应该是这样的,取决于columm A中的值的数量
答案 0 :(得分:3)
=A1 & "-" & COUNTIF(A$1:A1;A1)
答案 1 :(得分:0)
这看起来很简单。
<强>设置强>
<强>算法强>
答案 2 :(得分:0)
在好的情况下,您可以通过对后者应用函数来计算基于旧值的新值。在这种情况下,您不能编写纯公式/函数,因为新值不仅取决于旧值,还取决于它所属的组(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
答案 3 :(得分:0)
您也可以使用辅助列在没有VBA的情况下执行此操作。将以下公式放在C列中(从C2开始!):
=IF(A1A2,1,C1+1)
注意:这假设列a中的列表已排序!
然后,在B栏中使用以下公式:
=SUBSTITUTE(A2,"S","C")&"-"&C2