vba有没有一种方法可以比较两个不同工作表或文件中的值?

时间:2019-05-08 12:01:50

标签: excel vba

当我尝试比较两个不同工作簿的值时,我发现了一些困难。代码必须删除不符合if条件的行,也就是说,如果工作簿“ Nuevo hoja decálculo”中的值介于另一个工作簿“ Formato CO-08a”的值之间,则它将继续计算一些变量(m,y_n,y),如果该值确实满足第二个if条件,则该行将被删除。

我还尝试使用同一工作簿中的工作表,将工作簿“ Formato CO-08a”中的工作表复制到工作簿“ Nuevo hoja de calculo”中。但是它仍然不起作用,因为该程序无法从此复制的工作表中读取值。我在下面编写的示例使用同一工作簿中的工作表,但我的目标是使用2个不同的工作簿。

For i = 1 To Sheets("Seleccion_ECs").listaopciones.ListCount
Line1:
        For Z = 0 To 7
            Debug.Print Z
            If (Sheets("Seleccion_ECs").Cells(i + 1, E).Value >= ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(40 + Z, 4).Value) And (Sheets("Seleccion_ECs").Cells(i + 1, E).Value <= ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(41 + Z, 4).Value) Then

                m = (ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(41 + Z, 2).Value - ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(40 + Z, 2).Value) / (ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(41 + Z, 4).Value - ThisWorkbook.Sheets("Requisitos Contenedor + ATI").Cells(40 + Z, 4).Value)

                y = m * (Sheets("Seleccion_ECs").Cells(i + 1, E).Value - Sheets("Requisitos Contenedor").Cells(40 + Z, 2).Value) + Sheets("Requisitos Contenedor").Cells(40 + Z, 4).Value

                y_n = Sheets("Seleccion_ECs").Cells(i + 1, Q).Value

                Debug.Print ("Se ha encontrado un intervalo")

                If y_n > 1.02 * y Then 'Si se sale en un 2 por ciento de la zona aceptada, se elimina la fila.

                    Worksheets("Seleccion_ECs").Rows(i + 1).Delete

                    GoTo Line1

                Else:

                    i = i + 1 'Preguntar si vale esto teniendo el for i=0

                    GoTo Line1

                End If

            End If

        Next Z

Next i

提前谢谢

1 个答案:

答案 0 :(得分:0)

我建议使用以下技术来引用多个工作簿/工作表中的单元格。当用户可以更改活动的工作簿/工作表时,这在较长的处理会话中尤其安全,并且通过减少键入次数还可以节省您的时间。

Dim wbSource as Workbook, wbDest as Workbook
Dim shSEC as Worksheet, shREQ as Worksheet

Set wbSource = Thisworkbook
Set wbDest = <.... this is the reference of the other file you're gonna use>
Set shSEC = wbSource.Worksheets("Seleccion_ECs")
...
If shSEC.Cells(i + 1, E).Value >= shREQ.Cells(40 + Z, 4).Value) ...

您应该在每个Set之后插入If Err.Number <> 0 Then <error hadler>来检查是否成功,以确保在循环之前一切正常。

您可以将GoTo ...替换为Exit For。编将以相同的方式工作,但它稍微优雅一些​​:)