Как скопировать данные из ячейки в sheet1 в sheet2, проходя по каждой ячейке? - PullRequest
1 голос
/ 05 февраля 2020

Как пройтись по листу 1, чтобы увидеть, есть ли данные в этой ячейке?

  • Если данных нет, то go до следующей ячейки.
  • Если есть данные в следующей ячейке вставьте их в sheet2.

Критерии:

  • Я не могу использовать установленный диапазон, который будет меняться при изменении данных в sheet1.
  • Я могу сохранить имена листов постоянными, такими как sheet1 и sheet2.

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

Я публикую код, с которым работал, чтобы проверить данные в столбцах, но если нет начальных данных он пропустит весь ряд.

Sub CopytoImport()
    Dim wb As Workbook
    Dim iCol As Long
    Dim ws As Worksheet

    Sheets("sheet2").Cells.ClearContents

    ' Loop through the column
    For iCol = 1 To 22 ' Call out columns I cannot set this every time it should look threw all cells
        With Worksheets("sheet1").Columns(iCol)
            ' Check tht column is not empty
            If .Cells(1, 1).Value = "" Then
                'Nothing in this column
                'Do nothing
            Else
                ' Copy the coumn to te destination
                Range(.Cells(1, 1), .End(xlDown)).Copy _
                    Destination:=Worksheets("sheet2").Columns(iCol).Cells(1, 1)
            End If
        End With
    Next iCol

    ActiveWorkbook.Save
End Sub


Function runcode()
    Call CopytoImport
End Function

1 Ответ

0 голосов
/ 05 февраля 2020

Cells(1, 1) это просто RANGE.("A1"), вы работаете только с этой ячейкой в ​​вашем коде. Вам понадобится Cells(1, iCol), чтобы учесть, в каком столбце вы находитесь во время вашего l oop.

Вам также может понадобиться вложенная l oop, поскольку вы также просматриваете строки. Основа c вложенного l oop выглядит следующим образом. Обратите внимание, что Cells(1,1) заменяется на i и j, представляющие, в какой строке и в каком столбце мы находимся. Возможно, это не самый быстрый способ достичь желаемых результатов, но, похоже, это то, с чем вы просите помощи. Вам также нужно будет указать последнюю строку (с + 1 в конце, чтобы получить следующую пустую ячейку) в вашем Sheet2 для того, когда вы вставляете данные. Вы бы поместили это прямо под тем местом, где l oop начинает проходить по строкам Таким образом, последняя строка вашего листа2 пересчитывается при каждом перемещении данных на этот лист. Я не собираюсь переписывать ваш код, поскольку вы заявили, что он неполон, но вот пример, который должен вам помочь.

For j = 5 To lastcolumn

    For i = 5 To lastrow

        Dim lastrow2 As Long
        lastrow2 = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1

        If Worksheets(2).Cells(i, j).Value <> 0 Then
        Worksheets(1).Range("C" & lastrow2).Value = Worksheets(2).Cells(i, j).Value
        Worksheets(1).Range("B" & lastrow2).Value = Worksheets(2).Cells(2, j).Value

        End If

    Next i

Next j

Чтобы найти свою последнюю строку:

dim lastrow as long
lastrow = Range("A" & rows.count).End(xlup).Row ' or whatever column contains the data

Чтобы найти последний столбец

Dim lastcolumn As Long

lastcolumn = Worksheets(2).Cells(2, Columns.Count).End(xlToLeft).Column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...