In Looking up color table I showed how to look up colors from a growing table of color models, in order to create color swatches. These show distinct colors with a hard stop between them, like this

But lets say that we wanted the intermediate colors to be automatically calculated – creating a smooth transition between each color.

#### Creating Ramps to get between colors smoothly

You can calculate the transition between two colors by adjusting the red, blue and green mix proportional to the distance traveled between the source and target color. Putting it all together, you can see the smooth transition between each color in the swatch, compared to the discrete individual color components.

#### How does this work

This is covered in detail in the Color ramp library. Here’s the code for creating the diagram above, using the libraries in the cDataSet.xlsm workbook.
```Public Sub makeRampedSwatches()
Dim r As Range, nameList As Variant, i As Long, _
ramp As Variant, self As cDataSet, totalPoints As Long

' going to make some color swatches
Set r = firstCell(wholeSheet("swatches"))
r.Worksheet.Cells.clear
r.Worksheet.Cells.Interior.color = vbWhite

' going to use some dulux names
Const schemePrefix = "dulux-"
Const width = 72
Const height = 64
Const pointsPerMilestone = 50

' get the color map table
With getcolorMap()

' refer to the dataset for later
Set self = .self

' these are our colors
nameList = Array( _
"charred chocolate", _
"charred clay", _
"cheater", _
"cheesy grin", _
"chenille" _
)

' lets get the actual colors
ReDim ramp(1 To arrayLength(nameList))
For i = LBound(nameList) To UBound(nameList)
ramp(i + 1 - LBound(nameList)) = .value(schemePrefix & nameList(i), "rgb")
Next i

totalPoints = arrayLength(nameList) * pointsPerMilestone
With r.Resize(2, totalPoints)
.columnWidth = width / totalPoints
.rowHeight = height
End With

' ramp with intermediate colors
For i = 1 To totalPoints
With r.Offset(, i - 1)
.Interior.color = rampLibraryRGB(ramp, 1, totalPoints, i)
End With
Next i

With r.Resize(1, 1)
.value = "ramped swatch"
.Font.color = makeColorProps(.Interior.color).textColor
End With

' now contrast that with the non ramped
For i = 1 To arrayLength(nameList)
With r.Resize(1, pointsPerMilestone).Offset(1, (i - 1) * pointsPerMilestone)
.Interior.color = ramp(i)
With .Resize(1, 1)
.Font.color = makeColorProps(.Interior.color).textColor
.value = nameList(i + LBound(nameList) - 1)
End With
End With
Next i

'cleanup
.tearDown
End With

End Sub
```

For more color topics see here