Estoy tratando de comparar dos archivos de Excel y almacenar lo que hay solo en el nuevo archivo en una hoja y almacenar lo que hay solo en el anterior en otra hoja. (Básicamente new - old = sheet1
y old - new = sheet2
.) Un SO answers sugiere recorrer todas las celdas y hacer una comparación simple. Soy (muy) nuevo para VBA y Macros, así que no sé cómo hacer esto. ¿Cómo se hace (o dónde puedo aprender esto)?Macro de VBA para comparar todas las celdas de dos archivos de Excel
Respuesta
Do NOT ¡¡atraviesa todas las celdas !! Hay muchos sobrecargas en las comunicaciones entre las hojas de trabajo y VBA, tanto para leer como para escribir. Looping a través de todas las células será agonizantemente lento. Estoy hablando horas.
En su lugar, cargue una hoja completa a la vez en una matriz Variant. En Excel 2003, esto toma alrededor de 2 segundos (y 250 MB de RAM). Entonces puedes recorrerlo en un instante.
En Excel 2007 y más tarde, las hojas son aproximadamente 1000 veces más grandes (1048576 filas × 16384 columnas = 17 000 millones células, en comparación con 65.536 filas × 256 columnas = 17 000 mil en Excel 2003). Se encontrará con un error de "Memoria insuficiente" si intenta cargar la hoja completa en una Variante; en mi máquina solo puedo cargar 32 millones de células a la vez. Por lo tanto, debe limitarse al rango que sabe que tiene datos reales, o cargar la hoja poco a poco, p. 30 columnas a la vez.
Option Explicit
Sub test()
Dim varSheetA As Variant
Dim varSheetB As Variant
Dim strRangeToCheck As String
Dim iRow As Long
Dim iCol As Long
strRangeToCheck = "A1:IV65536"
' If you know the data will only be in a smaller range, reduce the size of the ranges above.
Debug.Print Now
varSheetA = Worksheets("Sheet1").Range(strRangeToCheck)
varSheetB = Worksheets("Sheet2").Range(strRangeToCheck) ' or whatever your other sheet is.
Debug.Print Now
For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
If varSheetA(iRow, iCol) = varSheetB(iRow, iCol) Then
' Cells are identical.
' Do nothing.
Else
' Cells are different.
' Code goes here for whatever it is you want to do.
End If
Next iCol
Next iRow
End Sub
Para comparar con una hoja de un libro diferente, abra ese libro y obtener la hoja de la siguiente manera:
Set wbkA = Workbooks.Open(filename:="C:\MyBook.xls")
Set varSheetA = wbkA.Worksheets("Sheet1") ' or whatever sheet you need
+1 totalmente de acuerdo, nunca recorra todas las celdas – stema
Buen consejo. Me di cuenta de que solo hay una columna que necesito repetir. ¿Cómo recomendarías que haga eso? Y compárelo con una columna en otro libro de trabajo. Diff más bien. –
Quite el bucle For iCol ... Next iCol. Configure iCol a lo que necesite en cada hoja. –
Una muy simple y comprueba que puedes hacer con fórmulas Móviles:
Hoja 1 (nuevo - edad)
=(if(AND(Ref_New<>"";Ref_Old="");Ref_New;"")
Hoja 2 (antiguo - nuevo)
=(if(AND(Ref_Old<>"";Ref_New="");Ref_Old;"")
Este fórmulas deben trabajar para un INGLÉS Excel. Para otros idiomas necesitan ser traducidos. (Para alemán puedo ayudar)
Debe abrir los tres documentos de Excel, luego copie la primera fórmula en A1 de su hoja 1 y la segunda en A1 de la hoja 2. Ahora haga clic en A1 de la primera celda y marque "Ref_New", ahora puede seleccionar su referencia, ir al nuevo archivo y hacer clic en A1, volver a la hoja 1 y hacer lo mismo para "Ref_Old" con el archivo anterior. Reemplace también el otro "Ref_New".
Haga lo mismo para la Hoja dos.
Ahora copie la forma A1 de formaula sobre el rango completo donde los datos zour están en el archivo antiguo y el nuevo.
Sin embargo, dos casos no están cubiertos aquí:
- En la celda de comparación de nuevos y viejos son los mismos datos (resultante de la célula estará vacía)
- En la celda de comparación de nuevos y viejos es dife datos (la celda resultante estará vacía)
Para cubrir estos dos casos, también debe crear su propia función, significa aprender VBA. Una página Excel muy útil es cpearson.com
- 1. Excel VBA - Ejecutar macro antes de guardar
- 2. Cómo iterar a través de todas las celdas en Excel VBA o VSTO 2005
- 3. ¿Combina varias celdas en una en Excel con macro?
- 4. Establezca ArrayFormula en muchas celdas de Excel usando VBA
- 5. Deshacer de edificio en una macro de Excel de VBA
- 6. Cómo bucle de filas con macro de Excel VBA?
- 7. Renombrar archivos con Excel VBA
- 8. ¿Cómo puedo actualizar todas las tablas dinámicas en mi libro de Excel con una macro?
- 9. ¿Cómo generar XML desde una macro de Excel VBA?
- 10. ¿Cómo configuro el color de fondo de las celdas de Excel usando VBA?
- 11. EXcel VBA: Macro de Excel para crear una tabla en PowerPoint
- 12. Comparar dos archivos
- 13. Subcadena de Excel VBA
- 14. ¿Cómo configurar una prueba unitaria en VBA Excel Macro?
- 15. Reemplazar texto en el código VBA de archivos de Excel
- 16. Abrir archivo de Excel para leer con VBA sin pantalla
- 17. VBA de Excel: hacer que parte de la cadena negrita
- 18. ¿Cómo obtengo los conteos para seleccionar todas las celdas que no están en blanco en Excel?
- 19. Macro independiente de Excel
- 20. Seleccionar celdas no en blanco en Excel con VBA
- 21. Excel VBA Signos de libra y de dos puntos ¿Significado?
- 22. CopyOrigin en Insertar en Excel VBA
- 23. macro de VBA en Excel para ejecutar la declaración Insertar SQL
- 24. No puedo VBA escribir datos en celdas en Excel 2007/2010 dentro de una función
- 25. Uso de VBA para exportar todas las consultas SQL de MS Access a archivos de texto
- 26. comparar dos archivos de texto usando linq?
- 27. Comparar dos archivos con Aptana
- 28. asincrónicos Descargas de archivos dentro de VBA (Excel)
- 29. Uso tablediff de comparar todas las tablas
- 30. Cerrar la aplicación de Excel usando VBA
puede utilizar ADO así: http://stackoverflow.com/questions/ 5388095/is-it-possible-to-set-foreign-key-between-two-excel-sheets/5388489 # 5388489 – Fionnuala