Bueno, estando los campos a comparar en el mismo registro, no creo que sea tan sencillo ni que se pueda hacer con una consulta (¿?).
Se me ocurre que puedes hacer una selección del producto y cargar los campos en un array para después ordenarlos. Sería algo así:
Código vb:
Ver original' hacemos una selección con el producto indicado (esta devolverá un único registro)
' se supone que anteriormentes has declarado dbs (Database) y rst (Recordset)
Set rst = dbs.OpenRecordset("SELECT Distribuidor1, Distribuidor2, Distribuidor3, Distribuidor4 FROM Tabla1 Where Producto = 'Sillas'")
' creamos una matriz de dos dimensiones
Dim a(3, 1) As Variant, i As Integer
' la cargamos con el nombre del campo y el precio
For i = 0 To rst.Fields.Count - 1
a(i, 0) = rst.Fields(i).Name
a(i, 1) = rst.Fields(i)
Next i
Dim b As Boolean, aux As Integer, s As String
' ordenamos la matriz de menor a mayor
b = True
While b
b = False
For i = 1 To UBound(a)
If a(i - 1, 1) > a(i, 1) Then
s = a(i - 1, 0)
aux = a(i - 1, 1)
a(i - 1, 0) = a(i, 0)
a(i - 1, 1) = a(i, 1)
a(i, 0) = s
a(i, 1) = aux
b = True
End If
Next i
Wend
' el primer elemento de la matriz es el mas barato
MsgBox "El distribuidor mas barato es " & a(0, 0) & vbCrLf & _
"con un precio de " & a(0, 1)
Un saludo