Excel VBA сравнить, добавить строку и заполнить - PullRequest
0 голосов
/ 19 октября 2018

Итак, это пример моих данных:

A1.1

А2.2

A3.5

А4.7

A5.8

A6.9

A7.10

Что я хочу сделать, это выбрать диапазон (например, от А2 до конца строки, в которой есть данные), вставить строку, если следующее число в последовательности не равно предыдущему числу + 1. Заполнитьс этим номером (предыдущее число +1) в только что созданную строку, затем перейдите к следующей строке и повторите вычисления.Это будет продолжаться до тех пор, пока программа не встретит нулевое значение.

Я предполагаю, что это будет псевдо

  Range = select range in column

  For range when value is not null

  If A3 <> value in A2 +1

     Insert row below A2
     Insert value into new A2 (should Now be blank) as sum of A2 + 1
     Then go to next row
     Go back to blank check for loop 
  Else

      Go to next row
      Go back to blank check

  End for

Я не совсем уверен, что что-то пропустил, но яЯ ужасен в петлях в VBA, так как прошло много лет с тех пор, как я последний раз использовал это.Извините за форматирование, сделал это на телефоне

Заранее спасибо!

1 Ответ

0 голосов
/ 19 октября 2018

Ваша логика в коде довольно здравая, но если вы планируете программировать больше, практиковать синтаксис никогда не помешает.Я изменил его так, чтобы он проверял, пуста ли ячейка, что я предполагаю, что вы подразумеваете под Null, но если вы на самом деле имеете в виду NULL, то вы можете изменить isempty на isnull.Я вроде позволил вам выбрать диапазон, но не совсем.Это требует, чтобы вы вошли в код и изменили maxrow на последнюю строку, которую вы хотите посмотреть.Имейте в виду, что если в вашем коде отсутствуют числа между ними, он будет искать только до 100 значений, включая те, которые помещены макросом.

Если вы хотите, чтобы пользователь мог иметь пользователяпроще ввести номер последней строки, рассмотрите возможность использования InputBox

Option Explicit

Sub numberfiller()

    Dim i As Long
    Dim maxrow As Long

    i = 2
    maxrow = 100
    With ThisWorkbook.Worksheets(1)

        While Not IsEmpty(.Range("A" & i).Value) And i < maxrow
            If Not .Range("A" & i).Value = .Range("A" & i - 1).Value + 1 Then
                .Range("A" & i).EntireRow.Insert shift:=xlDown
                .Range("A" & i).Value = .Range("A" & i - 1).Value + 1
            Else
                i = i + 1
            End If
        Wend
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...