【问题标题】:How to move cell contents down one cell when that cell has numbers in it?当单元格中有数字时,如何将单元格内容向下移动一个单元格?
【发布时间】:2018-07-14 18:47:33
【问题描述】:

我正在尝试开发一个 VBA 程序来移动单元格内容,并且我只想使用 VBA(想在我的程序中添加更多内容,以便尽可能多地学习使用 VBA)。我需要将内容向下移动一个单元格,但我不确定如果下一个单元格已满而不覆盖它,程序如何将内容从一个单元格向下移动到下一个单元格,然后将其向下移动。我已经包含了我的 excel 表的 jpeg。 我希望你能帮忙。

我正在尝试让程序将 E1:E12 列中的所有数字集向下移动。 我需要程序将一组数字(范围内可能不止一组数字)移动到其下方的下一个单元格,并增加该组中的最后一个数字(不限制计数)。因此,在单元格 E1 (8-16) 的示例中,将移动到 E2 并变为 8-17(移动后单元格 E1 将为空白)。当数字集位于单元格 E12 中时,它们会移动到 E1,但仍会增加最后一个数字,并且会循环往复(E1 到 E12 并返回)。如果下一个单元格已满而不覆盖它,程序如何将内容从一个单元格向下移动到下一个单元格,然后将其向下移动,如果这有意义的话。一个例子是单元格 E12,如果 E1 已满但必须移动,它如何移动到 E1?

就是这样,非常感谢您的帮助。

my Excel sheet example

【问题讨论】:

  • 首先,使用宏记录器——它会准确地告诉你你能做什么。其次,快速回顾一下 msdn Excel VBA 参考资料。您正在寻找的方法是 Range.Insert -- msdn.microsoft.com/en-us/vba/excel-vba/articles/…
  • 你不是已经问过同样的问题了吗?我以为那里有答案...
  • 非常感谢您的帮助。我会阅读您的建议。

标签: vba excel


【解决方案1】:
Sub Tester()

    Dim rng As Range, tmp, i As Long

    Set rng = Range("E1:E12")
    tmp = rng.Cells(rng.Cells.Count).Value
    For i = rng.Cells.Count To 2 Step -1
        rng.Cells(i).Value = Increment(rng.Cells(i - 1).Value)
    Next i
    rng.Cells(1).Value = Increment(tmp)

End Sub

'If value has a dash, increment the second number
'  Assumes any value with a dash has a number on either side...
Function Increment(v)
    Dim rv, arr
    rv = v
    arr = Split(v, "-")
    If UBound(arr) = 1 Then rv = arr(0) & "-" & CLng(arr(1)) + 1
    Increment = rv
End Function

【讨论】:

  • 感谢您的解决方案,Williams 先生。我会在接下来的几天里仔细研究这个问题并发布我的发现。
【解决方案2】:

使用Dictionary 对象:

Sub ShiftAndIncrease()
    Dim cell As Range, key As Variant
    With CreateObject("Scripting.Dictionary")
        For Each cell In Range("E1:E12").SpecialCells(xlCellTypeConstants) '
            .Item(cell.Row Mod 12 + 1) = Increase(cell.Value2)
        Next
        Range("E1:E12").ClearContents
        For Each key In .keys
            Range("E" & key).Value = "'" & .Item(key)
        Next
    End With
End Sub

Function Increase(v As Variant)
    Increase = Split(v, "-")(0) & "-" & Split(v, "-")(1) + 1
End Function

【讨论】:

  • 感谢您的解决方案。我会在接下来的几天里讨论这个。
猜你喜欢
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多