つらつら Excel VBA

私の備忘録です。

シートの表からHTMLテーブルを作成

tdとかtrを書くの面倒なので作った。
以下を実行するとエクセルシートの選択範囲をテーブル用HTMLに書き換える。直接セルを書き換えてしまうので注意。
ファイル保存してから実行、もしくは実行後に下の削除用を実行。

' tableタグくらいは自分で書く。
Sub HTMLテーブル作成テスト()
    
    Dim r As Range
    
    For Each r In Selection
        If r.Row = Selection(1).Row Then
            ' 1行目は<th>
            r.Value = "<th>" & r.Value & "</th>"
        Else
            ' 2行目以降<td>
            r.Value = "<td>" & r.Value & "</td>"
        End If
    Next
    
    For Each r In Selection
        If r.Column = Selection(1).Column Then
            ' 1列目
            r.Value = "<tr>" & r.Value
        ElseIf r.Column = Selection(Selection.Count).Column Then
            ' 最終列
            r.Value = r.Value & "</tr>"
        End If
    Next
    
End Sub

' タグ削除用
Sub deleteTag()
    
    Dim r As Range
    For Each r In Selection
        r.Value = Replace(r.Value, "<th>", "")
        r.Value = Replace(r.Value, "</th>", "")
        r.Value = Replace(r.Value, "<tr>", "")
        r.Value = Replace(r.Value, "</tr>", "")
        r.Value = Replace(r.Value, "<td>", "")
        r.Value = Replace(r.Value, "</td>", "")
    Next
    
End Sub

選択範囲の上下左右四隅の考え方とかVBA教材向けのような気がする。

以上。

演算誤差

VBAに限らずコンピュータであれば演算誤差は起こる。
演算誤差の有無は、仕様を決めた人と数式とかプログラム書く人に委ねられる。
最近は誤差のこと忘れてた(笑)

同じ動作のプログラムを2つ用意。違うのは変数だけ。

Sub 演算誤差の確認()
    Dim d As Double: d = 0
    Do While d < 0.1
        d = d + 0.01
    Loop
    Debug.Print "Double型", d
    
    Dim c As Currency: c = 0
    Do While c < 0.1
        c = c + 0.01
    Loop
    Debug.Print "Currency型", c
End Sub

イミディエイトウィンドウ

Double型       0.11
Currency型     0.1


残念ながらVBAにDecimalは無いので、Currency(通貨型)を使用。計算時にキャストしても回避できる。
Currency型は整数部15桁、小数部4桁の固定小数点型変数とのこと。よく調べてから使いましょう。

'Currency型にキャスト
d = d + 0.01@
d = d + CCur(0.01)

以上。

RGB値から色名を知りたい

インターネットで定数一覧を探してエクセルシート上で作った脳筋コード。
定数値以外の色名は知らん。

