Buscar y obtener el valor de libro externo basado en ciertas condiciones y pegar valor junto con el estilo de formato utilizando VBA en Microsoft Excel.
En este artículo, aprenderemos cómo obtener datos de un libro de trabajo externo en el libro de trabajo activo en función de cierta condición definida.
En este ejemplo, queremos obtener los detalles del dinero de una persona en particular según el nombre y el tipo de categoría bancaria. Los detalles del dinero se almacenan en el libro de trabajo «Archivo de datos».
En este ejemplo, hemos escrito el procedimiento de VBA «ReadFormatting» que devuelve los detalles del dinero junto con el estilo del formato.
Explicación lógica
El procedimiento «ReadFormatting» toma el objeto de rango como entrada y devuelve la salida en la celda junto al objeto de rango definido.
Comprueba el valor definido en el rango dentro de la primera fila del libro de trabajo «Archivo de datos» y encuentra el número de columna. Comprueba el valor de la celda de la columna anterior del rango definido dentro de la primera columna del libro de trabajo «Archivo de datos» y encuentra el número de fila.
Después de encontrar el número de columna y el número de fila de posible coincidencia, se devuelve el valor de la celda con el número de columna y el número de fila encontrados junto con el estilo de formato.
El procedimiento «ReadFormatting» se puede ejecutar mediante otro procedimiento o evento.
Ejecutaremos el procedimiento «ReadFormatting» de dos formas: -. Procedimiento de uso. Usando el evento de cambio de hoja de trabajo
Usando el procedimiento
Hemos utilizado el procedimiento «CallingProcedure» para llamar al procedimiento «ReadFormatting» con la celda N13 como objeto de rango. Verificará el valor en la celda N13 en la primera fila del libro de trabajo externo para encontrar el número de columna y verificará el valor en la celda M13 en la primera columna del libro de trabajo externo para encontrar el número de fila. Después de encontrar el número de columna y el número de fila, devolverá el valor junto con el estilo de formato.
Usando evento de cambio de hoja de trabajo
Para agregar un evento de cambio de hoja de trabajo, siga los siguientes pasos: -. Haga clic en el nombre de la hoja en el Editor de Visual Basic, para activar el módulo de hoja.
-
Haga clic en la hoja de trabajo en el cuadro combinado de la izquierda en la parte superior de la ventana de código.
-
Haga clic en el cambio en el cuadro combinado de la derecha en la parte superior de la ventana de código.
Hemos utilizado el evento de cambio de hoja de trabajo para ejecutar el procedimiento. El evento de cambio de hoja de trabajo se activa cuando se cambia el valor de cualquier celda del libro. Usando la declaración IF, hemos restringido el evento de cambio para que se active solo cuando se cambia el valor en la celda de la columna I. La celda cuyo valor se cambia actúa como entrada para el procedimiento «ReadFormatting».
Siga a continuación el código
Option Explicit Sub CallingProcedure() 'Calling procedure ReadFormatting for cell N13 Call ReadFormatting(Range("N13")) End Sub Sub ReadFormatting(rng As Range) Dim varRow, varCol As Long Application.ScreenUpdating = False 'Activating workbook "Data file.xlsx" Workbooks("Data file.xlsx").Activate 'Checking for Errors 'If any runtime error occur then it will the pointer to end of the procedure On Error GoTo Last 'Finding the column no after matching rng value in the first row of "Data file.xlsx" workbook varRow = Application.Match(rng.Value, Rows(1), 0) 'Offset method is used for moving one cell in the previous column 'Finding the row no after matching value of cell in the first column of "Data file.xlsx" workbook varCol = Application.Match(rng.Offset(0, -1).Value, Columns(1), 0) 'Using If statement for checking errors 'If error not found in varRow and varCol then execute below code If Not IsError(varRow) And Not IsError(varCol) Then 'Copying value of cell where match of row and column intersect Cells(varCol, varRow).Copy 'Pasting the format of copied cell rng.Offset(0, 1).PasteSpecial xlPasteFormats 'Pasting the value of copied cell rng.Offset(0, 1).PasteSpecial xlPasteValues 'Unselecting the previous copied data and clearing the cache Application.CutCopyMode = False End If Application.ScreenUpdating = True Last: Workbooks("Searching_And_Getting_Data_From_Other_File_Along_With_Formatting.xlsm").Activate End Sub
Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.
Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]