1

Я хотел бы сравнить значения ячеек из двух разных файлов Excel.

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

Sub Update_production()
    Dim i As Integer, j As Integer, refmiss As Integer, comments As String
    i = 5
    j = 15
    refmiss = 0

    Do while '[Production pallet.xlsx]September'!$A$i.Value <> ""          

        Do While Cells(j, 1).Value <> ""
            If (Cells(i, 1).Value <> Cells(j, 1).Value) Then
                j = j + 1
            Else
                Cells(j, 3).Value = Cells(j, 3).Value + Cells(i, 3).Value
                Cells(j, 4).Value = Cells(j, 4).Value + Cells(i, 4).Value
                j = j + 1
                refmiss = 1
            End If
        Loop
        If (refmiss = 0) Then
            comments = Cells(i, 1).Value
            Range("A15").Select
            ActiveCell.End(xlDown).Select
            ActiveCell.Offset(1, 0).Select
            ActiveCell.Value = comments
            ActiveCell.Offset(0, 2).Value = Cells(i, 3).Value
            ActiveCell.Offset(0, 3).Value = Cells(i, 4).Value
        End If
        refmiss = 0
        i = i + 1
        j = 15
    Loop
End Sub

Заранее благодарю за вашу помощь (если возможно сохранить время, это может быть очень приятно, потому что я не знаю, сколько строк будет в обеих таблицах)

1 ответ1

0

Вы захотите использовать метод application.worbook.open .

Sub Openfilemacro()
Dim myfile As String

myfile = "Path\to\file"

Application.Workbooks.Open Filename:=myfile

End Sub

Затем вы можете ссылаться между книгами для сравнения, просто укажите WB и WS, как вы уже сделали.

Как то так, но адаптировано для вас -

Sub Openfilemacro()
Dim myfile As String
Dim workbookA As Workbook
Dim workbookB As Workbook
myfile = "Path\to\file"
workbookA = ThisWorkbook
workbookB = Application.Workbooks.Open(Filename:=myfile)

Dim c As Range
For Each c In Workbooks(workbookA).Range("A:A")
    If c = "" Then Exit Sub
        'search workbookB for c.value
        'do stuff

Next

End Sub

Небольшое замечание - вы, вероятно, хотите избежать использования свойств .select и activecell поскольку они могут стать грязными. Старайтесь всегда ссылаться на фактическую ячейку, и нет необходимости когда-либо выбирать ячейку. Может быть, вам понадобится workbook.activate , но в общем случае нежелательно выбирать что-либо или ссылаться на активную ячейку, особенно уже с for loop .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .