Excel - ¿como usar 5 encabezados par una misma tabla?

 
Vista:
Imágen de perfil de celia
Val: 674
Bronce
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por celia (284 intervenciones) el 29/04/2019 10:30:15
Adjunto hoja con un ejemplo por si se puede buscar un dato por varios encabezados diferentes para la misma tabla
Gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.151
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por Antoni Masana (1459 intervenciones) el 29/04/2019 10:43:14
Buenos días Celia,

Esta es una buena opción:

1
2
3
4
5
=SI.ERROR(BUSCARH(D1;F2:I7;6;VERDADERO);
 SI.ERROR(BUSCARH(D1;F3:I7;5;VERDADERO);
 SI.ERROR(BUSCARH(D1;F4:I7;4;VERDADERO);
 SI.ERROR(BUSCARH(D1;F5:I7;3;VERDADERO);
 SI.ERROR(BUSCARH(D1;F6:I7;2;VERDADERO);"Desconocido")))))

Quizás algún día entendamos que estas haciendo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de celia
Val: 674
Bronce
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por celia (284 intervenciones) el 29/04/2019 11:04:55
Muy buena también !!!
Ya te contaré algo que me quedan que resolver más cosillas como unir un código tuyo que no consigo unir

era este por si tienes un ratillo más
--------------------------El código 1 es este que hizo Antoni:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Fila_Destin As Long, f As Long, Texto As String, _
    Colu_Destin As Long, c As Long
 
    Dim Lin As Integer, Col As Integer
 
    Col = Target.Column
    Fil = Target.Row
 
    If Col >= 65 And Col <= 77 And Fil >= 3 And Fil <= 15 Then Cells(6, 13) = Target.Value
    If Col >= 65 And Col <= 77 And Fil >= 3 And Fil <= 15 Then Cells(12, 13) = Target.Value
    If Col >= 18 And Col <= 30 And Fil >= 3 And Fil <= 15 Then Cells(6, 13) = Target.Value
    If Col >= 18 And Col <= 30 And Fil >= 3 And Fil <= 15 Then Cells(12, 13) = Target.Value
 
    ' ---&---
 
    Application.EnableEvents = False
    If Col = 13 And Fil = 7 Then
        Texto = Cells(7, "M")
        Fila_Destin = 42
        Colu_Destin = 4
 
        For Fil = 42 To 580 Step 15
            For Col = 37 To 134 Step 14
                If Texto = Cells(Fil, Col) Then
                    Range(Cells(Fil,Col), Cells((Fil+12),(Col+12))).Select
                    Selection.Copy
                    Range("D42").Select
                    ActiveSheet.Paste
                    Application.CutCopyMode = False
                    Application.EnableEvents = True
                    Exit Sub
                End If
            Next
        Next
    End If
    Application.CutCopyMode = False
    Application.EnableEvents = True
End Sub


---------------------------El código 2 es este que hizo Norberto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.Speech.SpeakCellOnEnter = Target.Address = "$S$23"
    Dim Lin As Integer, Col As Integer, Salir As Boolean
    Dim Fila_Destin As Long, f As Long, Texto As String, _
      Colu_Destin As Long, c As Long
      Col = Target.Column: Application.EnableEvents = False
    Fil = Target.Row
    If Col >= 18 And Col <= 30 And Fil >= 3 And Fil <= 15 Then Cells(19, 19) = Target.Value
    If Col = 13 And Fil = 10 Then
        Fila_Destin = 2
        Colu_Destin = 32: Texto = Cells(10, "M"): Salir = False
         For Fil = 42 To 42 Step 15
            For Col = 37 To 1086 Step 14
                If Texto = Cells(Fil, Col) Then
                    For f = 0 To 0
                        For c = 0 To 13
                            Cells(f + Fila_Destin, c + Colu_Destin) = Cells(f + Fil, c + Col)
                        Next
                    Next
                    Salir = True: Exit For
                End If
            Next
            If Salir = True Then Exit For
        Next
    End If
    Application.EnableEvents = True
    Dim F1 As Long, C1 As Long, F2 As Long, C2 As Long
    On Error GoTo Worksheet_SelectionChange_Err
    If Target.Cells.Count = 1 Then 'Solo está seleccionada una celda
        F1 = CeldaAnterior.Row
        C1 = CeldaAnterior.Column
        F2 = Target.Row
        C2 = Target.Column
        If Abs(C1 - C2) + Abs(F1 - F2) > 1 Then 'Si nos movemos más de una celda
            Set CeldaAnterior = Target
        ElseIf C1 - C2 = 1 Then 'Si nos hemos desplazado una columna a la izquierda
              CeldaAnterior.Activate 'Volvemos a la celda
            Range("s18") = Range("s18") - 0.5   'restamos 0,5 a la celda s18
        ElseIf C2 - C1 = 1 Then 'Si nos hemos desplazado una columna a la derecha
            CeldaAnterior.Activate
            Range("s18") = Range("s18") + 0.5   'sumamos 0,5 a la celda s18
   ElseIf F1 - F2 = 1 Then 'Si nos hemos desplazado una fila arriba
            CeldaAnterior.Activate
            Range("S18") = Range("S18") + 0.5  '
        ElseIf F2 - F1 = 1 Then 'Si nos hemos desplazado una fila abajo
            CeldaAnterior.Activate
            Range("S18") = Range("S18") - 0.5   'restamos
        Else                     'Este caso no creo que se dé.
            Set CeldaAnterior = Target
        End If
    End If
