我在 a 栏中有一份公司列表。在 b 列中,我有一个数字。我需要创建一个列表,其中公司在列表中出现的次数与数字的值相同:
Company A 4
Company B 2
Company C 3
我想要:
Company A
Company A
Company A
Company A
Company B
Company B
Company C
Company C
Company C
所以,这有点像“创建(n)个重复项”功能。
尝试一下:
Sub KopyKat()
Dim N As Long, i As Long, K As Long
Dim v As String, kk As Long, m As Long
N = Cells(Rows.Count, "B").End(xlUp).Row
K = 1
For i = 1 To N
kk = Cells(i, "B").Value
v = Cells(i, "A").Value
For m = 1 To kk
Cells(K, "C") = v
K = K + 1
Next m
Next i
End Sub
编辑#1:
宏非常易于安装和使用:
如果保存工作簿,宏将随之保存。 如果您使用 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx
删除宏:
要使用 Excel 中的宏:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
必须启用宏才能使其工作!
根据您的列表,我不确定仅使用公式或手动 Excel 函数是否真的那么容易/可行,所以这里是完成这项工作的 VBA 程序。
要使用此功能,请单击 Excel 内的
Alt + F11
。转到插入 > 模块。然后将其粘贴到模块中并运行它(调整数据范围和工作表名称后。
Sub MakeList()
Dim ws As Worksheet
Set ws = Sheets("Sheet1") 'change to your sheet name
With ws
Dim c As Range
For Each c In .Range("A1:A3") ' assumes list in cells A1-B3
.Range("D" & .Rows.Count).End(xlUp).Resize(c.Offset(, 1)).Value = c.Value 'builds list in column C
Next
End With
End Sub
我遇到过类似的问题,但无法使用VBA(使用Teams/Excel Online)。这依赖于 REPT、FILTERXML 函数和辅助列。
辅助栏D、E、F(每家公司一栏,可进一步精简)
=FILTERXML("<t><s>"&LEFT(REPT(A1&"</s><s>",B1),LEN(REPT(a1&"</s><s>",B1))-7)&"</s></t>","//s")
解析:
REPT(A1&"",B1) - 创建 A1 重复 B1 次的字符串,以“”
LEFT(REPT(A1&"",B1),LEN(REPT(A1&"",B1))-7) - 从上面的字符串中删除尾随的“”(7 个字符长)
在上面的字符串前面/追加 (&)“”和“"&LEFT(REPT(A1&"",B1),LEN(REPT(A1&"",B1))-7)&"
FILTERXML = 解析最终的 XML 字符串
在一栏中显示所有内容
=SORT(FILTERXML("<t><s>"&TEXTJOIN("</s><s>",TRUE,D:F)&"</s></t>","//s"))
TEXTJOIN 从非空 (TRUE) 单元格创建 XML 字符串
FILTERXML 创建一个数组
SORT 按字母顺序显示的数组