Поддерживать целостность строк при вставке непустых строк
Это сложный вопрос по Visual Basic, поэтому я не уверен, сможет ли кто-нибудь на этом форуме помочь. Но стоит попробовать.
Я написал программу на Visual Basic для использования в качестве макроса в Excel.
В макросе я беру данные в листе 1 (ФИНАЛ) и копирую и вставляю значения в лист 2 (Данные). В моем диапазоне данных на листе 1 есть много пустых ячеек, поэтому я хотел создать программу, которая будет вставлять только строки со значениями (в отличие от строк только с пустыми ячейками).
Моя программа прямо сейчас изменяет мой диапазон данных на листе 1 перед вставкой на лист2, и я не хочу, чтобы …….. мое форматирование также приводило к ошибкам. Вместо этого я хочу, чтобы данные в моем sheet1 оставались полностью неизменными, а пустые строки удалялись при выполнении операции вставки в sheet2.
Мои данные на листе 1 начинаются с колонки AL и переходят к колонке CD.
Очень важно сохранить целостность строк. Я не хочу, чтобы пустые ячейки были стерты во время вставки, а скорее пустые строки из диапазона, который будет удален во время вставки. Таким образом, если между столбцами AL и CD есть строка, в которой есть хотя бы одна точка данных, строка в целом должна сохраняться в вставке. Но для любых строк между столбцами AL и CD, которые являются абсолютно пустыми, их необходимо удалить в действии вставки, идущем в sheet2.
Моя существующая программа ниже. Любая помощь будет принята с благодарностью.
Dim ws As Worksheet
Set ws1 = Worksheets("FINAL")
Set ws2 = Worksheets("Data")
With ws1.UsedRange
lastcolumn = .Cells(1, 1).Column + .Columns.Count - 1
lastrow = .Cells(1, 1).Row + .Rows.Count - 1
End With
ws1.Range(Cells(1, 38), Cells(lastrow, lastcolumn)).AutoFilter field:=1, Criteria1:="<>"
ws1.Range(Cells(1, 38), Cells(lastrow, lastcolumn)).Copy
ws2.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
1 ответ
Это сложный вопрос по Visual Basic, поэтому я не уверен, сможет ли кто-нибудь на этом форуме помочь. Но стоит попробовать.
Надеюсь, стоит попробовать:P
Это то, что вы пытаетесь?
Sub Sample()
Dim wsInput As Worksheet, wsOutput As Worksheet
Dim rng As Range, CellsTobeCopied As Range, aCell As Range
'~~> Sheet which has range that you want to copy
Set wsInput = ThisWorkbook.Sheets("Sheet1")
'~~> Set range that you would like to copy
Set rng = wsInput.Range("A1:E4")
'~~> Output Sheet where you want to paste
Set wsOutput = ThisWorkbook.Sheets("Sheet2")
For Each aCell In rng.Rows
'~~> Check if the entire row is blank
If Application.WorksheetFunction.CountA(aCell) <> 0 Then
'~~> Construct your range to be copied
If CellsTobeCopied Is Nothing Then
Set CellsTobeCopied = aCell
Else
Set CellsTobeCopied = Union(CellsTobeCopied, aCell)
End If
End If
Next
'~~> Copy final range
If Not CellsTobeCopied Is Nothing Then
CellsTobeCopied.Copy
'~~> In case you want to preserve formats
wsOutput.Range("A1").PasteSpecial xlPasteAll
'~~> If you wan tto paste values then comment the above and use this
' CellsTobeCopied.Copy wsOutput.Range("A1")
End If
End Sub
Скриншот