'定数名を返す力技。
Function ColorName(iColor) As String
    Dim returnStr As String
    Select Case iColor
    Case 0: returnStr = "rgbBlack"
    Case 10025880: returnStr = "rgbPaleGreen"
    Case 10061943: returnStr = "rgbLightSlateGray"
    Case 10156544: returnStr = "rgbMediumSpringGreen"
    Case 10526303: returnStr = "rgbCadetBlue"
    Case 11119017: returnStr = "rgbDarkGray"
    Case 11119017: returnStr = "rgbDarkGrey"
    Case 11186720: returnStr = "rgbLightSeaGreen"
    Case 11206502: returnStr = "rgbMediumAquamarine"
    Case 11394815: returnStr = "rgbNavajoWhite"
    Case 11788021: returnStr = "rgbWheat"
    Case 11823615: returnStr = "rgbHotPink"
    Case 11829830: returnStr = "rgbSteelBlue"
    Case 11920639: returnStr = "rgbMoccasin"
    Case 12180223: returnStr = "rgbPeachPuff"
    Case 12632256: returnStr = "rgbSilver"
    Case 12695295: returnStr = "rgbLightPink"
    Case 128: returnStr = "rgbMaroon"
    Case 12903679: returnStr = "rgbBisque"
    Case 13353215: returnStr = "rgbPink"
    Case 13382297: returnStr = "rgbDarkOrchid"
    Case 13422920: returnStr = "rgbMediumTurquoise"
    Case 13434880: returnStr = "rgbMediumBlue"
    Case 13458026: returnStr = "rgbSlateBlue"
    Case 13495295: returnStr = "rgbBlanchedAlmond"
    Case 13499135: returnStr = "rgbLemonChiffon"
    Case 13688896: returnStr = "rgbTurquoise"
    Case 13749760: returnStr = "rgbDarkTurquoise"
    Case 13826810: returnStr = "rgbLightGoldenrodYellow"
    Case 13828244: returnStr = "rgbDarkViolet"
    Case 13850042: returnStr = "rgbMediumOrchid"
    Case 13882323: returnStr = "rgbLightGray"
    Case 13882323: returnStr = "rgbLightGrey"
    Case 139: returnStr = "rgbDarkRed"
    Case 13959039: returnStr = "rgbAquamarine"
    Case 14020607: returnStr = "rgbPapayaWhip"
    Case 14053594: returnStr = "rgbOrchid"
    Case 14150650: returnStr = "rgbAntiqueWhite"
    Case 14204888: returnStr = "rgbThistle"
    Case 14381203: returnStr = "rgbMediumPurple"
    Case 14474460: returnStr = "rgbGainsboro"
    Case 14480885: returnStr = "rgbBeige"
    Case 14481663: returnStr = "rgbCornsilk"
    Case 14524637: returnStr = "rgbPlum"
    Case 14599344: returnStr = "rgbLightSteelBlue"
    Case 14745599: returnStr = "rgbLightYellow"
    Case 14772545: returnStr = "rgbRoyalBlue"
    Case 14804223: returnStr = "rgbMistyRose"
    Case 14822282: returnStr = "rgbBlueViolet"
    Case 15128749: returnStr = "rgbLightBlue"
    Case 15130800: returnStr = "rgbPowderBlue"
    Case 15134970: returnStr = "rgbLinen"
    Case 15136253: returnStr = "rgbOldLace"
    Case 15453831: returnStr = "rgbSkyBlue"
    Case 15570276: returnStr = "rgbCornflowerBlue"
    Case 15624315: returnStr = "rgbMediumSlateBlue"
    Case 15631086: returnStr = "rgbViolet"
    Case 15658671: returnStr = "rgbPaleTurquoise"
    Case 15660543: returnStr = "rgbSeashell"
    Case 15792895: returnStr = "rgbFloralWhite"
    Case 15794160: returnStr = "rgbHoneydew"
    Case 15794175: returnStr = "rgbIvory"
    Case 16118015: returnStr = "rgbLavenderBlush"
    Case 16119285: returnStr = "rgbWhiteSmoke"
    Case 16436871: returnStr = "rgbLightSkyBlue"
    Case 16443110: returnStr = "rgbLavender"
    Case 16448255: returnStr = "rgbSnow"
    Case 16449525: returnStr = "rgbMintCream"
    Case 16711680: returnStr = "rgbBlue"
    Case 16711935: returnStr = "rgbFuchsia"
    Case 16748574: returnStr = "rgbDodgerBlue"
    Case 16760576: returnStr = "rgbDeepSkyBlue"
    Case 16775408: returnStr = "rgbAliceBlue"
    Case 16775416: returnStr = "rgbGhostWhite"
    Case 16776960: returnStr = "rgbAqua"
    Case 16777200: returnStr = "rgbAzure"
    Case 16777215: returnStr = "rgbWhite"
    Case 17919: returnStr = "rgbOrangeRed"
    Case 2139610: returnStr = "rgbGoldenrod"
    Case 2237106: returnStr = "rgbFireBrick"
    Case 2263842: returnStr = "rgbForestGreen"
    Case 2330219: returnStr = "rgbOliveDrab"
    Case 255: returnStr = "rgbRed"
    Case 25600: returnStr = "rgbDarkGreen"
    Case 2763429: returnStr = "rgbBrown"
    Case 2970272: returnStr = "rgbSienna"
    Case 3107669: returnStr = "rgbDarkOliveGreen"
    Case 3145645: returnStr = "rgbGreenYellow"
    Case 32768: returnStr = "rgbGreen"
    Case 32896: returnStr = "rgbOlive"
    Case 3329330: returnStr = "rgbLimeGreen"
    Case 3329434: returnStr = "rgbYellowGreen"
    Case 36095: returnStr = "rgbDarkOrange"
    Case 3937500: returnStr = "rgbCrimson"
    Case 4163021: returnStr = "rgbPeru"
    Case 42495: returnStr = "rgbOrange"
    Case 4678655: returnStr = "rgbTomato"
    Case 5197615: returnStr = "rgbDarkSlateGray"
    Case 5197615: returnStr = "rgbDarkSlateGrey"
    Case 5275647: returnStr = "rgbCoral"
    Case 55295: returnStr = "rgbGold"
    Case 5737262: returnStr = "rgbSeaGreen"
    Case 6053069: returnStr = "rgbIndianRed"
    Case 6333684: returnStr = "rgbSandyBrown"
    Case 64636: returnStr = "rgbLawnGreen"
    Case 65280: returnStr = "rgbLime"
    Case 65407: returnStr = "rgbChartreuse"
    Case 65535: returnStr = "rgbYellow"
    Case 6908265: returnStr = "rgbDimGray"
    Case 6908265: returnStr = "rgbDimGrey"
    Case 7059389: returnStr = "rgbDarkKhaki"
    Case 7071982: returnStr = "rgbPaleGoldenrod"
    Case 7346457: returnStr = "rgbMidnightBlue"
    Case 7451452: returnStr = "rgbMediumSeaGreen"
    Case 7504122: returnStr = "rgbSalmon"
    Case 755384: returnStr = "rgbDarkGoldenrod"
    Case 8034025: returnStr = "rgbDarkSalmon"
    Case 8036607: returnStr = "rgbLightSalmon"
    Case 8388352: returnStr = "rgbSpringGreen"
    Case 8388608: returnStr = "rgbNavy"
    Case 8388608: returnStr = "rgbNavyBlue"
    Case 8388736: returnStr = "rgbPurple"
    Case 8421376: returnStr = "rgbTeal"
    Case 8421504: returnStr = "rgbGray"
    Case 8421504: returnStr = "rgbGrey"
    Case 8421616: returnStr = "rgbLightCoral"
    Case 8519755: returnStr = "rgbIndigo"
    Case 8721863: returnStr = "rgbMediumVioletRed"
    Case 8894686: returnStr = "rgbBurlyWood"
    Case 9109504: returnStr = "rgbDarkBlue"
    Case 9109643: returnStr = "rgbDarkMagenta"
    Case 9125192: returnStr = "rgbDarkSlateBlue"
    Case 9145088: returnStr = "rgbDarkCyan"
    Case 9145088: returnStr = "rgbLightCyan"
    Case 9221330: returnStr = "rgbTan"
    Case 9234160: returnStr = "rgbKhaki"
    Case 9408444: returnStr = "rgbRosyBrown"
    Case 9419919: returnStr = "rgbDarkSeaGreen"
    Case 9470064: returnStr = "rgbSlateGray"
    Case 9498256: returnStr = "rgbLightGreen"
    Case 9639167: returnStr = "rgbDeepPink"
    Case 9662683: returnStr = "rgbPaleVioletRed"
    Case Else
        returnStr = "不明"
    End Select
    ColorName = returnStr
