RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1589071
Accepted
Григорий Шурыгин
Григорий Шурыгин
Asked:2024-08-01 02:26:20 +0000 UTC2024-08-01 02:26:20 +0000 UTC 2024-08-01 02:26:20 +0000 UTC

宏应在范围内的每个单元格后面插入另外 3 个单元格并用数据填充它们

  • 772

有一段代码是我几乎不用 BASIC 编程就组装的,更不用说 VBA 了。但有任务,需要实现,而且,我也很想弄清楚。任务是这样的:代码中有一个数组,其中有三个值,这些值是宏应该按照它们在数组中出现的顺序插入到新创建的单元格中的值。也就是说,最终的视图应该是这样的:

  1. 我选择范围
  2. 我激活宏
  3. 我看到我自己的列,但在每个单元格之后,按照数组中列出的顺序添加了另外三个包含数据的单元格。我很高兴并继续深入研究 VBA。

代码:

Sub InsertRowsAtIntervalsWithValues()
'Updateby Extendoffice
Dim Rng As Range
Dim xInterval As Integer
Dim xRows As Integer
Dim xRowsCount As Integer
Dim xNum1 As Integer
Dim xNum2 As Integer
Dim WorkRng As Range
Dim xWs As Worksheet
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim dataArray() As Variant

xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
xRowsCount = WorkRng.Rows.Count
xInterval = Application.InputBox("Enter row interval. ", xTitleId, 3, Type:=1)
xRows = 3
x = 2
j = 0

' Вставляем текстовые значения в массив dataArray
ReDim dataArray(xRows - 1) ' Размер массива равен количеству строк
dataArray(0) = "Зачет аванса"
dataArray(1) = "Гарантийное удержание"
dataArray(2) = "Итого к оплате"

' ... (остальной код макроса)

xNum1 = WorkRng.Row
xNum2 = xRows + xInterval
Set xWs = WorkRng.Parent

' Вставляем строки и заполняем их данными
For i = 1 To xRowsCount ' Изменили условие цикла
    xWs.Range(xWs.Cells(xNum1, WorkRng.Column), xWs.Cells(xNum1 + xRows - 1, WorkRng.Column)).Select
    Application.Selection.EntireRow.Insert
    
    ' Заполняем строки данными из dataArray
    If j <= x Then ' Итерируем по элементам массива
        xWs.Cells(xNum1 + j, WorkRng.Column).Value = dataArray(j)
        j = j + 1
    Else
        j = 0
    End If
    
    xNum1 = xNum1 + xNum2
Next
End Sub
excel
  • 2 2 个回答
  • 32 Views

2 个回答

  • Voted
  1. Алексей Р
    2024-08-01T02:53:01Z2024-08-01T02:53:01Z

    如果您按照描述(1-2-3)进行操作,那么您可以这样做:

    Sub Fill3()
        Data = Array("Зачет аванса", "Гарантийное удержание", "Итого к оплате")
        Size = UBound(Data) - LBound(Data) + 1
        Set Rng = Intersect(Selection, ActiveSheet.Columns(Selection.Column))
        Rng.Offset(, 1).EntireColumn.Resize(, Size).Insert
        For Each cl In Rng
            cl.Offset(, 1).Resize(, Size) = Data
        Next
    End Sub
    

    此代码适用于包含一个或多个区域的范围。如果您只需要一个区域,那么通过消除循环,代码会更加简单。

    • 1
  2. Best Answer
    rotabor
    2024-08-01T15:58:24Z2024-08-01T15:58:24Z
    Option Explicit
    
    Sub InsertRowsAtIntervalsWithValues()
      Dim xRows As Integer, WorkRng As Range
      Dim x As Integer, yf As Long, yl As Long, i As Long
      
      Set WorkRng = Application.Selection
      x = WorkRng.Column
      yf = WorkRng.Row + 1
      yl = yf + WorkRng.Rows.Count - 1
      
      Dim dataArray As Variant
      ' нужен вертикальный массив
      dataArray = WorksheetFunction.Transpose( _
        Array("Зачет аванса", "Гарантийное удержание", "Итого к оплате"))
      xRows = UBound(dataArray, 1) - LBound(dataArray, 1) + 1
    
      For i = yl To yf Step -1 ' нужно идти в обратном порядке, поскольку диапазон
        ' расширяется вниз в процессе работы
        Cells(i, x).Resize(xRows, 1).EntireRow.Insert
        Cells(i, x).Resize(xRows, 1) = dataArray
      Next
    End Sub
    
    • 0

相关问题

  • 使用 VBA 在 Excel 中插入图片

  • 选择哪里(EXCEL)

  • 两列的条件格式

  • 如何按文章比较两个表格?

  • 打开工作簿时,跳转到当前日期的单元格[关闭]

  • 在工作簿之间复制数据。WBA代码加速

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5