0 votos

Intentar utilizar una fórmula SI dinámicamente copiar el contenido de la celda debido a la presencia de un valor específico

Necesito duplicar celdas de una hoja de cálculo a otro si el registro asociado [fila] contiene una palabra dada.

Dicen que la fila 2 ha "foo" en la celda de Una, me gustaría duplicar todas las celdas en la fila para otro libro. Si A3 se ha "floop" en ninguna de las células debe ser duplicado-sería omitido esencialmente (sin una fila en blanco).

Los datos 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 más lejos que he llegado:

He creado una tabla auxiliar principio en A52 para ordenar los datos para que "foo" está presente en la columna a la utilización de la fórmula =SI(ISNUMBER(SEARCH("foo",a2)),a2,"") [Que tengo la sensación de que es redundante, pero es la única que parece estar funcionando.]

En la mesa final estoy usando =SI(ISNUMBER(ESBLANCO(A52)),A2,[!!!!!]) [En [!!!!!] es la pantalla de código que no sé.] Se resuelve como "FALSA"

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

Gracias de antemano! - p

PS Como estoy escribiendo esto me doy cuenta de que voy a necesitar para procesar toda la fila opuesta a la de las células individuales, así que estoy probable que va a necesitar otro enfoque. Oh bien! He llegado hasta aquí!

1voto

Monomeeth Puntos 139

El uso de una fórmula SI para lograr este va a ser problemático para un número de razones. Pero suponiendo que tengo que trabajar, siempre vas a tener el problema de que una fórmula tiene que ser colocado dentro de una célula y, por tanto, el libro no es escalable (es decir, qué ocurre con el tiempo si/al agregar/eliminar filas)? Seguro, usted puede evitar que demasiado (por ejemplo, mediante el formato de los datos como una adecuada tabla/lista), pero desde mi experiencia, sería mejor utilizar una macro para hacer esto.

Paso 1: Agregar la pestaña Programador de Excel

En primer lugar usted necesita para asegurarse de que tiene la ficha Programador visibles en la cinta de opciones de Excel. Si ya está allí (normalmente es la última después de que la ficha Ver, a continuación, vaya al Paso 2: Creación de la macro. De lo contrario, siga los pasos a continuación:

  1. Lanzamiento de MS Excel
  2. Ir a Excel > Preferencias (o presione el comando, llaves)
  3. Seleccione la Cinta de opciones Y la Barra de herramientas el icono de
  4. Garantizar la ficha de la Cinta está seleccionado en la parte superior
  5. En el lado derecho verá una lista de las pestañas - seleccione la casilla de verificación junto a la ficha Programador (es probablemente aparece en la parte inferior)
  6. Haga clic en el Guardar botón
  7. Salir De Preferencias
  8. Ahora vamos a ver la ficha Programador (ver imagen de abajo):

enter image description here

Paso 2: Creación de la macro

Ahora necesitamos crear la macro. Siga estos pasos:

  1. En Excel, asegúrese de que tiene el libro abierto
  2. Seleccione la ficha Programador
  3. Haga clic en Visual Basic de la opción (en el extremo izquierdo de la Cinta de opciones)
  4. Esto abrirá la ventana de Visual Basic de Microsoft
  5. La parte superior izquierda de la ventana debe ser algo como:

  6. Ahora haga clic en ThisWorkbook y seleccione Insertar > Módulo (ver más abajo)

  1. En unos momentos usted debe ver a un blanco con una ventana abierta en el lado derecho del Editor de Visual Basic
  2. Ahora copia el siguiente código y pegarlo 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 usted debería ver algo como la siguiente:

enter image description here

  1. Ahora usted tendrá que personalizar este código ligeramente como está escrito específicamente para el ejemplo en su pregunta. Usted necesita para personalizar los siguientes aspectos:

    • Vuelva a colocar los dos instancias de Sheet1 con el nombre de la primera hoja de cálculo (es decir, el que va a copiar)
    • Vuelva a colocar los tres instancias de Sheet2 con el nombre de la segunda hoja de cálculo (es decir, el que está copiando)
    • La instancia de A1:A indica la columna en la que se busca el valor que usted está tratando de partido (es decir, el "foo" valor en su ejemplo. Si no la Columna a de la hoja de cálculo, a continuación, cambie la Una a cualquier columna que debe ser. Por ejemplo, si la hoja de cálculo contiene los "foo" el valor en la Columna D, entonces esto tiene que ser D1:D
    • Finalmente, usted verá una sola instancia de "foo" en el código. Reemplazar los foo con cualquier valor que usted está tratando de igualar.
  2. Finalmente, usted tendrá que guardar el libro como un macro-enabled. Para ello, haga clic en el icono de Excel en la parte superior izquierda para volver a Excel y, a continuación, seleccione la opción Guardar Como del menú Archivo. Para el formato de archivo debe seleccionar el Excel Libro Habilitado para Macros (.xlsm) opción de la lista desplegable.

Paso 3: Utilizando la macro

Ahora usted está listo para ir. Para utilizar la macro, siga estos pasos:

  1. Inicie Excel y abra el libro
  2. Seleccione la ficha Programador
  3. Haga clic en el icono de Macros (que debe ser el segundo)
  4. Esto hará que aparezca la ventana de Macro:
  5. Seleccione el CopyRowsBAsedOnCellValue macro (ver más abajo)

enter image description here

  1. Haga clic en la Ejecución botón
  2. La macro se ejecutará y todas las filas que coincidan con los criterios serán copiados a su hoja de destino. Abajo es una imagen que muestra el antes y el después de los disparos, basado en el ejemplo:

enter image description here


Nota:

El código anterior es una adaptación del código originalmente obtenida a partir de https://www.extendoffice.com/. No tengo ninguna afiliación con ese sitio web en absoluto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X