Excel - Horas y Application.MATCH

 
Vista:
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 18/10/2017 08:07:53
Hola chicos.
Tengo una hoja en la que en la primera columna, tengo todas las horas de un dia en intervalos de 15 minutos:

00:00
00:15
00:30
00:45
01:00
.....

En un textbox introduzco una hora en formato hh:mm y lo que necesito es que me diga la fila a la que corresponde, por ejemplo, si introduzco 00:30, deberia contestarme 3
He probado de todo y no me salgo. Actualmente lo tengo asi:

1
2
3
4
5
6
7
8
9
10
11
12
valorHora = Format(CDate(TextBox5), "HH:MM")
    'valorHora = TextBox5.Value
 
    valorFila = Application.Match(valorHora, Range("A:A"), 0)
 
    If Not IsError(valorFila) Then
       Cells(valorFila, 2).Value = "OK"
 
    Else
         Beep
         MsgBox "ERROR"
    End If


valorFila siempre esta vacio (N/A)

Alguna idea?
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 Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Horas y Application.MATCH

Publicado por Andres Leonardo (1583 intervenciones) el 18/10/2017 16:33:27
Primnero podrias hacerlo por formula

Segundo estas comparando un texto con un valor numerico. por no se puede comparar papas con papanabos.

creo que eslo que tienes mal, en todo caso te adjunto un ejemplo como deberias hacer , ejemplo convirtiendo el valor a texto y ahi hacer la compracion .
En el ejemplo la colimna A esta el valor numerico, en la B esta el valor Texto , eso lo comparo en la formula coincidir o match que es la misma... y listo

comparacion

Considerciones para comparar
los campos a comparar deben ser iguales (No sirve si lucen IGUALES)
Las horas son numeros decimales por ende es un campo numerico y no puede ser comparado con un texto que eslo que conviertes en un texsto otra cosa podrias convertir lo ingresado en el textbox a numero y tambien podrias comparar con A y aya no conrtra B
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
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 18/10/2017 16:43:26
Hola Andres (recuerdo que ya recibi tu ayuda hace tiempo) :)

Tambien creia que era cosa de formatos, pero lo revise todo y creo que no...

Veras, en el UserForm introduzco en tres TextBox, un dia, una hora de inicio y una hora final.

la Fila 1 de la hoja esta en formato fecha (desde 01/01/2017 hasta 31/12/2017
la Columna A dispone de las horas del dia, de 00 a 23:45, y por supuesto, en formato hh:mm
(me he asegurado que los formatos sean correctos, incluso los he creado con "personalizado")

Lo que pretendo, es obtener el cartesiano de dia/horaINicio para asignar un valor a esa celda.

Pense que con dos MATCH's podria obtener fila/columna, y de hecho, lo he probado con texto y numeros, y funciona (curiosamente, el tercer argumento de application.match tiene que ser 1 y no cero, sino no funciona)

Te adjuntaria como tengo ahora la Sub, pero he metido tanto lio, que empiezo a reescribirla...

Supongo que lo de la fecha, tendra que ver con que VBA las trata en formato US (mm/dd/aaa), pero la hora... me trae de cabeza

edit: olvidaba decir que he intentado con datavalue, cdate, format....

Ahh y gracias por contestar... :)
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
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 18/10/2017 17:18:35
He limpiado codigo, hojas y datos que no tienen que ver con el problema...
adjunto el xlsm por si sirve
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 Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Horas y Application.MATCH

Publicado por Andres Leonardo (1583 intervenciones) el 18/10/2017 18:50:03
A mi me sale asi y me sale D9 que coincide ... el tema es cuando losa sacasa de un formulario.

=CARACTER(COINCIDIR(I8,A1:NB1,0)+64)&COINCIDIR(I9,A1:A98,1)+1
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

Horas y Application.MATCH

Publicado por JuanC (1237 intervenciones) el 18/10/2017 21:59:11
algo que te puede servir de varias maneras...

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
Option Explicit
 
Sub test()
Dim H$, fil&, i%
Dim hora$
 
hora = "00:30"  '//Hora buscada
H = "00:00"     '//Hora inicial
fil = 1         '//Fila inicial
 
For i = 1 To 96
    If H = hora Then Exit For
    H = SumarTiempo(H, 15 * 60000)
    fil = fil + 1
Next
 
MsgBox fil
End Sub
 
