火曜日, 8月 27, 2024

Excel VBA 27 
入力値の最大公約数と最小公倍数を表示



Visual Studio Basicと同じ事をVBAでやってみました。

Visual Studio Basic_35 入力値から最大公約数と最小公倍数を求める 2024/07/18

-------------------
Sub CalculateGCDandLCM()
Dim inputStr As String
Dim numbers() As String
Dim numArray() As Long
Dim i As Integer
Dim gcdResult As Long
Dim lcmResult As Long

' メッセージボックスで数値を入力させる
inputStr = InputBox("数値をカンマで区切って入力してください:", "GCDとLCMの計算")

' 入力がキャンセルされた場合
If inputStr = "" Then Exit Sub

' 入力された数値をカンマで分割して配列に格納
numbers = Split(inputStr, ",")
ReDim numArray(UBound(numbers))

' 文字列配列を数値配列に変換
On Error GoTo InvalidInput
For i = 0 To UBound(numbers)
numArray(i) = CLng(Trim(numbers(i)))
Next i
On Error GoTo 0

' 最大公約数を計算
gcdResult = numArray(0)
For i = 1 To UBound(numArray)
gcdResult = Application.WorksheetFunction.Gcd(gcdResult, numArray(i))
Next i

' 最小公倍数を計算
lcmResult = numArray(0)
For i = 1 To UBound(numArray)
lcmResult = lcm(lcmResult, numArray(i))
Next i

' 結果をメッセージボックスに表示
MsgBox "最大公約数 (GCD): " & gcdResult & vbCrLf & "最小公倍数 (LCM): " & lcmResult, vbInformation, "結果"
Exit Sub

InvalidInput:
MsgBox "無効な入力です。正しい数値をカンマで区切って入力してください。", vbExclamation, "入力エラー"
End Sub

' 最小公倍数を計算する関数
Function lcm(a As Long, b As Long) As Long
lcm = a * (b / Application.WorksheetFunction.Gcd(a, b))
End Function
-------------------
実行すると表示されるパレットにベースとなる数値をカンマで区切って複数入力して[OK]で・・・

結果が表示されます。

※本当はVisual Studio Basicよりも先に手を付けたのですが、デバッグで苦しみました。