Importación selectiva de registros (Microsoft Excel)
Ole tuvo un problema al importar información a un libro de Excel. Parece que los archivos que necesita importar son archivos de texto que normalmente contienen miles y miles de registros. Sin embargo, Ole no necesita la mayoría de las filas de entrada y normalmente las elimina una vez que los registros se importan a Excel. Ole está buscando una forma de deshacerse de los registros no deseados durante el proceso de importación, para que tenga menos trabajo que hacer cuando los datos estén en su libro de trabajo.
Hay un par de formas diferentes de abordar la solución a este problema. Una solución es utilizar Access como primer paso de importación. Access manejará fácilmente los miles de registros que desea importar, incluso si hay más registros de los que puede importar a Excel. Puede importar el archivo a Access, filtrar los registros no deseados y luego exportar la tabla resultante como un libro de Excel.
Sin embargo, la mejor solución puede ser omitir por completo los filtros de importación de Excel. Esto funciona muy bien si sus datos de importación, como los de Ole, están en un archivo de texto. Puede escribir fácilmente una rutina de importación en VBA y permitirle procesar el archivo de importación. Por ejemplo, considere la siguiente macro:
Sub Import() Dim sFile As String Dim sUnwanted As String Dim sDelim As String Dim iRow As Integer Dim iCol As Integer Dim bBadRecord As Boolean Dim iTemp As Integer sFile = "d:\data.txt" sUnwanted = "bad text" sDelim = "," Open sFile For Input As #1 iRow = 1 While Not EOF(1) 'Scan file line by line iCol = 1 Line Input #1, sBuffer ' Check to see if should ignore record bBadRecord = Instr(sBuffer, sUnwanted) If Not bBadRecord Then iTemp = Instr(sBuffer, sDelim) While iTemp > 0 With Application.Cells(iRow, iCol) .NumberFormat = "@" 'Text formatting .Value = Left(sBuffer, iTemp-1) End With iCol = iCol + 1 sBuffer = Mid(sBuffer, iTemp+1, Len(sBuffer)) iTemp = Instr(sBuffer, sDelim) Wend If Len(sBuffer) > 0 Then With Application.Cells(iRow, iCol) .NumberFormat = "@" 'Text formatting .Value = sBuffer End With End If iRow = iRow + 1 End If Wend Close #1 End Sub
Esta macro abre un archivo de datos y lee cada registro del archivo. Comprueba el registro para asegurarse de que se puede importar y luego lo separa, basándose en un delimitador, y rellena la información en la hoja de trabajo actual. Puede cambiar el nombre del archivo de datos (la variable sFile), el texto que indica un registro incorrecto (variable sUnwanted) y el delimitador (variable sDelim).
Como ejemplo, supongamos que tiene un archivo de datos llamado Clientes.txt. Este archivo contiene todos sus registros de clientes, pero no desea importar los registros de clientes con direcciones dentro de los Estados Unidos. Además, los registros en el archivo de datos utilizan un carácter de tabulación entre cada campo. En este caso, solo necesitaría realizar los siguientes cambios en las variables al comienzo de la macro:
sFile = "d:\Customers.txt" sUnwanted = "United States" sDelim = Chr(9)
Una vez que ejecuta la macro, la hoja de trabajo actual contiene solo los datos deseados.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (8491) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:
link: / excel-Selectively_Importing_Records [Importación selectiva de registros]
.