Worksheet_SelectionChange_Err:
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.151
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por Antoni Masana (1459 intervenciones) el 29/04/2019 12:18:02
Te he adjuntado los dos códigos con los cambios para que funcione

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Fila_Destin As Long, f As Long, Lin As Integer, Texto As String, _
        Colu_Destin As Long, c As Long, Col As Integer, Salir AS Boolean
 
    ' ----------  El código 1 es este que hizo Antoni
 
    Col = Target.Column
    Fil = Target.Row
 
    If Col >= 65 And Col <= 77 And Fil >= 3 And Fil <= 15 Then Cells(6, 13) = Target.Value
    If Col >= 65 And Col <= 77 And Fil >= 3 And Fil <= 15 Then Cells(12, 13) = Target.Value
    If Col >= 18 And Col <= 30 And Fil >= 3 And Fil <= 15 Then Cells(6, 13) = Target.Value
    If Col >= 18 And Col <= 30 And Fil >= 3 And Fil <= 15 Then Cells(12, 13) = Target.Value
 
    ' ---&---
 
    Application.EnableEvents = False: Salir=False
    If Col = 13 And Fil = 7 Then
        Texto = Cells(7, "M")
        Colu_Destin = 4
 
        For Fil = 42 To 580 Step 15
            For Col = 37 To 134 Step 14
                If Texto = Cells(Fil, Col) Then
                    Range(Cells(Fil,Col), Cells((Fil+12),(Col+12))).Select
                    Selection.Copy
                    Range("D42").Select
                    ActiveSheet.Paste: Salir=True: Exit For
                End If
            Next
            Is Salir Then Exit For
        Next
    End If
    Application.CutCopyMode = False
    Application.EnableEvents = True
 
    ' ----------  El código 2 es este que hizo Norberto:
 
    Application.Speech.SpeakCellOnEnter = Target.Address = "$S$23"
 
    Col = Target.Column: Application.EnableEvents = False
    Fil = Target.Row
 
    If Col >= 18 And Col <= 30 And Fil >= 3 And Fil <= 15 Then Cells(19, 19) = Target.Value
 
    If Col = 13 And Fil = 10 Then
        Fila_Destin = 2
        Colu_Destin = 32: Texto = Cells(10, "M"): Salir = False
        For Fil = 42 To 42 Step 15
            For Col = 37 To 1086 Step 14
                If Texto = Cells(Fil, Col) Then
                    For f = 0 To 0
                        For c = 0 To 13
                            Cells(f + Fila_Destin, c + Colu_Destin) = Cells(f + Fil, c + Col)
                        Next
                    Next
                    Salir = True: Exit For
                End If
            Next
            If Salir = True Then Exit For
        Next
    End If
 
    Application.EnableEvents = True
    Dim F1 As Long, C1 As Long, F2 As Long, C2 As Long
 
    On Error GoTo Worksheet_SelectionChange_Err
 
    If Target.Cells.Count = 1 Then 'Solo está seleccionada una celda
        F1 = CeldaAnterior.Row
        C1 = CeldaAnterior.Column
        F2 = Target.Row
        C2 = Target.Column
 
        If Abs(C1 - C2) + Abs(F1 - F2) > 1 Then 'Si nos movemos más de una celda
            Set CeldaAnterior = Target
 
        ElseIf C1 - C2 = 1 Then 'Si nos hemos desplazado una columna a la izquierda
            CeldaAnterior.Activate 'Volvemos a la celda
            Range("s18") = Range("s18") - 0.5 'restamos 0,5 a la celda s18
            ElseIf C2 - C1 = 1 Then 'Si nos hemos desplazado una columna a la derecha
            CeldaAnterior.Activate
            Range("s18") = Range("s18") + 0.5 'sumamos 0,5 a la celda s18
 
        ElseIf F1 - F2 = 1 Then 'Si nos hemos desplazado una fila arriba
            CeldaAnterior.Activate
            Range("S18") = Range("S18") + 0.5 '
 
        ElseIf F2 - F1 = 1 Then 'Si nos hemos desplazado una fila abajo
            CeldaAnterior.Activate
            Range("S18") = Range("S18") - 0.5 'restamos
 
        Else 'Este caso no creo que se dé.
            Set CeldaAnterior = Target
        End If
    End If
 
