Comparar dos columnas (excel)

Buenas. Soy nuevo en esto y sé que este tema ha sido tratado ya antes... Pero mi duda es esta:
Tengo una tabla con dos columnas con valores distintos (son precios en realidad) de dos vendedores de componentes electrónicos distintos. Yo quiero -siempre que se pueda- compararlos de tal forma que, en una tercera columna NO indique el precio más bajo de lo que está comparando, sino que en vez de ello coloque el nombre del vendedor que tiene el precio más bajo.
Componente      Vendedor1    Vendedor2       +conveniente
       a                     $xxx.x            $xxx.x          vendedor1 o 2???
       b                     $xxx.x            $xxx.x          vendedor1 o 2???
Lo que yo he hecho es lo siguiente (la tabla es muy grande, solo pongo una de las linesas):
=BUSCARH(MIN(B3:C3);B3:C3;1;FALSO)
Así como está me devuelve el precio más conveniente, pero no logro hacer que me diga "cual me conviene". Sé que es lo mismo que me diga cuál es el precio más bajo, simplemente que a modo de presentación es mejor, pero no consigo ingresar texto (que seria el nombre del vendedor) ya que me devuelve error... Se puede hacer, mezclar números con letras, ¿o es una fantasía mía?
Espero haber sido claro y que alguien me pueda ayudar. Saludos, Maxi.-

1 Respuesta

Respuesta
1
Estuve dándole vueltas a tu pregunta y llegue a una solución, más bien sencilla ( creo que lo más sencillo siempre es lo mejor).
Mira, dices que tu tabla tiene muchos datos, pues bien, veo que con tu fórmula evalúas fila a fila pero es mejor (creo yo), evaluar el rango completo
En una celda cualquiera en que tu desees que te de el valor mínimo de la tabla pon esto:
=MIN(B2:E6)
Si tu rango es diferente a B2:E6 modifícalo por el que tengas tu.
Bien de esta forma tendremos el mínimo de toda la tabla, ahora necesitamos ubicar "quien tiene ese valor", para ello ejecuta el macro:
Sub busqueda()
Cells.Find(What:=Range("F2").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
Range("G2").Value = Range(Cells(1, Selection.Column), Cells(1, Selection.Column)).Value
End Sub
Ojo: si te fijas hace referencia a la Celda F2 ( esa celda es la que en mi ejemplo utilice para alojar el resultado de la fórmula anterior), en resumen esto se trata de que el macro buscara el valor de la celda en donde pusiste la fórmula anterior =MIN(B2:E6), y te dará en la celda G2 el nombre del vendedor que mantiene ese precio, si necesitas que te lo de en otra celda pues modificas la linea Range("G2"). Value
Por la celda que tu desees.
El único problema es que, ¿qué pasa cuando dos o más vendedores tengan el mismo valor mínimo?
Hola... en principio, muchas gracias por atender a mi pregunta.
Ahora bien, lo que yo necesito es ir comparando fila por fila, analizando el precio que tiene cada vendedor para cada articulo en particular; ¿Me explico?
Si tienen ambos el mismo precio respecto de un determinado artículo, pues bien, da igual el resultado.
Yo quiero que, a la derecha de los precios de cada artículo (por eso analizo cada fila), me diga qué vendedor tiene el precio más bajo. Así:
Componente      Vendedor1    Vendedor2       +conveniente
       a                     $xxx.x            $yyy.y          vendedor1 o 2???
       b                     $ppp.p           $zzz.z          vendedor1 o 2???
¿Se entiende? Espero que si, y que me puedan ayudar. La duda está en que, así con la fórmula que yo uso, en la columna "+conveniente" me da como resultado el valor en $ más conveniente, pero lo que yo quiero es que, en lugar de un nº, me de el string con el nombre del vendedor. ¿Se podrá hacer? Ojalá. Saludos, Maxi.-
Ok prueba esto:
Sub vendedor()
Dim i As Long
Dim ii As Integer
Dim n As Long
Dim c As Integer
Dim F As Long
Dim col As Integer
On Error Resume Next
c = InputBox("Cuantos vendedores son", "??", 1)
If c = 0 Then Exit Sub
If c = Empty Then Exit Sub
Range("A65536").Formula = "=COUNTA(R[-65535]C:R[-1]C)"
Range("IV1").Formula = "=COUNTA(RC[-255]:RC[-1])"
If Range("A65536").Value = 0 Then Exit Sub
n = Range("A65536").Value
col = Range("IV1").Value
Range("A65536").Clear
Range("IV1").Clear
F = 2
For i = 1 To n - 1
    For ii = 2 To c
      If Range(Cells(F, ii), Cells(F, ii)).Value = Range(Cells(F, col - 1), Cells(F, col - 1)).Value Then Range(Cells(F, col), Cells(F, col)).Value = Range(Cells(1, ii), Cells(1, ii)).Value
    DoEvents
    Next
    F = (F + 1)
DoEvents
Next
MsgBox "Terminado", vbInformation
End Sub
Consideraciones:
Los datos deben estar dispuesto de la siguiente forma:
En columna A deben estar los productos
Luego debe estar todos y cada uno de los vendedores ( columna B, C, DE E, etc)
Y siempre, SIEMPRE, al final de el último evndedor deben existor estas dos columnas:
$ Minimo en donde debes poner la formula que busque el valor minimo de la fila =MIN(B2:G2)  TU AMPLIAS EL RANGO pero siempre desde B
y finalizar siempre con la columna cuyo rotulo tu defines como "+Conveniente", alli la macro dependiendo del valor de la columna anterior ( minimo) recorrera, la fila celda a celda hacia la derecha a contar de B2 e ira comparando, al encontrar la coincidencia, te llenara la celda de la última columnan con el nombre del vendedor. luego se pasara a la fila de abajo y repetira el ejercicio, asi hasta terminar con la última de las filas.
No debe haber espacios vacíos en la columna de productos ni tampoco en la fila de rótulos, ya que estas celdas determinaran el total de columnas y filas de que se servirá el bucle que efectúa el recorrido,
al comienzo del macro se te pedirá ingreses el número de vendedores que recorrerás, si tienes 10 en tablas y quieres evaluar los 10 pones 10 si deseas evaluar 5 pones 5 y evaluara las primeras 5 columnas
bye
Ante todo, pido disculpas por el atraso en la respuesta y finalización, pero es que he estado más de una semana sin servicio de internet por problemas con la prestadora; al margen, agradezco mucho la ayuda brindada, lo que habla de la dedicación de los expertos que se esfuerzan por aclarar nuestras dudas.
Sinceramente, mis más gratos saludos a quienes me ayudaros. Atentamente, Maxi.-

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas