Excel - Macro redondeo

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por Sugui14 (5 intervenciones) el 22/07/2020 12:17:08
Buenas
Quería programar una macro que redondee un número de 3 decimales hasta encontrar un valor, superior e inferior, en una tabla. Es decir, tengo una tabla con una columna llena de datos y el resultado de una operación da un dato que no es exactamente el que tengo en la tabla, yo necesito encontrar el más cercano por arriba y por abajo entre los que están en mi tabla. Alguien puede arrojar un poco de luz?
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
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por Sugui14 (5 intervenciones) el 23/07/2020 12:39:42
Pues en una columna tengo unos datos como 7, 6, 5, 4.8, 3.6... 2.25, 2, 1.75, 1.5... 0.875, 0.850, 0.825 etc...
De una operación obtengo como resultado un número cómo por ejemplo el 5.487 y quiero que la macro me busque en la columna el superior y el inferior, que serían el 5 y el 6. En el caso de obtener un resultado tal que 0.8342, la macro debería dar como resultado los valores 0.850 y 0.825. Creo que con estos datos se entiende el problema, quizás la solución óptima no sea redondear y se pueda hacer de otro modo, pero lo desconozco, así que cualquier idea es bienvenida. Gracias
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 Luis
Val: 227
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por Luis (22 intervenciones) el 23/07/2020 14:23:57
Hola,

No lo veo claro como llegas del 0.8342 a 0.85 aproximas a 2 decimales, entonces el otro numero no sería 0.840...

Si puedes explicar mejor los criterios ??
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
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por Sugui14 (5 intervenciones) el 23/07/2020 17:17:20
Es fácil. 0.840 no está en la columna de datos, el más cercano es 0.850...
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
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por Guillermo (5 intervenciones) el 23/07/2020 17:41:24
Los datos son aleatorios, pero es para que se entienda...

IMG_20200723_173658
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 David Vivanco
Val: 211
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por David Vivanco (40 intervenciones) el 24/07/2020 05:51:59
Hola, debes crear un boton y asignar este codigo vba.

vba_djvivanco

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
Sub diccinario()
 
    On Error Resume Next
    Range("D2:E2").ClearContents
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
 
    Dim celda As Range, rng As Range
    uf = Range("A" & Rows.Count).End(xlUp).Row
    Set rng = Range("A2:A" & uf)
 
    valbuscado = Range("C2").Value '*******
    dict.Add valbuscado, 0
    pos = 1
    For Each celda In rng
        If Not dict.Exists(celda.Value) Then
            dict.Add celda.Value, pos
            pos = pos + 1
        End If
    Next celda
 
'    nummin = WorksheetFunction.Min(rng)
'    nummax = WorksheetFunction.Max(rng)
'
    'ordenar de menor a mayor
    Set dict = SortDictionaryByKey(dict)
 
    'imprimir
    posBuscado = dict(valbuscado)
 
    Range("D2").Value = dict.keys()(posBuscado - 2) 'menor
'    Actual = dict.keys()(posBuscado - 1)
    Range("E2").Value = dict.keys()(posBuscado + 0) 'mayor
 
 
End Sub
 
Public Function SortDictionaryByKey(dict As Object) As Object
 
    Dim arrList As Object
    Set arrList = CreateObject("System.Collections.ArrayList")
 
    ' Put keys in an ArrayList
    Dim key As Variant
    For Each key In dict
        arrList.Add key
    Next key
 
    ' Sort the keys
    arrList.Sort
 
    ' For descending order, reverse
    If sortorder = xlDescending Then
        arrList.Reverse
    End If
 
    ' Create new dictionary
    Dim dictNew As Object
    Set dictNew = CreateObject("Scripting.Dictionary")
 
    ' Read through the sorted keys and add to new dictionary
    pos = 1
    For Each key In arrList
        dictNew.Add key, pos 'dict(key)
        pos = pos + 1
    Next key
 
    ' Clean up
    Set arrList = Nothing
    Set dict = Nothing
 
    ' Return the new dictionary
    Set SortDictionaryByKey = dictNew
 
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
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Macro redondeo

Publicado por Guillermo (5 intervenciones) el 30/07/2020 15:50:45
Gracias por la información. Después de todo no he conseguido que funcione, el compilador me da un error, falta end sub. De todos modos he logrado mi propósito con unas fórmulas y ya va todo automático sin botones.
Gracias a todos por el interés.
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