publicado el 23 de noviembre2 años Buenas a todos, Necesito ayuda para una macro que no tengo forma de hacerla. Tengo una tabla con 5 columnas, sus encabezados se llaman “A”, “B”, “C”, “D” y “E”. Busco datos en las columnas A B C y D, y cuando coincidan me den el dato que hay en la celda correspondiente de la columna E. Muchas gracias de antemano.
publicado el 23 de noviembre2 años Autor Perdona, pero pesa 490 KB y no me deja subirlo. Como lo hago? Gracias!!
publicado el 23 de noviembre2 años Autor Set ws = ThisWorkbook.Worksheets("Datos hidráulicos") ' Nombre de tu hoja específica. Set tbl = ws.ListObjects("TablaHidráulica") ' Nombre de tu tabla específica. Model = Me.MODELO If Me.CheckBox_PRESOSTATO = True Then Presostato = "SI" If Me.CheckBox_PRESOSTATO = False Then Presostato = "NO" If Me.OptionButton_010MS = True Then Velocidad = "0,10 m/s." If Me.OptionButton_015MS = True Then Velocidad = "0,15 m/s." If Me.OptionButton_020MS = True Then Velocidad = "0,20 m/s." 'Para modelo PHE-15 If Me.RECORRIDO.Value <= 5900 Then RecorridoDep = "HASTA 5900mm." If Me.RECORRIDO.Value > 5900 Or Me.RECORRIDO.Value <= 8500 Then RecorridoDep = "DE 5901mm. A 8500mm." 'Para modelo PHE-30 If Me.RECORRIDO.Value <= 3900 Then RecorridoDep = "HASTA 3900mm." If Me.RECORRIDO.Value > 3900 Or Me.RECORRIDO.Value <= 6100 Then RecorridoDep = "DE 3901mm. A 6100mm." If Me.RECORRIDO.Value > 6100 Or Me.RECORRIDO.Value <= 10000 Then RecorridoDep = "DE 6101mm. A 10000mm." 'Para modelo PHE-50 If Me.RECORRIDO.Value <= 2700 Then RecorridoDep = "HASTA 2700mm." If Me.RECORRIDO.Value > 2700 Or Me.RECORRIDO.Value <= 4300 Then RecorridoDep = "DE 2701mm. A 4300mm." If Me.RECORRIDO.Value > 4300 Or Me.RECORRIDO.Value <= 9500 Then RecorridoDep = "DE 4301mm. A 9500mm." If Me.RECORRIDO.Value > 9500 Or Me.RECORRIDO.Value <= 10000 Then RecorridoDep = "DE 9501mm. A 10000mm." If Me.RECORRIDO.Value > 10000 Or Me.RECORRIDO.Value <= 12000 Then RecorridoDep = "DE 10001mm. A 12000mm." 'Para modelo PHE-70 If Me.RECORRIDO.Value <= 1900 Then RecorridoDep = "HASTA 1900mm." If Me.RECORRIDO.Value > 1900 Or Me.RECORRIDO.Value <= 3100 Then RecorridoDep = "DE 1901mm. A 3100mm." If Me.RECORRIDO.Value > 3100 Or Me.RECORRIDO.Value <= 7100 Then RecorridoDep = "DE 3101mm. A 7100mm." If Me.RECORRIDO.Value > 7100 Or Me.RECORRIDO.Value <= 7500 Then RecorridoDep = "DE 7101mm. A 7500mm." If Me.RECORRIDO.Value > 7500 Or Me.RECORRIDO.Value <= 10000 Then RecorridoDep = "DE 7501mm. A 10000mm." Set C = tbl.ListColumns("MODELOS").Range.Find(Model, , , xlWhole) If Not C Is Nothing Then For i = C.Row - 1 To tbl.ListRows.Count + 1 If C = tbl.DataBodyRange(i, tbl.ListColumns("MODELOS").Index) Then If tbl.DataBodyRange(i, tbl.ListColumns("PRESOSTATO").Index) = Presostato Then If tbl.DataBodyRange(i, tbl.ListColumns("VELOCIDAD").Index) = Velocidad Then If tbl.DataBodyRange(i, tbl.ListColumns("RECORRIDOS").Index) = RecorridoDep Then Deposito = tbl.DataBodyRange(i, tbl.ListColumns("DEPÓSITO").Index) CodDeposito = tbl.DataBodyRange(i, tbl.ListColumns("COD. DEPÓSITO").Index) Exit For End If End If End If End If Next i End If Application.Sheets("Valores").Range("D2").Value = Deposito Application.Sheets("Valores").Range("D3").Value = CodDeposito End Sub El codigo que tengo es este con una tabla con encabezados y un formulario con un combobox donde elijo el modelo, un textbox donde introduzco el recorrido, un chektbox donde marco si lleva presostato o no y un opcionbutton donde elijo la velocidad. rellenando el formulario, lo que quiero es que donde coincidan los valores, me de el valor de la celda de la fila donde coinciden de la columna DEPOSITO.
publicado el 29 de noviembre1 año Autor Hola Jesus!!! No es exactamente lo que busco. Lo que necesito es que me de el valor de la columna "DEPÓSITOS". Por ejemplo: Elijo Modelo: "PHE-30" debe buscar en la tabla columna "MODELOS" celda "PHE-30". Presostato: "SI" debe buscar en la tabla columna "PRESOSTATO" celda "SI" Velocidad: "0,15m/s." debe buscar en la tabla columna "VELOCIDAD" celda "0,10m/s." Recorrido: "5000" debe buscar en la tabla columna "RECORRIDOS" celda "DE 3901 mm. a 6100mm." Y con estas coincidencias en la misma fila de la tabla, me de el valor de la columna "DEPOSITOS" que sería en este caso "20L". A ver si así te vale lo que necesito Jesús. Muchas gracias por tu interés y tiempo.
publicado el 29 de noviembre1 año Autor Perdón te he puesto 0.15m/s y busque 0.10m/s. Es, pongo 0.15m/s y busque 0.15m/s.
publicado el 29 de noviembre1 año Autor Correctísimo!!!! Eso es lo que necesito. Me pasarías el archivo? Muchas gracias Jesús!!!!!
publicado el 30 de noviembre1 año Private Sub ACEPTAR_Click() 'Aqui habilitamos el botón de "Ir a Excel". Me.SALIR.Enabled = True Dim Hoja As Worksheet Set Hoja = ThisWorkbook.Sheets("Valores") Hoja.Range("A6").Value = Me.MODELO.Value 'Ingresamos los valores de cada casilla en las celdas correspondientes. (MODELO) Application.Sheets("Valores").Range("D1").Value = Me.MODELO.Value 'Ingresamos el valor de la "VELOCIDAD". If Me.OptionButton_010MS.Value = True Then Application.Sheets("Valores").Range("D5").Value = "0,10 m/s" ElseIf Me.OptionButton_015MS.Value = True Then Application.Sheets("Valores").Range("D5").Value = "0,15 m/s" ElseIf Me.OptionButton_020MS.Value = True Then Application.Sheets("Valores").Range("D5").Value = "0,20 m/s" Else End If 'Aqui definimos los valores de los datos a buscar. Dim ws As Worksheet 'Variable para todas las busquedas. Dim tbl As ListObject 'Variable para todas las busquedas. Dim Model As String 'Variable para todas las busquedas. Dim Velocidad As String 'Variable para todas las busquedas. Dim Voltaje As String 'Variable para todas las busquedas. Dim Presostato As String 'Variable para todas las busquedas. Dim C As Range, i& 'Variable para todas las busquedas. Dim RecorridoDep As String 'Variable para todas las busquedas. Dim Deposito$ Dim CodDeposito$ Set ws = ThisWorkbook.Worksheets("Datos hidráulicos") ' Nombre de tu hoja específica. Set tbl = ws.ListObjects("TablaHidráulica") ' Nombre de tu tabla específica. Model = Me.MODELO If Me.CheckBox_PRESOSTATO = True Then Presostato = "SI" If Me.CheckBox_PRESOSTATO = False Then Presostato = "NO" If Me.OptionButton_010MS = True Then Velocidad = "0,10 m/s." If Me.OptionButton_015MS = True Then Velocidad = "0,15 m/s." If Me.OptionButton_020MS = True Then Velocidad = "0,20 m/s." 'Para modelo PHE-15 If Me.MODELO = "PHE-15" Then If CDbl(Me.RECORRIDO.Value) <= 5900 Then RecorridoDep = "HASTA 5900mm." If CDbl(Me.RECORRIDO.Value) > 5900 And CDbl(Me.RECORRIDO.Value) <= 8500 Then RecorridoDep = "DE 5901mm. A 8500mm." 'Para modelo PHE-30 ElseIf Me.MODELO = "PHE-30" Then If CDbl(Me.RECORRIDO.Value) <= 3900 Then RecorridoDep = "HASTA 3900mm." If CDbl(Me.RECORRIDO.Value) > 3900 And CDbl(Me.RECORRIDO.Value) <= 6100 Then RecorridoDep = "DE 3901mm. A 6100mm." If CDbl(Me.RECORRIDO.Value) > 6100 And CDbl(Me.RECORRIDO.Value) <= 10000 Then RecorridoDep = "DE 6101mm. A 10000mm." 'Para modelo PHE-50 ElseIf Me.MODELO = "PHE-50" Then If CDbl(Me.RECORRIDO.Value) <= 2700 Then RecorridoDep = "HASTA 2700mm." If CDbl(Me.RECORRIDO.Value) > 2700 And CDbl(Me.RECORRIDO.Value) <= 4300 Then RecorridoDep = "DE 2701mm. A 4300mm." If CDbl(Me.RECORRIDO.Value) > 4300 And CDbl(Me.RECORRIDO.Value) <= 9500 Then RecorridoDep = "DE 4301mm. A 9500mm." If CDbl(Me.RECORRIDO.Value) > 9500 And CDbl(Me.RECORRIDO.Value) <= 10000 Then RecorridoDep = "DE 9501mm. A 10000mm." If CDbl(Me.RECORRIDO.Value) > 10000 And CDbl(Me.RECORRIDO.Value) <= 12000 Then RecorridoDep = "DE 10001mm. A 12000mm." 'Para modelo PHE-70 ElseIf Me.MODELO = "PHE-50" Then If CDbl(Me.RECORRIDO.Value) <= 1900 Then RecorridoDep = "HASTA 1900mm." If CDbl(Me.RECORRIDO.Value) > 1900 And CDbl(Me.RECORRIDO.Value) <= 3100 Then RecorridoDep = "DE 1901mm. A 3100mm." If CDbl(Me.RECORRIDO.Value) > 3100 And CDbl(Me.RECORRIDO.Value) <= 7100 Then RecorridoDep = "DE 3101mm. A 7100mm." If CDbl(Me.RECORRIDO.Value) > 7100 And CDbl(Me.RECORRIDO.Value) <= 7500 Then RecorridoDep = "DE 7101mm. A 7500mm." If CDbl(Me.RECORRIDO.Value) > 7500 And CDbl(Me.RECORRIDO.Value) <= 10000 Then RecorridoDep = "DE 7501mm. A 10000mm." End If Set C = tbl.ListColumns("MODELOS").Range.Find(Model, , , xlWhole) If Not C Is Nothing Then For i = C.Row - 1 To tbl.ListRows.Count + 1 If C = tbl.DataBodyRange(i, tbl.ListColumns("MODELOS").Index) Then If tbl.DataBodyRange(i, tbl.ListColumns("PRESOSTATO").Index) = Presostato Then If Trim(tbl.DataBodyRange(i, tbl.ListColumns("VELOCIDAD").Index)) = Velocidad Then If tbl.DataBodyRange(i, tbl.ListColumns("RECORRIDOS").Index) = RecorridoDep Then Deposito = tbl.DataBodyRange(i, tbl.ListColumns("DEPÓSITO").Index) CodDeposito = tbl.DataBodyRange(i, tbl.ListColumns("COD. DEPÓSITO").Index) Exit For End If End If End If End If Next i End If Application.Sheets("Valores").Range("D2").Value = Deposito Application.Sheets("Valores").Range("D3").Value = CodDeposito End Sub
publicado el 30 de noviembre1 año Autor Eres una maquina!!!! Muchisimas gracias Jesús!!! Soy nuevo en esto, me gustaria que me explicaras en que ha consistido la correccion para entender un poco lo que has hecho y cual era mi error. Te lo agradeceria, ya que no quiero solo copiar y pegar, quiero entender lo que hago para seguir aprendiendo. Muchas gracias de nuevo!!!!!
publicado el 30 de noviembre1 año Bien, observa las modificaciones de tu macro investiga un poco sobre ellas y si no consigues entenderlas dímelo y te lo explico
publicado el 4 de enero1 año Autor Hola Jesús, Acabo de probarlo y si hago lo que me dices, ahora no me encuentra los valores a 0,20m/s. No se como hacerlo para que funcione. Gracias!! 1(1) (1).xlsm
publicado el 4 de enero1 año Autor Lo que no se exactamente si la macro funciona de la siguiente forma: Busca primero el valor del "MODELO", una vez que encuentra el modelo, se va a la columna "PRESOSTATO", una vez que encuentra el si o no en la misma linea, se va a la columna "VELOCIDAD", cuando encuentra la velocidad en la misma linea que los otros dos valores, se va a la columna "RECORRIDOS" y cuando encuentra el valor del recorrido, me muestra el valor de la linea "DEPOSITO" y "COD. DEPOSITO". Es asi como funciona?
publicado el 4 de enero1 año Pero bueno no te lo encuentra porque en tu base de datos no tienes ninguno con las características: PHE-70 5000 0.20 m/s. Prueba con PHE-70 10000 0.20 m/s. veras como si te muestra el resultado
publicado el 4 de enero1 año Autor Pero si le digo que busque en <=10000, deberia encontrarlo, no? ya que le estoy diciendo menor o igual a 10000, no igual a 10000, pienso yo....estoy perdido con esto.😌
Buenas a todos,
Necesito ayuda para una macro que no tengo forma de hacerla.
Tengo una tabla con 5 columnas, sus encabezados se llaman “A”, “B”, “C”, “D” y “E”.
Busco datos en las columnas A B C y D, y cuando coincidan me den el dato que hay en la celda correspondiente de la columna E.
Muchas gracias de antemano.