【问题标题】:Excel VBA: How to insert rows and add string of textExcel VBA:如何插入行和添加文本字符串
【发布时间】:2017-10-03 13:44:42
【问题描述】:

我正在尝试为只有一列的简单 Excel 电子表格编写宏。基本上我有一个很长的列表(5000 行或更多)。它是一个编号的对象 ID 列表,如下所示:

object_0001
object_0002
object_0003
...
object_5000

我的目标是在每组 90 个对象之前添加 5 行文本和一个空白行。所以它看起来像这样:

textadded1
textadded2
textadded3
textadded4
textadded5
(blank row here)
object_0001
object_0002
object_0003
object_0004
...
object_0090
textadded1
textadded2
textadded3
textadded4
textadded5
(blank row)
object_0091
object_0092
...
object_0180
textadded1
textadded2
textadded3
textadded4
textadded5
(blank row)

我要添加的 5 个文本字符串都只是一个单词,并且将是在每个 90 个对象块之间添加的相同字符串。现在我有一个宏,可以插入空白行,我在运行后手动浏览并手动复制/粘贴 5 个文本单元格。这是我正在使用的宏代码:

Sub CommandButton21_Click()
Dim LastRow As Long
Dim RowNdx As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For RowNdx = 95 To LastRow Step 95
    Rows(RowNdx).Insert
    Rows(RowNdx).Insert
    Rows(RowNdx).Insert
    Rows(RowNdx).Insert
    Rows(RowNdx).Insert
Next RowNdx
'make sure the first FOUR lines are blank'
End Sub

请帮我修改代码以添加我想要的文本字符串。这仅适用于仅使用 A 列的电子表格。

【问题讨论】:

  • 忽略我之前的评论..您需要在 For RowNdx 循环内添加第二个 For 循环...我会写出答案

标签: vba excel


【解决方案1】:

试试这个宏:

Sub CommandButton21_Click()
    Dim LastRow As Long
    Dim RowNdx As Long
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    For RowNdx = 1 To LastRow Step 96
        Rows(RowNdx).Insert
        Rows(RowNdx).Insert
        Cells(RowNdx, 1).Value = "textAdded5"
        Rows(RowNdx).Insert
        Cells(RowNdx, 1).Value = "textAdded4"
        Rows(RowNdx).Insert
        Cells(RowNdx, 1).Value = "textAdded3"
        Rows(RowNdx).Insert
        Cells(RowNdx, 1).Value = "textAdded2"
        Rows(RowNdx).Insert
        Cells(RowNdx, 1).Value = "textAdded1"
    Next RowNdx
End Sub

【讨论】:

  • 这很好用!!非常感谢 user4897144。
【解决方案2】:

通常情况下,在循环中插入或删除行时,您会从底部开始向上处理,以便插入/删除的行不会干扰您的迭代计数。

Sub insert_6_every_90()
    Dim rw As Long, lr As Long, stp As Long

    stp = 90

    With ActiveSheet   'set worksheet properly like With Sheets("Sheet1")!
        lr = Int(.Cells(Rows.Count, 1).End(xlUp).Row / stp) * stp + 1
        For rw = lr To 1 Step -stp
            .Cells(rw, 1).Resize(6, 1).EntireRow.Insert
            .Cells(rw, 1).Resize(5, 1).Formula = "=text(row(1:1), ""\t\e\x\t\a\d\d\e\d0"")"
            .Cells(rw, 1).Resize(5, 1) = .Cells(rw, 1).Resize(5, 1).Value
        Next rw
    End With
End Sub

我不确定 Textadded0、Textadded1 等 与事实有多接近。这一次填充了五个单元格。如果个别文本更合适,则可能需要调整该部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多