如何使用VBA移动单元格内容



我正在尝试使用 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,并移动一组数字并增加最后一位数字,因此它将在单元格编号 E1 中变为 8-16。

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

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

就是这样。

在此处输入图像描述

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

这应该有助于:

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

相关内容

最新更新