Формула Excel переносит строку в другой лист, только если ячейка в столбце A не пуста - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть две таблицы в одной книге Excel, и я хочу только взять строки, в которых есть данные в ячейке (из таблицы 1 в таблицу 2), если в столбце A есть данные.Моя формула на листе 2 - =IF('Raw Data'!A2<>"", 'Raw Data'!A2,), но я на самом деле не хочу, чтобы она вообще приводила строку, если нет данных, как показано в строках 3 и 5. Сейчас она выводит всю строку:

sample data1

В

sample data2

вы видите, что строка все еще переносит строку на лист 2, если данных нет.Любые идеи, как привести только строки с данными?

Sub DataInCell()

Dim rw As Long
rw = 2

' Select initial sheet to copy from
Sheets("Raw Data").Select


' Find the last row of data - xlUp will check from the bottom of the spreadsheet up.
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
' For loop through each row
For x = 2 To FinalRow

       If Cells(x, 1).Value <> 0 Then
        Range("A" & x & ":C" & x).Copy
       Sheets("Sheet1").Select
        NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 'Continue incrementing through the rows.
        Cells(NextRow, 1).Select ' Find the next row.
        ActiveSheet.Cells(NextRow, "A").PasteSpecial xlPasteAll ' Paste information.
        Sheets("Raw Data").Select 'Reselect sheet to copy from. Probably uneccessary.
        End If

Next x
End Sub

1 Ответ

0 голосов
/ 13 декабря 2018

После обновления имен листов в 3-й и 4-й строке вы увидите, что код переносится по всей строке.Вы можете изменить, используя Range(Cells, Cells), если вы хотите частичные диапазоны.

Option Explicit

Sub Non_Blanks()

Dim ms As Worksheet: Set ms = ThisWorkbook.Sheets("Sheet1") '<-- Master Sheet
Dim ns As Worksheet: Set ns = ThisWorkbook.Sheets("Sheet2") '<-- New Sheet

Dim i As Long, MoveMe As Range, LR As Long

For i = 2 To ms.Range("B" & ms.Rows.Count).End(xlUp).Row
    If ms.Range("A" & i) = "*" Then
        If Not MoveMe Is Nothing Then
            Set MoveMe = Union(MoveMe, ms.Range("A" & i))
        Else
            Set MoveMe = ms.Range("A" & i)
        End If
    End If
Next i

If Not MoveMe Is Nothing Then
    LR = ns.Range("A" & ns.Rows.Count).End(xlUp).Offset(1).Row
    MoveMe.EntireRow.Copy
    ns.Range("A" & LR).PasteSpecial xlPasteValuesAndNumberFormats
End If

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