Как скопировать отдельные части таблицы с листа на другой - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь скопировать некоторые детали в Excel из столбцов листа 1-5 в столбцы листа 1-4, но только для строк, содержащих текст или значения на первом листе под конкретным столбцом (в данном случае,Колонка 2). Между ними есть другие столбцы, поэтому мне нужно иметь возможность использовать точные столбцы, а не A: D, например. Пример того, чего я пытаюсь достичь:

Excel screenshot of dummy data

Я пытался использовать простую функцию IF с A: A <> "", чтобывключите все строки, в которых есть какие-либо данные, однако это, кажется, не копирует, как мне нужно, и иногда, основываясь на моих попытках, я также получаю ошибки циклической ссылки. Кроме того, я не уверен, как сделать так, чтобы это вставлялось в нижней части таблицы, которая будет расширяться с каждым добавлением.

Я понимаю, что, возможно, более простым вариантом было бы просто полностью скопировать лист 1 и использовать фильтр в строке 1, чтобы отменить выбор пробелов в A: A, но на листе гораздо больше информации, что это будет пустая трата времени,и дополнительно информация постоянно добавляется, поэтому мне нужно что-то масштабируемое. Мне также пришло в голову, что, делая это, я включаю информацию из «верхнего» и «нижнего колонтитула», в основном, из замороженной панели, которая мне не нужна.

Может ли это быть сделано с помощью простой функции или для этого потребуется макрос?

Пожалуйста, имейте в виду, что я хлам в программировании, просто пытаюсь облегчить свою жизнь и учиться так, как яидти. Многие форумы по Excel помогают, но я не кодер. Я могу в значительной степени понять, что делает код, и могу соответственно изменить его:)

1 Ответ

0 голосов
/ 30 октября 2019

Как и предполагалось, этого нельзя сделать с помощью формул. Для этого есть разные способы. Ниже приведен один из подходов:

Sub CopyFilteredRows()
    Dim oSourceSheet As Worksheet: Set oSourceSheet = ThisWorkbook.Worksheets("Sheet3")             ' Set your source sheet here
    Dim oRng As Range: Set oRng = oSourceSheet.Range("A2:E" & oSourceSheet.Range("C" & oSourceSheet.Rows.Count).End(xlUp).Row)

    ' Set filter on column B
    oRng.AutoFilter
    oRng.AutoFilter 2, "<>"

    ' Copy to specified sheet
    oRng.SpecialCells(xlCellTypeVisible).EntireRow.Copy ThisWorkbook.Worksheets("Sheet4").Range("A2")   ' Change your destination sheet here

    ' Clear objects
    Set oRng = Nothing
    Set oSourceSheet = Nothing

End Sub

Вставьте вышеуказанный UDF в модуль и затем запускайте его всякий раз, когда вы хотите выполнить копирование. Я подозреваю, что вам придется немного изменить его, чтобы вы могли удовлетворить ваш конкретный сценарий, но он должен дать вам начало

ПРИМЕЧАНИЕ: Я написал это, так как это было легко и быстроделать. Вообще говоря, поскольку SO не является службой написания кода, вам придется попытаться помочь нам

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