【问题标题】:Excel VBA macro to autocomplete column copying the above valueExcel VBA宏自动完成列复制上述值
【发布时间】:2017-08-07 13:29:10
【问题描述】:

我有一个 Excel 文档,我想编写一个宏来完成包含单元格值的列。例如:

figure 1

在图 1 中,我在 A 列中有 value1。我想要一个视觉基本按钮,当我点击它时,它会自动用 value1 完成该列的剩余单元格,直到找到一个非空单元格。在 b 列中,我有 value3 value4 和 value5 粗体黑色。当我按下按钮时,vb 代码会自动完成具有 te 红色值的单元格。对不起我的英语,它不是我的母语。总而言之,一开始我只有黑色值,当我单击按钮时,它应该自动添加红色值。你能帮我吗?我有这个代码:

Sub split()
Dim columns  As Range, i As Long

Set columns = Selection

i = 1

For i = 1 To columns.Rows.Count
    If columns.Cells(i, 1).Value = "" Then
        columns.Cells(i, 1).Value = columns.Cells(i - 1, 1).Value
    End If
Next

结束子

它只对选定的列起作用,我希望它适用于整个工作簿。我该如何改变呢?

【问题讨论】:

  • 你有试过的代码吗?如果您这样做,请将其包含在您的问题中,以便我们查看需要进行哪些更改:)
  • 如果您希望有人为您编写代码,那么我建议您聘请开发人员。
  • 谢谢你们,非常感谢你们的帮助:)

标签: vba excel


【解决方案1】:

这是如何工作的?它应该比遍历一个单元格快一点,因为我们可以使用SpecialCells() 一次性选择空白单元格:

Sub copyDown()
Dim lastRow As Long, firstRow As Long, lastCol As Long, i As Long
Dim rng As Range, totalCell As Range
Dim cols As Variant

cols = Split(InputBox("What columns do you want? Use space to separate." & vbCrLf & vbCrLf & "I.e. 'A C D F'"), " ")

'Set totalCell = Range("A:A").Find(what:="SubTotal :", LookIn:=xlPart)

If Not Application.IsNA(Application.Match("SubTotal *", Range("A:A"), 0)) Then
    Set totalCell = Cells(Application.Match("SubTotal :", Range("A:A"), 0), 1)
End If

For i = LBound(cols) To UBound(cols)
    firstRow = Cells(1, cols(i)).End(xlDown).Row

    Set rng = Range(Cells(firstRow, cols(i)), Cells(totalCell.Row - 1, cols(i)))
    rng.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=r[-1]C"
    rng.Value = rng.Value
Next i

End Sub

【讨论】:

  • 非常感谢先生。我现在在移动设备中,无法尝试您的代码。明天我会尝试它,希望你的代码能完成工作,我也会将你的答案标记为解决方案。你对最后几行的看法是对的,我也会澄清一下。再次感谢先生,我非常感谢您的帮助。
  • 先生,假设我需要使用前 5 列(例如,如果我可以编写代码来选择列 A、C 和 D,那就太好了),并且我需要填充工作表直到一行包含单词“total”。有关更多信息,请参阅此链接中的附图:illustration screen。提前谢谢先生!
  • 感谢您的帮助。我真的很喜欢有一个窗口对话框询问要选择哪些列的想法,但我发现一个运行时错误:运行时错误'91':使用调试选项未设置对象变量或块变量它告诉我这是行导致问题Set rng = Range(Cells(firstRow, cols(i)), Cells(totalCell.Row - 1, cols(i)))你有什么想法吗?谢谢你,先生,你帮了我很多。
  • @user2357735 当你在列中输入时,你是怎么做到的?它应该是用空格分隔的字母,例如A C D AB
  • 先生,当我删除输入框并像 cols = Split(A, B, C) 那样手动操作时,我在这一行得到运行时错误 13 类型不匹配。 firstRow = Cells(1, cols(i)).End(xlDown).Row 。你知道如何解决这个问题吗,我可以在代码中手动插入列名而不使用框窗口。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多