Как искать совпадающие даты на двух разных листах, а затем копировать соответствующие данные из исходного листа в лист назначения - PullRequest
1 голос
/ 24 мая 2019

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

Некоторые условия:

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

Я новичок в VBA, поэтому я пытался использовать некоторые циклы в комбинации, ноЯ неудачен

Я хочу знать, есть ли более простой способ сделать это?

Sub DataToRegister()


Dim Row As Double 'row is the row variable for the destination spreadsheet
Dim i As Double
Dim x As Integer 'x is the row variable for the source spreadsheet


For Row = 1 To 825

    i = Sheets("Register Data Fields").Cells(Row, 1)

        While i <> DateSerial(1900, 1, 0)
        'DateSerial(1900, 1, 0) --> this is the default for no data in the field, i.e. i want to skip these

            For x = 1 To 825

                If Sheets("HANSON DATA").Cells(x, 2) = Sheets("Register Data Fields").Cells(Row, 1) Then
                Sheets("HANSON DATA").Select
                Cells(x, 1).Select
                Selection.Copy
                Sheets("Register Data Fields").Select
                Cells(Row, 22).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False

                Next

            Next

        Wend

End If


End Sub

Я получаю следующие ошибки:

  • Next без for x2
  • wend без while
  • i несоответствие типа переменной

1 Ответ

0 голосов
/ 24 мая 2019

Обновлен код с исправленным форматом .. Кажется, вы понимаете, в чем дело ...

Sub DataToRegister()


    Dim Row As Long
    Dim i As Date
    Dim x As Long


    For Row = 1 To 825

        i = Sheets("Register Data Fields").Cells(Row, 1)

        If i <> DateSerial(1900, 1, 0) Then
        'DateSerial(1900, 1, 0) --> this is the default for no data in the field, i.e. i want to skip these

            For x = 1 To 825

                If Sheets("HANSON DATA").Cells(x, 2) = Sheets("Register Data Fields").Cells(Row, 1) Then
                    Sheets("HANSON DATA").Select
                    Cells(x, 1).Select
                    Selection.Copy
                    Sheets("Register Data Fields").Select
                    Cells(Row, 22).Select
                    ActiveSheet.Paste
                    Application.CutCopyMode = False
                End If

            Next x

        End If

    Next Row


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