Intentar usar una fórmula IF para copiar dinámicamente el contenido de la celda dada la presencia de un valor específico

0

Necesito duplicar celdas de una hoja de trabajo a otra si el registro asociado [fila] contiene una palabra dada.

Diga que la fila 2 tiene "foo" en la celda A, me gustaría duplicar todas las celdas de esa fila en otro libro de trabajo. Si A3 tiene "floop" en él, no se deben duplicar las celdas, se omitirá esencialmente (sin una fila en blanco).

Los datos son así:

    A   |   B   |  C

2  foo  | blah  | blah

3 floop | blah  | blah

4  foo  | blah  | blah

La tabla resultante sería así:

    A   |   B   |  C

2  foo  | blah  | blah

3  foo  | blah  | blah

-

Esto es lo que he conseguido:

He creado una tabla de ayuda que comienza en A52 para ordenar los datos para los que "foo" está presente en la columna A utilizando la fórmula = IF (NÚMERO (BUSCAR ("foo", a2)), a2, "") [Lo que tengo la sensación es redundante, pero es el único bit que parece estar funcionando.]

En la tabla final, estoy usando = IF (ISNUMBER (ISBLANK (A52)), A2, [!!!!!]) [Donde [!!!!!] es el código de pantalla que no conozco.] Se resuelve como "FALSO"

Sé que esta es probablemente una pregunta elemental, pero no he tenido suerte de encontrar una respuesta en otro lugar.

Gracias de antemano! - p

PS Mientras escribo esto, me doy cuenta de que voy a necesitar procesar toda la fila en lugar de las celdas individuales, por lo que es probable que necesite otro enfoque. ¡Oh bien! ¡He llegado hasta aquí!

    
pregunta Alexis Rachel 20.04.2018 - 01:15

1 respuesta

1

El uso de una fórmula IF para lograr esto va a ser problemático por varias razones. Pero asumiendo que funcionó, siempre tendrá el problema de que se debe colocar una fórmula dentro de una celda y, por lo tanto, su libro de trabajo no es escalable (es decir, ¿qué sucede con el tiempo si / cuando agrega / elimina filas)? Claro, puedes solucionarlo también (por ejemplo, formateando tus datos como una tabla / lista adecuada), pero desde mi experiencia, sería mejor usar una macro para hacer esto.

Paso 1: agrega la pestaña Desarrollador a Excel

En primer lugar, debe asegurarse de tener la pestaña Desarrollador visible en la cinta de Excel. Si ya está allí (normalmente es el último después de la pestaña Ver, luego vaya al Paso 2: Crear su macro. De lo contrario, siga los pasos a continuación:

  1. Iniciar MS Excel
  2. Ir a Excel > Preferencias (o simplemente presione las teclas comando , )
  3. Seleccione la cinta & Icono de la barra de herramientas
  4. Asegúrese de que la pestaña de la Cinta esté seleccionada en la parte superior
  5. En el lado derecho, verá una lista de pestañas. Seleccione la casilla de verificación junto a la pestaña Desarrollador (probablemente esté en la parte inferior)
  6. Haz clic en el botón Guardar
  7. Salir de Preferencias
  8. Ahora verá la pestaña Desarrollador (vea la imagen a continuación):

Paso2:Creandotumacro

Ahoranecesitamoscreartumacro.Sigaestospasos:

  1. EnExcel,asegúratedetenerellibroabierto
  2. SeleccionalapestañaDesarrollador
  3. HagaclicenlaopcióndeVisualBasic(enelextremoizquierdodelacinta)
  4. EstoabrirálaventanadeMicrosoftVisualBasic
  5. Lapartesuperiorizquierdadelaventanadebeversealgocomo:

  6. Ahora haga clic con el botón derecho en ThisWorkbook y seleccione Insertar > Módulo (ver abajo)

  1. En unos momentos, debería ver una ventana blanca abierta en el lado derecho del Editor de Visual Basic
  2. Ahora copie el código de abajo y péguelo en el espacio en blanco:

    Sub CopyRowsBasedOnCellValue()
    'This macro copies rows from one worksheet to another within the same workbook if that row contains a specific value in Column A
        Dim xRg As Range
        Dim xCell As Range
        Dim X As Long
        Dim Y As Long
        Dim Z As Long
        X = Worksheets("Sheet1").UsedRange.Rows.Count
        Y = Worksheets("Sheet2").UsedRange.Rows.Count
        If Y = 1 Then
            If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then Y = 0
        End If
        Set xRg = Worksheets("Sheet1").Range("A1:A" & X)
        On Error Resume Next
        Application.ScreenUpdating = False
        For Z = 1 To xRg.Count
            If CStr(xRg(Z).Value) = "foo" Then
                xRg(Z).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & Y + 1)
                Y = Y + 1
            End If
        Next
        Application.ScreenUpdating = True
    End Sub
    
  3. Ahora debería ver algo como lo siguiente:

  • Ahora deberá personalizar este código ligeramente, ya que actualmente está escrito específicamente para el ejemplo de su pregunta. Necesitas personalizar los siguientes aspectos:

    • Reemplace las dos instancias de Sheet1 con el nombre de su primera hoja de trabajo (es decir, de la que está copiando)
    • Reemplace las tres instancias de Sheet2 con el nombre de su segunda hoja de trabajo (es decir, a la que está copiando)
    • La instancia de A1:A indica la columna en la que se busca el valor que está tratando de igualar (es decir, el valor "foo" en su ejemplo. Si no está la columna A en su hoja de trabajo, cambie la A a la columna que sea debe ser. Por ejemplo, si su hoja de trabajo contiene el valor "foo" en la Columna D, entonces debe ser D1:D
    • Finalmente, verá una única instancia de "foo" en el código. Reemplace foo con cualquier valor que esté tratando de igualar.
  • Finalmente, deberá guardar su libro de trabajo como uno habilitado para macros. Para hacer esto, haga clic en el icono de Excel en la parte superior izquierda para volver a Excel y luego elija la opción Guardar como en el menú Archivo. Para el formato de archivo, debe seleccionar la opción Libro de Excel habilitado para macros (.xlsm) de la lista desplegable.

  • Paso 3: uso de la macro

    Ahora estás listo para ir. Para usar la macro, sigue estos pasos:

    1. Inicia Excel y abre el libro
    2. Selecciona la pestaña Desarrollador
    3. Haz clic en el icono de Macros (debería ser el segundo)
    4. Esto abrirá la ventana Macro:
    5. Seleccione la macro CopyRowsBAsedOnCellValue (ver más abajo)

  • Haz clic en el botón Ejecutar
  • Su macro se ejecutará y todas las filas que coincidan con los criterios se copiarán en su hoja de destino. A continuación se muestra una imagen que muestra los disparos de antes y después, según su ejemplo:
  • Nota:Elcódigoanteriorseadaptódelcódigooriginariode enlace . No tengo ninguna afiliación con ese sitio web en absoluto.     
    respondido por el Monomeeth 21.04.2018 - 03:30

    Lea otras preguntas en las etiquetas