如何使用VBA

时间:2018-07-04 20:39:53

标签: vba move

我正在尝试使用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。 / p>

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

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

就这样。

enter image description here

1 个答案:

答案 0 :(得分:0)

  

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

这应该可以帮助您

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