Excel复制单元格值X次,最后数字增加

标签 excel vba

我有一个与那里类似的任务:
Copy value N times in Excel

但我的有点复杂。

所以,我有这种表:

    A         B
  dog-1.txt   3
  cat-1.txt   2
  rat-1.txt   4
  cow-1.txt   1

最终结果需要如下:
    A
  dog-1.txt
  dog-2.txt
  dog-3.txt
  cat-1.txt
  cat-2.txt
  rat-1.txt
  rat-2.txt
  rat-3.txt
  rat-4.txt
  cow-1.txt

如您所见,它不仅将单元格内容乘以从 B 列获取的 X 倍,而且还会将文件名中的数字增加 1 步增加相同的次数。

我怎么能做到这一点?

最佳答案

尝试以下方法( 久经考验的 ):

Sub Extend()

    Dim Rng As Range, Cell As Range
    Dim WS As Worksheet, NewCell As Range
    Dim Dict As Object, NewStr As String

    Set WS = ThisWorkbook.Sheets("Sheet1") 'Modify as necessary.
    Set Rng = WS.Range("A1:A5") 'Modify as necessary.
    Set Dict = CreateObject("Scripting.Dictionary")

    For Each Cell In Rng
        If Not Dict.Exists(Cell.Value) Then
            Dict.Add Cell.Value, Cell.Offset(0, 1).Value
        End If
    Next Cell

    Set NewCell = WS.Range("C1") 'Modify as necessary.
    For Each Key In Dict
        For Iter = 1 To CLng(Dict(Key))
            NewStr = "-" & Iter & ".txt"
            NewStr = Mid(Key, 1, InStrRev(Key, "-") - 1) & NewStr
            NewCell.Value = NewStr
            Set NewCell = NewCell.Offset(1, 0)
        Next Iter
    Next Key

End Sub

截图(运行后):

enter image description here

这里的逻辑是从第一列获取每个名称,将其存储为字典键,然后获取它旁边的值并将其存储为键值。然后我们在字典的每个键中进行迭代,我们使用键值作为迭代的上限。在每次迭代期间,我们修改字符串以将其数字更改为迭代的“当前数字”。

我们选择C1作为初始目标细胞。每次迭代,我们将其偏移一 (1) 行以适应新的/下一次迭代。

让我们知道这是否有帮助。

关于Excel复制单元格值X次,最后数字增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21981480/

相关文章:

regex - VBA奇怪的正则表达式问题

regex - 使 Excel 公式将字符串视为正则表达式

vba - 使用 VBA 合并 Excel 表格

vba - 使用 VBA 或公式比较 2 列中的数据

c# - 将 excel 单元格格式保留为包含 "date like"数据的文本

macos - Excel VB 打开文件 OSX 和 Windows

VBA Word - 带有初始文件名的另存为对话框

excel - 更换、清理和修剪 VBA

excel - 我可以计算字符串格式的 Excel VB 常量吗?

arrays - 从数据库中提取值到数组中 - Excel-VBA