Копирование столбцов, включая пробелы, без пропуска строк. Оставьте "пробелы" пустыми VBA - PullRequest
0 голосов
/ 06 октября 2018

Ошибка определения приложения Копирование указанного столбца и диапазона, включая пробелы, со встроенной кнопкой, выполняющей несколько макросов.Я знаю, что все строки будут заполнены в столбце A, поэтому, если бы я мог сослаться на остальные макросы на A.end

Я посмотрел Google YouTube и здесь, хотя есть много информации о копировании и вставке, Я не могу найти тот, который работает для запуска нескольких макросов.

Макросы 5 и 6 - вот где у меня начинаются проблемы, потому что в этих столбцах есть несколько пробелов.

Необработанные данные для копирования:

Sheet1

Назначение:

Sheet2

Private Sub CommandButton1_Click ()

Worksheets("Sheet1").Range("a2", Range("a2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("a2") 'macro1

Worksheets("Sheet1").Range("d2", Range("d2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("b2")  'Macro2

Worksheets("Sheet1").Range("c2", Range("c2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("c2") 'macro3

Worksheets("Sheet1").Range("g2", Range("g2").End(xlDown)).Copy _
        Worksheets("Sheet2").Range("d2") 'macro4


If Worksheets("Sheet1").Range("e2", Range("e2").End(xlDown)).Value = "<0" Then
    Worksheets("Sheet2").Range("i2").Copy  'macro5

If Worksheets("Sheet1").Range("e2", Range("e2").End(xlDown)).Value = ">0" Then
        Worksheets("Sheet2").Range("j2").Copy 'macro6

Worksheets("Sheet2").Activate 'macro7

1 Ответ

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

Range.end(xldown) только дает вам непрерывный диапазон (фактически он остановится на первой пустой ячейке).

Поскольку вы хотите включить пробелы, вы можете вместо этого работать с последней строкой вашего листавернуться к первой непустой ячейке, обнаруженной в этом столбце (это способ получения последней строки).

Это будет означать что-то вроде:

' If you are new to With statements (below), any objects within the With block that begin with a . relate to "Sheet1". Saves us typing Sheet1 repeatedly, and makes sense to use it since we access a lot of Sheet1's members like range/cells/rows

With Worksheets("Sheet1")

.Range("a2", .cells(.rows.count, "A").End(xlup)).Copy Worksheets("Sheet2").Range("a2") 'macro1

End with

Не проверено, написано намобильный - но надеюсь, что он работает или приближает вас к решению.Вам нужно будет скопировать и вставить вышеупомянутое и изменить A на B, C, D, E и т. Д. Я не был слишком уверен, что вы пытаетесь достичь с условием «<0» в макросе 5 и6. </p>

(Было бы лучше, если бы вы превратили код в параметризованный Sub и просто указали букву / номер столбца в качестве аргумента для подпрограммы, но это просто зависит от того, насколько вы новы для VBA и программирования вобщее - и на данный момент все, что вам легче понять / сохранить.)

Редактировать в отношении макроса 5 и 6

With Worksheets("Sheet1")

Dim cell as range

For each cell in .Range("E2", .Cells(.Rows.Count, "E").End(xlUp))

If cell.Value <= 0 Then 'Get rid of the equal sign if you don't want it in your logic/condition'

Cell.Copy Worksheets("Sheet2").cells(cell.row, "I") 'Macro5

ElseIf cell.value > 0 Then

Cell.Copy Worksheets("Sheet2").cells(cell.row, "J") 'Macro6
End If

Next cell

End With



Worksheets("Sheet2").Activate 'macro7
...