【问题标题】:How to Move a cell contents using VBA如何使用 VBA 移动单元格内容
【发布时间】:2018-07-04 20:39:53
【问题描述】:

我正在尝试使用 VBA 开发一个小程序,并想添加它。与往常一样,我一直在努力让它正确,任何人都可以在这个项目上使用一些帮助。我不确定如果下一个单元格已满而不覆盖它,程序如何将内容从一个单元格向下移动到下一个单元格,然后将其向下移动。 我希望你能帮忙。

我目前正在使用下面的程序。

Sub do_it()

    Dim n, sht As Worksheet, cell As Range, num, tmp, rngDest As Range

    Set sht = ActiveSheet

    n = sht.Range("A1")

    For Each cell In sht.Range("D1:D12,A16:A31,D16:D31,G16:G31,J16:J31,M16:M31").Cells

        tmp = cell.Offset(0, 1).Value

        If cell.Value = n And tmp Like "*#-#*" Then

            'get the first number
            num = CLng(Trim(Split(tmp, "-")(0)))
            Debug.Print "Found a positive result in " & cell.Address

            'find the next empty cell in the appropriate row
            Set rngDest = sht.Cells(num, sht.Columns.Count).End(xlToLeft).Offset(0, 1)
            'make sure not to add before col L
            If rngDest.Column < 12 Then Set rngDest = sht.Cells(num, 12)

            cell.Offset(0, 1).Copy rngDest
            Exit For

        End If
    Next

End Sub

我正在尝试让程序在 6 列范围 E1:E12,B16:B30,E16:E30,H16:H30,K16:K30,N16:N30 的列中移动所有数字集。

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

对于其余列范围 B16:B30,E16:E30,H16:H30,K16:K30,N16:N30 我需要程序来移动数字集(范围内可能不止一组数字)向下到它下面的单元格并增加集合中的最后一个数字(不限制计数)。因此,在单元格 N18 (5-3) 的示例中,它将移动到 N19 并变为 5-4(完成后删除 N18 中的内容)。上面右侧的第二个相邻列,在这种情况下为 N18,仅位于以下位置:C16:C30,F16:F30,I16:I30,L16:L30,O16:O30 的单元格包含必须移动的值但数量没有变化。单元格 O18 将向下移动到 O19 并且仍然具有 9.99 的数量。操作后 N18 和 O18 将变为空白)。

如果最后一个数字是 15,则有两个例外,请参见单元格 B30 (8-15)。必须发生两件事:

1) 我需要程序引用以下 5 个可能的单元格中的数字:

Cell B30 go to cell B32, reference number 1
Cell E30 go to cell E32, reference number 2
Cell H30 go to cell H32, reference number 3
Cell K30 go to cell K32, reference number 4
Cell N30 go to cell N32, reference number 5

使用示例 B30,参考编号为 1 (B32),因此程序将在 D1:D12 列中搜索数字 1 并移动数字集并增加最后一位数字,因此它将变为 8-16单元格编号 E1。

2) 单元格 C31 中的值必须通过引用单元格 B30 中的第一个数字作为参考来移动,并搜索以下 10 个可能的单元格:A35,D35,G35,J35,M35,Q35,A39,D39G39,J39, M39,O39 找到该数字(在本例中,8 将是单元格 D39,数字 2.22 将移动到单元格 D40。

此操作后,单元格 B30 和 C30 中都没有内容。

就是这样。

enter image description here

【问题讨论】:

  • TLDR TLDR
  • 这里有很多信息。此外,您告诉我们单元格K1 在第 1 行,这完全没有必要。请edit您的问题。解释 1 个具体问题,您尝试过的内容,并陈述一个实际问题。并不是说“你能帮帮我”不是问题 :) 祝你好运
  • 我已经解决了我的请求,谢谢 Russ

标签: vba move


【解决方案1】:

如果下一个单元格已满而不覆盖它,我不确定程序如何将内容从一个单元格向下移动到下一个单元格,然后将其向下移动。

这应该会有所帮助:

  Cells(irow + 1, icol).Insert Shift:=xlDown
  Cells(irow, icol).Copy Cells(irow + 1, icol)
  Cells(irow, icol).Clear

【讨论】:

  • 谢谢 dcromley,我一定会尝试的。
  • 嗨,我试过你的代码,但我无法让它工作,所以我发布了程序,看看是否能发现问题。 Sub do_it() Dim n, sht As Worksheet, cell As Range, num, tmp, rngDest As Range Set sht = ActiveSheet n = sht.Range("A1") For Each cell In sht.Range("D1:D12,A16 :A30,D16:D30,G16:G30,J16:J30,M16:M30").Cells tmp = cell.Offset(0, 1).Value 如果 cell.Value = n 和 tmp 像 "#-# " 然后'获取第一个数字 num = CLng(Trim(Split(tmp, "-")(0))) Debug.Print "发现结果为阳性
猜你喜欢
  • 2014-09-24
  • 2019-01-26
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多