3

他の列の値に応じて、ある列の値をインクリメントする方法は?

例えば

もしそれが

 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

列Aの値の数に応じて、列Bでこのようになるはずです

4

4 に答える 4

3
  1. この数式をセルB1にコピーします。=A1 & "-" & COUNTIF(A$1:A1;A1)
  2. コンテンツをB1からデータ選択の最後にドラッグします。
于 2013-01-21T14:23:44.287 に答える
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
于 2013-01-20T19:55:17.423 に答える
0

これを達成するのはかなり簡単に見えます。

設定

  • colA に数値を格納する変数valAを用意します。
  • colB に出力する右端の数値を格納する変数valBを用意します。

アルゴリズム

  • テキストを連続して解析します。
  • valAが前の行と異なる場合、valB を 1 にリセットする必要があることがわかります。
  • valBを出力し、それを 1増やします。
  • 最後に到達するまで解析を続けます。
于 2013-01-20T19:31:39.583 に答える
0

補助列を使用して、VBA なしでこれを行うこともできます。次の数式を列 C に入力します (C2 から始めます!)。

=IF(A1A2,1,C1+1)

注: これは、列 a のリストがソートされていることを前提としています!

次に、列 B で次の式を使用します。

=SUBSTITUTE(A2,"S","C")&"-"&C2
于 2013-01-21T09:04:24.217 に答える