End Function

テストコード

Sub testColorName142()
    Debug.Print ColorName(rgbRed)
    Debug.Print ColorName(RGB(0, 128, 0))
    Debug.Print ColorName(16711680)
End Sub

イミディエイトウィンドウ

rgbRed
rgbGreen
rgbBlue

以上。

オートシェイプの文字をグラデーション

何回か虹グラデーションを作って分かったけど、緑色をそのままrgbGreenで虹を作るとなんか美しくない。固定観念に囚われず好きな色で作るべし。

ちなみに虹が7色なのは日本と数国だけ、8色の国や2~6色の国もある。

文字のグラデーションをする際に0~1の範囲だと両端のグラデーションが見えない。0.3~0.7や0.25~0.75のように見える範囲で攻めるべし。テストすべし。

以下テストコード

Sub オートシェイプ文字グラデーションテスト()
    
    Dim myShape As Shape
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
'    For Each myShape In ws.Shapes
'        myShape.Delete
'    Next
    
    'オートシェイプ四角形/長方形
    Set myShape = ws.Shapes.AddShape(msoShapeRectangle, 0, 0, 180, 80)
    
    'テキスト情報
    With myShape.TextFrame2.TextRange
        .Text = "■Test"
        .Font.Size = 48
        .Font.Name = "MS Pゴシック"
        .Font.Bold = True
        .Font.Italic = True
        .Font.Fill.ForeColor.RGB = rgbBlack
    End With
    
    '外枠の有無
    'myShape.Line.ForeColor.RGB = rgbRed '赤枠
    myShape.Line.Visible = msoFalse '非表示
    
    '塗りつぶしの設定
    With myShape.Fill
        '.ForeColor.RGB = rgbWhite '塗りつぶし(白)
        .Visible = msoFalse '塗りつぶし無し
    End With
    
    'グラデーション情報追加
    With myShape.TextFrame2.TextRange.Font.Fill
        
        .OneColorGradient msoGradientHorizontal, 1, 1
        .GradientAngle = 90
        
        'GradientStopsは2個以下に出来ない。
        '自動生成された0と1を最後に削除した。
        With .GradientStops
            .Insert rgbRed, 0.3
            .Insert rgbOrange, 0.35
            .Insert rgbYellow, 0.4
            .Insert rgbLime, 0.45
            .Insert rgbGreen, 0.5
            .Insert rgbBlue, 0.55
            .Insert rgbIndigo, 0.6
            .Insert rgbBlueViolet, 0.65
            .Insert rgbPurple, 0.7
            .Delete 1
            .Delete 1
        End With
        
