Como extraer el encabezado de una fila en excel cuando esta cumple cierta condición

Tengo un renglón de excel y quiero obtener el encabezado de esta cuando cumpla cierta condición.

Es decir tengo una taba con encabezado a, b, c cuando se llena la tabla y en alguna de ellas tiene la palabra si, quiero que me muestre en que columna está con el encabezado de la misma

2 respuestas

Respuesta
3

A ver si yo interpreto lo que solicitas. No olviden que solo podemos guiarnos por vuestros dichos o notas... no estamos viendo el libro ni sus hojas... y no sabemos cómo Uds están registrando la información.

'...Cuando se llena la tabla y en alguna de ellas tiene la palabra si,...' esto lo puedo interpretar que será al momento de ingresar datos en la tabla y para esto es la macro que te envío. En la imagen se observa que el código se coloca en el objeto HOJA donde estés trabajando.

Y este es el código para un rango de datos como en la muestra. Tendrás que ajustarla a tus referencias y establecer cuál es la fila de encabezados que en mi ejemplo es 1.

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'rango de la tabla
Set rgo = Range("A1").CurrentRegion
On Error Resume Next
'controla si se ingresó el texto SI (en mayúsc o minúsc) en alguna celda de la tabla
If Not Intersect(Target, rgo) Is Nothing Then
    If UCase(Target.Value) = "SI" Then
        MsgBox "Se registró 'SI' en la columna " & Target.Column & " con título " & Cells(1, Target.Column)
        'MsgBox "Se registró 'SI' en la celda " & Cells(Target.Row, Target.Column).Address
    End If
End If
End Sub

Si, en cambio, se trata de una Tabla, la macro difiere un poco. El siguiente código trabaja con un rango como el de la imagen:

Y así podríamos seguir desarrollando macros más o menos parecidas a éstas que trabajan con el evento Change de la hoja. O con otros eventos ... quizás solo copias y pegas 1 renglón... y habrá alguna celda con el valor SI... y esto ya requerirá de alguna macro diferente.

Por eso es tan importante que dejen las consultas bien claras de cómo van a realizar los procesos.

Sdos y no olvides valorar esta respuesta si te ha servido de ejemplo. O deja mayores aclaraciones para ajustarla.

Aquí va el código para el caso de una TABLA como la de la imagen:

Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
Set rgoT = Range("Tabla1[#All]")
On Error Resume Next
'controla si se ingresó el texto SI (en mayúsc o minúsc) en alguna celda de la tabla
If Not Intersect(Target, rgoT) Is Nothing Then
    If UCase(Target.Value) = "SI" Then
        MsgBox "Se registró 'SI' en la columna " & Cells(Range("Tabla1[[#Headers]]").Row, Target.Column)
    End If
End If
End Sub
Respuesta
1

No entendí.

¿Puedes explicar con una imagen qué tienes?

¿Qué resultado quieres?

Y algo importante, ¿en dónde quieres el resultado?


Hola muchas gracias, anexo la imagen.

Cuando en un renglón en esta caso el 3 aparezca la palabra si, quiero que me indique el encabezado donde se encuentra. En el renglón pueden haber mas "SI", entonces  deberá escribir los encabezados donde se encuentre la palabra. 

Deberé especificar  en la columna de puesto en número en el cual quiero que haga la búsqueda.

En tu imagen no se ven las columnas ni las filas de excel.

Observa cómo debes poner un ejemplo:


Dices "Cuando en un renglón en esta caso el 3 ". ¿A qué te refieres con renglón 3?

¿En dónde vas a especificar si es el renglón 3, o el 2 o el 20?

Y otra vez te pregunto, ¿en dónde quieres el resultado?


Nota: Una cosa que debes tener en cuenta cuando haces una pregunta en un foro. Las personas a las que solicitas ayuda no saben absolutamente nada de tus datos, cómo están en el libro de trabajo y cómo quieres el resultado. Debes ser muy específico al describir cada una de estas áreas, en detalle, y no debes suponer que seremos capaces de "resolverlo" por nuestra cuenta. Recuerda, nos estás pidiendo ayuda; así que ayúdanos, brindando la información que necesitamos para hacerlo, incluso si esa información te parece "obvia" (recuerda, sólo es obvia para ti porque estás familiarizado con tus datos, su diseño y el objetivo general para ellos).

Hola de antemano una disculpa, seré más claro con imágenes. Ya encontré como extraer el encabezado del valor del renglón, con esta fórmula: =SI(B2="SI", CELDA("contenido", B1))

Ahora necesito ir leyendo sólo las columnas que tengan si y mostrarlas en otra columna o renglón. Saludos!

Pon la siguiente fórmula MATRICIAL en la celda D10.

=SI.ERROR(INDICE($A$1:$F$1,0,K.ESIMO.MENOR(SI($A$2:$A$4=$B$9,SI($B$2:$F$4="SI",COLUMNA($B$2:$F$4))),FILAS($C$10:C10))),"")

Para aceptar la fórmula MATRICIAL, debes presionar al mismo tiempo las teclas:

Shift + Control + Enter

No solamente Enter.

Después de presionar las teclas, notarás que la fórmula MATRICIAL queda entre llaves { }

Ejemplo:


Después de colocar la fórmula MATRICIAL puedes copiarla hacia abajo tantas veces como columnas tengas.


Si en lugar de la fórmula quieres un macro.

Te anexo el código para cuando modifiques la celda B9, en automático te ponga los encabezados.

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B9")) Is Nothing Then
    If Target.CountLarge > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    '
    Dim f As Range
    Dim i As Long, j As Long
    i = 10
    Range("D10:D" & Rows.Count).ClearContents
    Set f = Range("A:A").Find(Target.Value, , xlValues, xlWhole)
    If Not f Is Nothing Then
      For j = 1 To Cells(1, Columns.Count).End(1).Column
        If Cells(f.Row, j).Value = "SI" Then
          Range("D" & i).Value = Cells(1, j).Value
          i = i + 1
        End If
      Next
    End If
  End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Tanto la fórmula como la macro funcionan como pusiste tu ejemplo. Si cambias los datos de lugar, habrá que adaptar cualquiera de las soluciones.


[No olvides valorar...

Muchísimas Gracias Elsa por tu ayuda.

Ya estuve viendo tus videos que tienes muy buenos por cierto.

Agradezco tu Ayuda enormemente!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas