Crear una condicional

Buenas.
Teno una lista de datos y quiero crear una condición para que se le de un lugar en la tabla a los datos según su cercanía a cierto numero.
Me queda más fácil explicarlo con un ejemplo.
Los datos son así:
Columna A Columna B Columna C
   Costo Posición Valor Base
     567 1 570
     678 3
     543 2
     234 4
La idea es general alguna fórmula que automáticamente me coloque la posición de acuerdo a la cercanía del valor del costo al valor base. Ahí vemos que 567 es el más cercano a 570 entonces esta en posición 1 y que 234 es el más lejano a 570 y esta en la posición 4.
Si alguien sabe como hacer esto se los agradecería mucho.
Mil Gracias...
{"lat":4.63521588479255,"lng":-74.1237902641296}

1 Respuesta

Respuesta
1
Existe una forma sencilla si es que no importa el orden de los datos, es decir por ejemplo, ¿podría disponer libremente de el orden secuencial de la columna A? Ordenarlos de menor a mayor o viceversa o necesitas mantener el orden 567 - 678 - 543 -¿234?, ¿Pues entindo solo necesitas la posición relativa en función de 570
otra pregunta el valor base siempre sera un solo valor? ( ¿Una sola celda ) o son varios valores en la columna C? ( Allí se complica un poco )
Te cuento que el orden lo debo mantener, y e valor base siempre va a ser una sola celda.
Gracias por responder tan rapido.
Ok, si necesitas mantener la posición de la lista entonces utiliza este amcro:
Sub pocision()
Dim hoja As String
Dim n As Long
Dim d As String
hoja = ActiveSheet.Name
[a65536].Formula = "=COUNTA(R[-65534]C:R[-1]C)"
[C65536] = "=ISNUMBER(R[-65534]C)"
If [C65536].Text = "FALSO" Then [C65536].Clear: Exit Sub
If [C2] = Empty Or [C2] = 0 Then Exit Sub
n = [a65536].Value
[a65536].Clear
If n = 0 Then Exit Sub
n = (n + 1)
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("A2").Select
    Selection.AutoFill Destination:=Range("A2" & ":" & "A" & n), Type:=xlFillSeries
    Range("A2").Select
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C2").Select
    [C2].Formula = "=IF((R2C5-RC[-1])<0,(R2C5-RC[-1])*-1,(R2C5-RC[-1]))"
    Selection.AutoFill Destination:=Range("C2" & ":" & "C" & n)
   'ORDENAR
 Range("A2" & ":" & "C" & n).Select
    ActiveWorkbook.Worksheets(hoja).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(hoja).Sort.SortFields.Add Key:=Range("C2" & ":" & "C" & n), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(hoja).Sort
        .SetRange Range("A2" & ":" & "C" & n)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("D2").Select
    Selection.AutoFill Destination:=Range("D2" & ":" & "D" & n), Type:=xlFillSeries
    Columns("C:C").Select
    Selection.Delete Shift:=xlToLeft
    Range("A2" & ":" & "C" & n).Select
    ActiveWorkbook.Worksheets(hoja).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(hoja).Sort.SortFields.Add Key:=Range("A2" & ":" & "A" & n), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(hoja).Sort
        .SetRange Range("A2" & ":" & "C" & n)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
MsgBox "TERMNADO", vbInformation
End Sub
Se llama posición lo ejecutas con tecla ALT + F8
debes pegarlo en un modulo en el editor de Visual basic ( el editor lo activas con tecla ALT +F11)
Macro escrito para versión Excel 2007 ( que es el único que tengo, ja, ja)
Bye

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas