Перемещение ячеек на определенные листы, отвечающие условию - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел создать VBA, которая перемещает ряды ячеек в определенные листы.В основном все данные находятся на одном листе, и он копирует строки в тот лист, которому он тоже принадлежит.

Screenshot of Data

Идентификатор - это первые две цифры перед дефисом в номере счета.

Например,

Каждая строка с номером счета-фактуры, начинающимся с «1-», будет вставлена ​​в лист 2

Счет-фактура «3-» будет вставлен в лист3 ... и т. Д.

Мне удалось найти несколько строк кода, которые будут работать, но мне трудно найти правильный код для чтения чисел перед дефисом.

Private Sub CommandButton1_Click()
a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To a

If Worksheets("Sheet1").Cells(i, 1).Value = "1-" Then

    Worksheets("Sheet1").Rows(i).Copy
    Worksheets("Sheet2").Activate
    b = Worksheets("Sheet2").Cells(b + 1, 1).Select
    ActiveSheet.Paste
    Worksheets("Sheet1").Activate

End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select
End Sub

Существует около 16 различных идентификаторов номеров счетов, поэтому у меня будет 16 различных листов, и он тоже будет вставлен.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Определите это:

Dim dashpos As Long

Добавьте эту строку перед копированием в соответствии с вашими данными, если я ввел неверную информацию.Это позволит получить данные слева от -, и вы можете поместить их в нужный вам лист.Число слева будет извлечено и помещено в столбец 4, а затем вы сможете сравнить число там.

dashpos = InStr(1, Cells(i, 1), "-")
Cells(I, 4).Value = Left(Cells(i, 1), dashpos - 1)
0 голосов
/ 08 февраля 2019

Основываясь на том, что сказал Снехил, попробуйте использовать это:

Private Sub CommandButton1_Click()
a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Dim dashpos As Long

For i = 2 To a

dashpos = InStr(1, Cells(i, 1), "-")
Cells(i, 4).Value = Left(Cells(i, 1), dashpos - 1)

If Worksheets("Sheet1").Cells(i, 4).Value = "1" Then

    Worksheets("Sheet1").Rows(i).Copy
    Worksheets("Sheet2").Activate
    b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Sheet2").Cells(b + 1, 1).Select
    ActiveSheet.Paste
    Worksheets("Sheet1").Activate

End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select
End Sub

Я полагаю, что при определении 'b' есть ошибка, см. Мое предложение выше.

0 голосов
/ 07 февраля 2019

Рассматривали ли вы превратить это в таблицу, а затем просто использовать мощный запрос для перемещения данных?Есть ли причина, по которой для этого нужно использовать VBA?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...