Private Function SumarTiempo(ByVal sTime As String, ByVal deltaT As Long) As String
Dim H$, m$, s$, ms$, st$, t&, sSigno$
On Error Resume Next
st = sTime
'st = VBA.Replace(st, ".", ":")
H = VBA.Split(st, ":")(0)
m = VBA.Split(st, ":")(1)
's = VBA.Split(st, ":")(2)
'ms = VBA.Split(st, ":")(3)
t = Val(H) * 3600000 + Val(m) * 60000 ' + Val(s) * 1000 + Val(ms) * 10
 
t = t + deltaT '//Calcula nuevo valor
 
'//Si el resultado es negativo
If t < 0 Then
   sSigno = "-"
   t = t * (-1)
End If
 
H = VBA.Format((t \ 3600000), "00")
m = VBA.Format((t \ 60000) Mod 60, "00")
's = VBA.Format((t \ 1000) Mod 60, "00")
'ms = VBA.Format((t Mod 1000) \ 10, "00")
 
SumarTiempo = sSigno & H & ":" & m '& ":" & s '& "." & ms
End Function
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
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 19/10/2017 10:27:15
Gracias JuanC, voy a probar. Ya habia pensado en un bucle y transformar las horas (de hecho, Andres, cuando me ayudo en algo similar, la solucion paso por ahi, pero perdi aquellos xls al quemar un disco duro)

En realidad, a lo que le estoy dando importancia es a comprender el funcionamiento que tiene VBA para el tratamiento de horas/fechas...
(no me basta con que me "den soluciones", he de comprenderlas) y en este caso concreto me vuelve loco porque me acepta unos formatos y me ignora otros, asi como la aplicacion de la funcion MATCH, que ahorraria esos bucles.

Sigo investigando por mi cuenta y agradezco vuestra colaboracion.
Probare ahora de adaptar tu solucion.

Un Saludo.
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
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 19/10/2017 11:25:34
es decir....

Columna A: tengo "horas", en formato "hora" (hh:mm)

UserForm: tengo un textBox, se supone que introduzco la hora en "texto" (no hay otra o la desconozco)

valorhora = Format(CDate(TextBox5.Value), "hh:mm")

Si introduzco "03:00", valorhora toma el valor "03:00"

Se supone que el valorhora, es un date... o es igualmente un texto?

Si es un date, la funcion MATCH deberia encontrarla... no?

Aun asi, en un simple bucle for...next con un if por medio, tampoco me lo reconoce

Deduzco pues, que la primera expresion, cuando asigno a valorhora el contenido del TextBox, es lo que esta fallando o VBA me trolea... por mas que al depurar, me este diciendo que su contenido es "03:00", el MATCH siempre me devuelve N/A

Pasaria la solucion por convertir directamente TODO a serials? (eso si me parece una troleada)

ps.- Os recuerdo que soy muy experto en hojas y funciones, pero muy, muy, muy novato en VBA :)
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
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 19/10/2017 13:19:53
Bueno... haciendo pruebas...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sheets("Eventos3").Select
 
valorfila = Application.Match(Range("ZZ1"), Range("A:A"), 1)
 
If Not IsError(valorfila) Then
   Cells(valorfila, 2).Value = "OK"
Else
   MsgBox "ERROR"
End If
 
'------------------------------------------------------------------------------------
 
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Range("ZZ1") = CDate(TextBox5)
End Sub

Me parece una vergonzante chapuza... pero funciona...
Cojo el resultado del textbox y lo mando al carajo de la hoja donde no moleste, se lo paso al MATCH y ahora si... una hora es una hora.

Voy a probar ahora con la fila 1, la de las fechas... me temo que acabare haciendo otra chapuza... (quien me ha visto y quien me ve) :)
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 Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Horas y Application.MATCH

Publicado por Andres Leonardo (1583 intervenciones) el 19/10/2017 15:58:11
pues has que solo pase el valor y referencia la formula a tu celda carajo y listo no tienes que hacer tanto vba

slaudos
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
sin imagen de perfil

Horas y Application.MATCH

Publicado por Alx (31 intervenciones) el 19/10/2017 18:47:59
:) :) :)

de momento lo dejo en modo "chapuza"... como decia mi abuelo... si funciona, no lo toques...
Por supuesto, no me doy por vencido, no me convence lo de los formatos de fecha/hora y no acabar de entenderlo (eso si me duele), pero tengo otras consultas... voy a abrir otro tema...

Gracias por vuestra ayuda y a ver si podeis echarme una mano en lo siguiente que propondre... :)
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