'        With .GradientStops
'            .Insert rgbRed, 0.3
'            .Insert rgbRed, 0.35
'            .Insert rgbOrange, 0.36
'            .Insert rgbOrange, 0.41
'            .Insert rgbYellow, 0.42
'            .Insert rgbYellow, 0.47
'            .Insert rgbGreen, 0.48
'            .Insert rgbGreen, 0.52
'            .Insert rgbBlue, 0.53
'            .Insert rgbBlue, 0.58
'            .Insert rgbIndigo, 0.59
'            .Insert rgbIndigo, 0.64
'            .Insert rgbPurple, 0.65
'            .Insert rgbPurple, 0.7
'            .Delete 1
'            .Delete 1
'        End With
        
    End With
    
    Set myShape = Nothing
    
End Sub

以上。

四角形グラデーションテスト

テスト結果
f:id:tanaka0:20220418142937p:plain

以下テストコード

Sub 四角形グラデーションテスト()
    
    Dim r As Range
    Set r = ThisWorkbook.Worksheets("Sheet1").Range("A2")
    
    Do While r.Value <> ""
        With r.Interior
            .Pattern = xlPatternRectangularGradient '四角形
            
            With .Gradient
                'グラデーションの収束箇所(0~1)
                .RectangleTop = r.Offset(0, 1).Value
                .RectangleLeft = r.Offset(0, 2).Value
                .RectangleRight = r.Offset(0, 3).Value
                .RectangleBottom = r.Offset(0, 4).Value
                
                'ColorStopsは収束箇所→外側(0~1)
                With .ColorStops
                    .Clear
                    .Add(0).Color = rgbWhite
