根据带有计数器的列重复值

时间:2018-08-10 23:29:03

标签: excel excel-formula

我有一个字符列表,每个字符都有一个数字

| Character | Count |
|-----------|-------|
| Sam       |   2   |
| Jim       |   4   |
| Larry     |   1   |
| Bob       |   2   |

理想情况下,我想这样列出他们

Sam 1
Sam 2
Jim 1
Jim 2
Jim 3
Jim 4
Larry
Bob 1
Bob 2

我想使用一个可以直接运行的excel公式来做到这一点。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

对我来说,VBA似乎更容易...在工作表中或功能区上单击一个按钮,然后只需单击一下即可,甚至不用运行公式。

答案 1 :(得分:0)

下面的代码将根据存在的次数创建名称列表,其名称的数量递增。 打开VBA屏幕,插入新模块并复制/粘贴代码。 正如您提到的,您不了解VBA,请注意,例如,使用Ctrl + Z不能撤消宏的 。运行后,结果将在那里。

Sub repeat_values()

Dim name_count, count, i, j, k As Double

name_count = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.count, "A").End(xlUp).Row

For i = 2 To name_count
    count = Range("B" & i).Value '-->times to repeat the name

    For k = 1 To count
        j = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.count, "D").End(xlUp).Row '--> determines everytime the last row
        Range("D" & j).Offset(1, 0) = Range("A" & i).Value '--> columns for the names, change "D" to the desired column if you wish
        Range("E" & j).Offset(1, 0) = k '--> column for the counting, change the letter "E" if you would like to have it in the same column
    Next k
Next i

End Sub

注意:它将始终从D列的第一个新的可用行继续,因此不会删除旧数据。当然可以添加。希望对您有所帮助。

答案 2 :(得分:0)

POC

假设您的数据如上所述进行布局,请使用以下公式。根据需要调整范围。

列表的第一行是一种特殊情况,它充当列表的种子。

在A1中使用:

=F1

在B1中使用

1

这基本上是从列表中拉出第一个条目并为其分配最小编号。

为了构建列表并在向下复制公式时提取适当数量的名称,可以使用以下公式。我添加了“不再有字符”的自定义错误消息,但是可以通过改用“”将其更改为空白。

在A2中使用以下内容并复制下来:

=IFERROR(IF(VLOOKUP(A1,$F$2:$G$5,2,0)=B1,INDEX($F$2:$F$5,MATCH(A1,$F$2:$F$5,0)+1),A1),"no more characters")

我结合使用VLOOKUP和MATCH / INDEX为您提供了更多可以使用的公式。

在B2中,使用以下内容并复制下来。

=IF(A2="no more characters","",IF(A1=A2,B1+1,1))

如果您更改了错误消息,请在此公式中对其进行调整以匹配。