'NOTICE: This code is provided "AS-IS" with no warranties, and confers no rights. public const ColorScaleRed = "#F8696B" public const ColorScaleYellow = "#FFEB84" public const ColorScaleGreen = "#63BE7B" public const ColorScaleBlue = "#5A8AC6" public function ColorScaleRYG(value, minValue, maxValue) as string ColorScaleRYG = ColorScale3(value, _ minValue, ColorScaleRed, _ ColorScaleYellow, _ maxValue, ColorScaleGreen) end function public function ColorScaleGYR(value, minValue, maxValue) as string ColorScaleGYR = ColorScale3(value, _ minValue, ColorScaleGreen, _ ColorScaleYellow, _ maxValue, ColorScaleRed) end function public function ColorScaleRYB(value, minValue, maxValue) as string ColorScaleRYB = ColorScale3(value, _ minValue, ColorScaleRed, _ ColorScaleYellow, _ maxValue, ColorScaleBlue) end function public function ColorScaleBYR(value, minValue, maxValue) as string ColorScaleBYR = ColorScale3(value, _ minValue, ColorScaleBlue, _ ColorScaleYellow, _ maxValue, ColorScaleRed) end function public function ColorScaleRWB(value, minValue, maxValue) as string ColorScaleRWB = ColorScale3(value, _ minValue, ColorScaleRed, _ "White", _ maxValue, ColorScaleBlue) end function public function ColorScaleBWR(value, minValue, maxValue) as string ColorScaleBWR = ColorScale3(value, _ minValue, ColorScaleBlue, _ "White", _ maxValue, ColorScaleRed) end function public function ColorScaleRY(value, minValue, maxValue) as string ColorScaleRY = ColorScale(value, _ minValue, ColorScaleRed, _ maxValue, ColorScaleYellow) end function public function ColorScaleYR(value, minValue, maxValue) as string ColorScaleYR = ColorScale(value, _ minValue, ColorScaleYellow, _ maxValue, ColorScaleRed) end function public function ColorScaleGY(value, minValue, maxValue) as string ColorScaleGY = ColorScale(value, _ minValue, ColorScaleGreen, _ maxValue, ColorScaleYellow) end function public function ColorScaleYG(value, minValue, maxValue) as string ColorScaleYG = ColorScale(value, _ minValue, ColorScaleYellow, _ maxValue, ColorScaleGreen) end function public function ColorScale3(value as object, minValue as object, minColor as string, midColor as string, maxValue as object, maxColor as string) as string ' Use average of minValue and maxValue as midValue dim midValue as object if IsNumeric(minValue) and IsNumeric(maxValue) then midValue = (CDbl(minValue) + CDbl(maxValue)) / 2 end if ColorScale3 = ColorScale3(value, _ minValue, minColor, _ midValue, midColor, _ maxValue, maxColor) end function public function ColorScale3(value as object, minValue as object, minColor as string, midValue as object, midColor as string, maxValue as object, maxColor as string) as string if IsNumeric(value) and IsNumeric(midValue) and CDbl(value) < CDbl(midValue) then ColorScale3 = ColorScale(value, minValue, minColor, midValue, midColor) else ColorScale3 = ColorScale(value, midValue, midColor, maxValue, maxColor) end if end function public function ColorScale(value as object, minValue as object, minColor as string, maxValue as object, maxColor as string, optional errorColor as string = "Transparent") as string ColorScale = errorColor if not IsNumeric(value) or not IsNumeric(minValue) or not IsNumeric(maxValue) then exit function end if ' Do all calculations using doubles (can't mix doubles and decimals) value = CDbl(value) minValue = CDbl(minValue) maxValue = CDbl(maxValue) if minValue >= maxValue then exit function end if if value <= minValue then ColorScale = minColor exit function end if if value >= maxValue then ColorScale = maxColor exit function end if dim scaleValue, r, g, b as double dim minRGB, minR, minG, minB as integer dim maxRGB, maxR, maxG, maxB as integer scaleValue = (value - minValue) / (maxValue - minValue) minRGB = GetRGB(minColor) minR = minRGB / 2^16 minG = (minRGB mod 2^16) / 2^8 minB = minRGB mod 2^8 maxRGB = GetRGB(maxColor) maxR = maxRGB / 2^16 maxG = (maxRGB mod 2^16) / 2^8 maxB = maxRGB mod 2^8 r = minR + ((maxR - minR) * scaleValue) g = minG + ((maxG - minG) * scaleValue) b = minB + ((maxB - minB) * scaleValue) ColorScale = string.Format("#{0:X2}{1:X2}{2:X2}", _ CInt(Math.Floor(r)), _ CInt(Math.Floor(g)), _ CInt(Math.Floor(b))) end function private function GetRGB(colorStr as string) as integer GetRGB = 0 if colorStr.StartsWith("#") then GetRGB = Int32.Parse(colorStr.Substring(1), System.Globalization.NumberStyles.AllowHexSpecifier) exit function end if dim c as System.Drawing.Color c = System.Drawing.Color.FromName(colorStr) GetRGB = (c.R * 2^16) + (c.G * 2^8) + c.B end function