'                    .Add(0.333).Color = rgbRed
'                    .Add(0.666).Color = rgbWhite
                    .Add(1).Color = rgbBlue
                End With
            End With
        End With
        
        Set r = r.Offset(1, 0)
    Loop
    
End Sub


ColorStops複数設定テスト
f:id:tanaka0:20220418145556p:plain

テスト(ry

Sub 虹テスト()
    
    Dim r As Range
    Set r = Selection
    
    With r.Interior
        .Pattern = xlPatternRectangularGradient '四角形
        
        With .Gradient
            'グラデーションの収束箇所(0~1)
            .RectangleTop = 0.45
            .RectangleLeft = 0.2
            .RectangleRight = 0.8
            .RectangleBottom = 0.55
            
            'ColorStopsは収束箇所→外側(0~1)
            With .ColorStops
                
'                '虹①
'                .Clear
'                .Add(0).Color = rgbRed
'                .Add(0.166).Color = rgbOrange
'                .Add(0.333).Color = rgbYellow
'                .Add(0.5).Color = rgbGreen
'                .Add(0.666).Color = rgbBlue
'                .Add(0.833).Color = rgbIndigo
'                .Add(1).Color = rgbPurple
                
                '虹②
                .Clear
                .Add(0).Color = rgbPurple
                .Add(0.166).Color = rgbIndigo
                .Add(0.333).Color = rgbBlue
                .Add(0.5).Color = rgbGreen
                .Add(0.666).Color = rgbYellow
                .Add(0.833).Color = rgbOrange
                .Add(1).Color = rgbRed
                
            End With
        End With
    End With
    
End Sub

以上。

背景色の線グラデーションテスト

きれいなグラデーションを作るにはセンスが必要!私には無理。

テスト結果
f:id:tanaka0:20220417163543p:plain

以下、テストコード

Sub 線グラデーションテスト()
    
    With ActiveSheet.Range("A1").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 0
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = rgbWhite
            .Add(1).Color = rgbBlue
        End With
    End With
    
    With ActiveSheet.Range("B1").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 180
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = rgbWhite
            .Add(1).Color = rgbBlue
        End With
    End With
    
    With ActiveSheet.Range("A3").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 90
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = rgbWhite
            .Add(1).Color = rgbBlue
        End With
    End With
    
    With ActiveSheet.Range("B3").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 630 '(270+360)。270で良い。
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = rgbWhite
            .Add(1).Color = rgbBlue
        End With
    End With
    
    '設定漏れテスト。Clearの有無でも変わる。
    With ActiveSheet.Range("A5").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 10
        With .Gradient.ColorStops
            .Clear
            '.Add(0).Color = vbWhite
            .Add(0.4).Color = vbWhite
            .Add(0.8).Color = vbBlue
            '.Add(1).Color = vbBlue
        End With
    End With
    
    '等間隔に交互に設定
    With ActiveSheet.Range("A6").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 0
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = RGB(255, 255, 255) '白
            .Add(0.2).Color = RGB(0, 0, 255) '青
            .Add(0.4).Color = RGB(255, 255, 255) '白
            .Add(0.6).Color = RGB(0, 0, 255) '青
            .Add(0.8).Color = RGB(255, 255, 255) '白
            .Add(1).Color = RGB(0, 0, 255) '青
        End With
    End With
    
    'ColorStopsの間隔を狭くするとグラデーションしていないように見える
    With ActiveSheet.Range("A7").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 45
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = &HFFFFFF '白
            .Add(0.5).Color = &HFFFFFF '白 ここから
            .Add(0.51).Color = &HFF0000 '青 ここを狭くした
            .Add(1).Color = &HFF0000 '青
        End With
    End With
    
    'ColorStopsの数値を同じに。意図しない結果になる。
    With ActiveSheet.Range("A8").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 45
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = &HFFFFFF '白
            .Add(0.5).Color = &HFFFFFF '白
            .Add(0.5).Color = &HFF0000 '青
            .Add(1).Color = &HFF0000 '青
        End With
    End With
    
    'ColorStopsの数値を同じにして色の順番を変えてみた。
    'これが正しい動きなのか分からず怖いのでやらない。
    With ActiveSheet.Range("A9").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 45
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = &HFFFFFF '白
            .Add(0.5).Color = &HFF0000 '青 ここと
            .Add(0.5).Color = &HFFFFFF '白 ここを逆にした
            .Add(1).Color = &HFF0000 '青
        End With
    End With
    
    '虹1(赤, 橙, 黄, 緑, 青, 藍, 紫)
    With ActiveSheet.Range("A10").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 5
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = rgbRed
            .Add(0.166).Color = rgbOrange
            .Add(0.333).Color = rgbYellow
            .Add(0.5).Color = rgbGreen
            .Add(0.666).Color = rgbBlue
            .Add(0.833).Color = rgbIndigo
            .Add(1).Color = rgbPurple
        End With
    End With
    
    '虹2(赤, 橙, 黄, 緑, 青, 藍, 紫)
    With ActiveSheet.Range("A11").Interior
        .Pattern = xlPatternLinearGradient
        .Gradient.Degree = 5
        With .Gradient.ColorStops
            .Clear
            .Add(0).Color = rgbRed
            .Add(0.142).Color = rgbRed
            .Add(0.143).Color = rgbOrange
            .Add(0.285).Color = rgbOrange
            .Add(0.286).Color = rgbYellow
            .Add(0.428).Color = rgbYellow
            .Add(0.429).Color = rgbGreen
            .Add(0.571).Color = rgbGreen
            .Add(0.572).Color = rgbBlue
            .Add(0.714).Color = rgbBlue
            .Add(0.715).Color = rgbIndigo
            .Add(0.857).Color = rgbIndigo
            .Add(0.858).Color = rgbPurple
            .Add(1).Color = rgbPurple
        End With
    End With
    
End Sub
'背景色、パターンをクリア。どちらも同結果。
Sub 背景色クリア()
    Cells.Interior.ColorIndex = xlNone
    Cells.Interior.Pattern = xlNone
End Sub


虹とか繰り返しの配色はコピペして使うことが考えられるので関数化してみた。
隣同士のセルでも違和感が無いよう同じ赤で囲むようにして、あれ?赤色だけ太くなるぞ、、、そりゃそうか。
角度をつけなければ違和感無いのでヨシ!

以下結果
f:id:tanaka0:20220417203012p:plain

以下(ry

Sub 関数化してみた()
    
    Dim myArray
    Dim r As range
    
    '虹背景
    myArray = Array(rgbRed, rgbOrange, rgbYellow, rgbGreen, rgbBlue, rgbIndigo, rgbPurple, rgbRed)
    Set r = Range("A13:E13")
    Call FillStripeColor2(r, 5, myArray)
    
    myArray = Array(rgbRed, rgbOrange, rgbYellow, rgbGreen, rgbBlue, rgbIndigo, rgbPurple)
    Set r = Range("A15:E15")
    Call FillStripeColor2(r, 0, myArray)
    
    'しまトラ模様(黄,黒,黄,黒,黄)
    myArray = Array(rgbYellow, rgbBlack, rgbYellow, rgbBlack, rgbYellow)
    Set r = Range("A17:E17")
    Call FillStripeColor2(r, 15, myArray)
    
End Sub

'背景を線グラデーションで装飾
'targetRange:対象セル範囲
'Angle:角度(0~360度)
'colorArray:色配列
Private Sub FillStripeColor2(targetRange As range, Angle As Integer, colorArray)
    
    Dim i As Long, setColor As Long
    Dim startSpan As Double
    Dim endSpan As Double
    
    Dim LineCount As Integer
    LineCount = UBound(colorArray) + 1
    
    '境目のぼかし具合調整。数が大きいほどぼける。
    '1 / LineCountより小さいこと。
    Dim blurBorder As Double
    blurBorder = (1 / LineCount) / 200
    
    With targetRange.Interior
        .Pattern = xlPatternLinearGradient '線グラデーション
        .Gradient.Degree = Angle '角度指定
        With .Gradient.ColorStops
            .Clear
            
            For i = LBound(colorArray) To UBound(colorArray)
                
                setColor = colorArray(i)
                
                '開始~終了の範囲計算
                Select Case i
                Case LBound(colorArray)
                    startSpan = 0
                    endSpan = 1 / LineCount
                Case UBound(colorArray)
                    startSpan = endSpan + blurBorder
                    endSpan = 1
                Case Else
                    startSpan = endSpan + blurBorder
                    endSpan = (1 / LineCount) * (i + 1)
                End Select
                
                '設定
                .Add(startSpan).Color = setColor
                .Add(endSpan).Color = setColor
                
                'デバッグ用
                'Debug.Print i & ", " & startSpan & "~" & endSpan & ", 色=" & setColor
                
            Next
            
        End With
    End With
End Sub

以上。

背景色の線グラデーション

背景色を装飾する。グラデーションだけど、ぼかしは極力抑えました。グラデーションとは...?
f:id:tanaka0:20220416132813p:plain

Sub 線グラデーションテスト()
    Call FillStripeColor(range("A1"), rgbWhite, rgbBlue, 45, 2)
    Call FillStripeColor(range("B1"), rgbWhite, rgbGreen, 135, 2)
    Call FillStripeColor(range("A2"), rgbWhite, rgbBrown, 315, 2)
    Call FillStripeColor(range("B2"), rgbWhite, rgbRed, 225, 2)
    Call FillStripeColor(range("A3:A3"), rgbBlack, rgbYellow, 10, 7) 'トラ模様1
    Call FillStripeColor(range("A4:B4"), rgbYellow, rgbBlack, 10, 7) 'トラ模様2
End Sub

'背景を線グラデーションで装飾
'TargetRange:対象セル範囲
'Color1:色1、RGB(255,255,255)形式でも指定可
'Color2:色2
'Angle:角度(0~360度)
'LineCount:分割数
Private Sub FillStripeColor(TargetRange As range, Color1 As Long, Color2 As Long, Angle As Integer, LineCount As Integer)
    
    Dim i As Long, setColor As Long
    Dim startSpan As Double
    Dim endSpan As Double
    
    '境目のぼかし具合調整。
    'blurBorderは1 / LineCountより小さいこと。
    Dim blurBorder As Double
    blurBorder = (1 / LineCount) / 20
    
    With TargetRange.Interior
        .Pattern = xlPatternLinearGradient '線グラデーション
        .Gradient.Degree = Angle '角度指定
        With .Gradient.ColorStops
            .Clear
            
            For i = 1 To LineCount
                
                '交互に色をセット
                setColor = IIf(i Mod 2 = 1, Color1, Color2)
                
                '範囲計算
                Select Case i
                Case 1
                    startSpan = 0
                    endSpan = 1 / LineCount
                Case LineCount
                    startSpan = endSpan + blurBorder
                    endSpan = 1
                Case Else
                    startSpan = endSpan + blurBorder
                    endSpan = (1 / LineCount) * i
                End Select
                
                '設定
                With .Add(startSpan)
                    .Color = setColor
                    '.TintAndShade = 0 '背景の明度(-1~1)
                End With
                With .Add(endSpan)
                    .Color = setColor
                    '.TintAndShade = 0
                End With
                
                'デバッグ用
                'Debug.Print i & ", " & startSpan & "~" & endSpan & ", 色=" & setColor
                
            Next
            
        End With
    End With
End Sub

ぼかし具合部分を調整するとこうなる。一部できてない(笑)
f:id:tanaka0:20220416132826p:plain

以上。