日曜日, 8月 03, 2025

Excel VBA 49 
ExccelでA2とA2セルの色を指定段階の色相グラデに

ExccelでA2とA2セルの色から指定した段階の色相グラデ—ションを作成します。

Sub ApplyHueGradientToColumnB()
Dim ws As Worksheet
Dim startColor As Long, endColor As Long
Dim steps As Integer, i As Integer
Dim startHue As Single, endHue As Single
Dim startSaturation As Single, startBrightness As Single
Dim endSaturation As Single, endBrightness As Single
Dim h As Single, s As Single, b As Single
Set ws = ActiveSheet
startColor = ws.Range("A1").Interior.Color
endColor = ws.Range("A2").Interior.Color
steps = Application._
        InputBox("ステップ数を入力してください:", Type:=1)
' RGBからHSBに変換
RGBtoHSB startColor, startHue, startSaturation, startBrightness
RGBtoHSB endColor, endHue, endSaturation, endBrightness

' グラデーションを適用
For i = 0 To steps
h = startHue + (endHue - startHue) * i / steps
s = startSaturation + _
            (endSaturation - startSaturation) * i / steps
b = startBrightness + _
            (endBrightness - startBrightness) * i / steps
ws.Cells(i + 3, 2).Interior.Color = HSBtoRGB(h, s, b) ' B列に適用
Next i
End Sub

' RGB を HSB に変換
Sub RGBtoHSB(ByVal rgbColor As Long, _
    ByRef h As Single, ByRef s As Single, ByRef b As Single)
Dim r As Single, g As Single, bl As Single
Dim minVal As Single, maxVal As Single, delta As Single

r = (rgbColor Mod 256) / 255
g = ((rgbColor ¥ 256) Mod 256) / 255
bl = (rgbColor ¥ 65536) / 255
minVal = WorksheetFunction.Min(r, g, bl)
maxVal = WorksheetFunction.Max(r, g, bl)
delta = maxVal - minVal

b = maxVal ' 明度

If delta = 0 Then
h = 0
s = 0
Else
s = delta / maxVal ' 彩度

If maxVal = r Then
h = (g - bl) / delta
ElseIf maxVal = g Then
h = 2 + (bl - r) / delta
Else
h = 4 + (r - g) / delta
End If

h = h * 60
If h < 0 Then h = h + 360
End If
End Sub

' HSB を RGB に変換
Function HSBtoRGB(ByVal h As Single, _
    ByVal s As Single, ByVal b As Single) As Long
Dim r As Single, g As Single, bl As Single
Dim i As Integer, f As Single, p As Single, q As Single, t As Single

If s = 0 Then
r = b: g = b: bl = b
Else
h = h / 60
i = Int(h)
f = h - i
p = b * (1 - s)
q = b * (1 - s * f)
t = b * (1 - s * (1 - f))

Select Case i Mod 6
Case 0: r = b: g = t: bl = p
Case 1: r = q: g = b: bl = p
Case 2: r = p: g = b: bl = t
Case 3: r = p: g = q: bl = b
Case 4: r = t: g = p: bl = b
Case 5: r = b: g = p: bl = q
End Select
End If

HSBtoRGB = RGB(Int(r * 255), Int(g * 255), Int(bl * 255))
End Function

A1とA2セルに基準となる塗りを行い、VBAを実行すると段階数を入力するパレットが表示されるので任意入力すれば・・・

指定段階段階の基準の色の間となる段階の塗りをB列に表示します。

TCDW8482 
相手するスタッフには同情してしまう今日この頃

Baby Alien 111
白菜系(^o^)
美容院で、機関銃のように家族の内輪話を展開するお客さん。ワケワカメですが、それを相手するスタッフには同情してしまう今日この頃。ちなみに私は、色々なトラウマから高校以降は理髪店を利用していません。

土曜日, 8月 02, 2025

JavaScriptでAI遊び 57 
Illustratorで最小円の直径間隔で蛇の目を作る(改良版)

Illustratorで最小円の直径の間隔で蛇の目を作る。正円だけでなく楕円にも対応版。

数を指定しても煩雑になるので、ここでは元の円を含めて4つの円で作成する蛇の目マークを任意の楕円を選択して自動生成します。その際、最小円がそれぞれの楕円の垂直方向の間隔を同じとします。

結果、選択した楕円の垂直方向の直径Aに対して
2つ目の円の直径は(A÷7×5)、
3つ目の円の直径は(A÷7×3)、
一番小さい円の直径は(A÷7×1)
となります。

(function () {
var doc = app.activeDocument;
var sel = doc.selection;
if (sel.length !== 1 || sel[0].typename !==
        "PathItem" || !sel[0].closed) {
alert("1つの楕円を選択してください。");
return;
}
var baseEllipse = sel[0];
var baseWidth = baseEllipse.width;
var baseHeight = baseEllipse.height;
var centerX = baseEllipse.position[0] + baseWidth / 2;
var centerY = baseEllipse.position[1] - baseHeight / 2;
var sizes = [5/7, 3/7, 1/7];
for (var i = 0; i < sizes.length; i++) {
var newWidth = baseWidth * sizes[i];
var newHeight = baseHeight * sizes[i];
var newEllipse = doc.pathItems.ellipse(
centerY + newHeight / 2,
centerX - newWidth / 2,
newWidth,
newHeight
);
newEllipse.stroked = true;
newEllipse.filled = false;
}
})();

実行結果です。正円にも対応します。

TCDW8481 
猛暑で外に出たくなくなる症候群

Baby Alien 110
着地が綺麗に決まりました〜(^o^)
久しぶりにドトールコーヒーにて、シャインマスカット・ヨーグルトとシナモンロールで打ち合わせ。打ち合わせが終わっても、猛暑で外に出たくなくなる症候群。

金曜日, 8月 01, 2025

手作りレンズプロジェクト 04 
100均の虫眼鏡1枚レンズ vol.2

100均でゲットした4倍の虫眼鏡を分解せずにレンズとする実験の続編です。色画用紙で作成するのはレンズと絞り部分に抑え、それ以外は手持ちの延長ユニットやフォーカシングアダプタを組み合わせてみました。

手作りレンズプロジェクト

こんな感じです。コレでデリケートなピント合わせが可能になりました。

でも、相変わらずピント合わせは難しかったです。一応カメラレンズにピントを合わせましたが、こんなもんかな?

SONY α NEX-6
KAZNEX 38mm F19

TCDW8480 
多分仕事できない人なんだと確信しています

Baby Alien 109
耳が尖っちゃった〜(^o^)
地下鉄の中で大声で仕事の成功例を自慢し合っているリーマン2名。とにかくうるさくて辟易。痛いというか、多分仕事できない人なんだと確信しています。