Worksheet_SelectionChange_Err:
 
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de celia
Val: 674
Bronce
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por celia (284 intervenciones) el 29/04/2019 12:39:10
Muchísimas gracias de nuevo.
Llevo unas 50 copias de la hoja ya, a ver si veo en cuál puedo meter este código porque como hago pequeños cambios al final cualquier cosa acaba fallando por mezclarme tanto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de celia
Val: 674
Bronce
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por celia (284 intervenciones) el 03/05/2019 11:00:29
Hola de nuevo.
Me da un pequeño error al buscar cuando los datos de la mima columna en la que busca empiezan por el mismo nº.
Adjunto hoja con el ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.151
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por Antoni Masana (1459 intervenciones) el 03/05/2019 13:02:47
Este truco funciona en el ejemplo anterior:

1
2
3
4
5
=SI.ERROR(BUSCARH(D1;F2:I7;6;VERDADERO);
 SI.ERROR(BUSCARH(D1;F3:I7;5;VERDADERO);
 SI.ERROR(BUSCARH(D1;F4:I7;4;VERDADERO);
 SI.ERROR(BUSCARH(D1;F5:I7;3;VERDADERO);
 SI.ERROR(BUSCARH(D1;F6:I7;2;VERDADERO);"Desconocido")))))

En casos especiales quizás la mejor opción es hacerte una función que cumpla tus necesidades.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function Buscar_Mio(Texto, Rango As Range)
    Dim Fil As Long, Col As Long, Fila_Datos As Long
 
    Buscar_Mio = ""
    Fila_Datos = Rango.Row + Rango.Rows.Count - 1
 
    For Fil = Rango.Row To Rango.Row + Rango.Rows.Count - 2
        For Col = Rango.Column To Rango.Column + Rango.Columns.Count - 1
            If Texto = Cells(Fil, Col) Then
               Buscar_Mio = Cells(Fila_Datos, Col): Exit For
            End If
        Next
        If Len(Buscar_Mio) > 0 Then Exit For
    Next
    If Len(Buscar_Mio) = 0 Then Buscar_Mio = "Desconocido"
End Function

Pasas valor a buscar y rango.

Adjunto libro.


Saludos.
\\//_


P.D.:
No se que estas haciendo y desde luego es sorprendente el empeño que le pones.
Es posible que lo que estés haciendo se podría hacer de otra forma y esa es la opinión de los que llevamos muchos años programando pero sigue así porqué es así como se aprende y todos hemos empezado sin saber y haciendo cosas raras.
Quiero aprovechar este correo para animarte a que sigas haciendo cosas aunque a los demás les parezcan raras que para raros ya estamos los demás.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de celia
Val: 674
Bronce
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por celia (284 intervenciones) el 03/05/2019 13:23:04
Qué bien Antoni!!
Otras mil gracias por tu ayuda tan efectiva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de celia
Val: 674
Bronce
Ha aumentado 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

¿como usar 5 encabezados par una misma tabla?

Publicado por celia (284 intervenciones) el 03/05/2019 13:40:08
No había leído tu P.D. y me anima más todavía a seguir con mi jaleo con excel.
Seguro que puede hacerse de otra forma pero esto me mantiene la mente activa aunque el 99% me lo estás resolviendo tú y como ya empecé a hacerlo con excel sería mucho lío empezar con otro programa que conozca menos aún que excel.
Ahora que si hubiera algún programa sencillo que haga las cosas sin saber programar nada podía mirarlo, pero no creo que haya aún algo así que pudieras decirle lo que quieres y lo haga sin más.
Quizá en 20 años hagan algo así.
Gracias por tu apoyo de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar