如何根据“n”是单元格中的数字插入“n”行

问题描述 投票:0回答:4

我在 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)个重复项”功能。

excel duplicates
4个回答
5
投票

尝试一下:

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:

宏非常易于安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-I ALT-M 打开一个新模块
  3. 将内容粘贴进去并关闭 VBE 窗口

如果保存工作簿,宏将随之保存。 如果您使用 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

删除宏:

  1. 如上调出VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

要使用 Excel 中的宏:

  1. ALT-F8
  2. 选择宏
  3. 触摸运行

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能使其工作!


3
投票

根据您的列表,我不确定仅使用公式或手动 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

0
投票

我遇到过类似的问题,但无法使用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 按字母顺序显示的数组


0
投票

我遇到了完全相同的问题,但 selytch 的答案在 Mac 上不起作用,因为 FILTERXML 不可用。我找到了解决方案,但需要中间列。无论如何,我给出了我的解决方案,它可以帮助某人:

C 列的公式为:

=REPT(A1&"@",B1) 

D1 中的公式为:

=TRANSPOSE(TEXTSPLIT(TEXTJOIN("",TRUE,C1:C6),"@"))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.