2013-01-20 163 views
3

如何根據其他列的值增加一列中的值?如何根據其他列的值增加一列中的值

對於離

如果是

A    B  

TS-1 
TS-1 
TS-1 
TS-2 
TS-2 
TS-3 
TS-3 
TS-3 
TS-3 

應該取決於columm甲

值的數量來作爲

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中

回答

3
  1. 複製這個公式在單元格B1:=A1 & "-" & COUNTIF(A$1:A1;A1)
  2. 將從B1到dataselection的端部的內容。
+0

這在Office 2010中不起作用。 已將其更新爲= A1&「 - 」&COUNTIF(A $ 1:A1,A1) – TechnoCrat

0

這看起來相當簡單。

設置

  • 具有可變瓦拉存儲在可樂的數量。
  • 有一個變量valB存儲要在colB中打印的最右邊的數字。

算法

  • 解析文本在一排。
  • 瓦拉是從以前的行不同,你知道你必須值Valb重置爲1
  • 打印值Valb和1
  • 不停地進行分析,直到你到達終點加一。
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 
0

您還可以通過使用輔助柱做這沒有VBA。把C列下面的公式(首發C2!):

 
=IF(A1A2,1,C1+1) 

注:這是假定在列進行排序列表!

然後,使用下面的公式中柱B:

 
=SUBSTITUTE(A2,"S","C")&"-"&C2 
相關問題