Как переместить содержимое ячейки с помощью VBA - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь разработать небольшую программу с использованием 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.

Вот и все.

введите описание изображения здесь

1 Ответ

0 голосов
/ 05 июля 2018

Я не уверен, как программа перемещает содержимое вниз из одной ячейки в другую, если следующая ячейка заполнена, не перезаписывая ее, а затем перемещает ее вниз.

Это должно помочь с этим:

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