https://blog.goo.ne.jp/nichikon2/e/bc53b832fb46b2466196b41cc1cdf2ff
の記事で作ったプログラムをちょっと改造してみた。
ユーザーが入力した文字の中に「円」または「直線」が含まれているかどうか判定し、
もし含まれていた場合のみ直線または円を描くプログラムを実行するようにした。
ちなみにbardでは何回も修正するように依頼したのだが、
全く直らないどころか同じ返答を繰り返すばかりだったので、
ChatGPTに頼んでみたら、一発で直った。
それが次のコードである。
Sub CAD()
Dim userInput As String
Dim hasLine As Boolean
Dim hasCircle As Boolean
userInput = InputBox("何をしましょうか?")
hasLine = InStr(userInput, "直線") > 0
hasCircle = InStr(userInput, "円") > 0
If hasLine Then
MsgBox "始点と終点の座標を指定してください。"
Dim StartX As Integer
Dim StartY As Integer
Dim EndX As Integer
Dim EndY As Integer
StartX = InputBox("始点のX座標を入力してください。")
StartY = InputBox("始点のY座標を入力してください。")
EndX = InputBox("終点のX座標を入力してください。")
EndY = InputBox("終点のY座標を入力してください。")
With ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
.Line.Weight = 2 ' Set the line thickness to 2 points
End With
ElseIf hasCircle Then
MsgBox "中心の座標と半径を入力してください。"
Dim centerX As Variant
Dim centerY As Variant
Dim radius As Variant
Dim drawingSheet As Worksheet
Dim newCircle As Shape
Set drawingSheet = ActiveSheet
centerX = Application.InputBox("Enter the x-coordinate of the center of the circle", "Center X", Type:=1)
centerY = Application.InputBox("Enter the y-coordinate of the center of the circle", "Center Y", Type:=1)
radius = Application.InputBox("Enter the radius of the circle", "Radius", Type:=1)
Set newCircle = drawingSheet.Shapes.AddShape(msoShapeOval, _
-radius, centerY - radius, radius * 2, radius * 2)
With newCircle.Line
.Weight = 2 ' Set the line thickness to 2 points
.DashStyle = msoLineSolid ' Set the line style to solid
.ForeColor.RGB = RGB(255, 0, 0) ' Set the line color to red
End With
newCircle.Fill.Visible = msoFalse ' Set the fill to transparent
Else
MsgBox "そのような操作はできません。"
End If
End Sub
てなわけで今回はChatGPTの勝ち。