スポンサーリンク

Excelマクロ VS ガウスの公式

スポンサーリンク
この記事は約3分で読めます。

1+2+3+4+・・・1000万の計算スピードと正確さ

動画で使用したVBAがこちらです。

Option Explicit

Public Sub 連番合計_処理時間測定()

Dim ws As Worksheet
Dim startNum As Long
Dim endNum As Long
Dim i As Long

Dim total As Currency
Dim t0 As Double
Dim elapsed As Double

Set ws = ActiveSheet

'--- 入力チェック
If Not IsNumeric(ws.Range("C4").Value) Or Not IsNumeric(ws.Range("D4").Value) Then
MsgBox "C4とD4には数値を入力してください。", vbExclamation
Exit Sub
End If

startNum = CLng(ws.Range("C4").Value)
endNum = CLng(ws.Range("D4").Value)

If startNum > endNum Then
MsgBox "C4の開始値は、D4の終了値以下にしてください。", vbExclamation
Exit Sub
End If

'--- 結果欄を初期化
ws.Range("E4:F4").ClearContents

'--- 時間測定開始
t0 = Timer

'--- ここで本当に1つずつ足す
total = 0
For i = startNum To endNum
total = total + i
Next i


'--- 経過時間
elapsed = Timer - t0

'--- 日付をまたいだ場合の保険
If elapsed < 0 Then elapsed = elapsed + 86400

'--- 結果を書き出し
ws.Range("E4").Value = total
ws.Range("E4").NumberFormat = "#,##0"

ws.Range("F4").Value = elapsed
ws.Range("F4").NumberFormat = "0.000000"

MsgBox "計算が完了しました。" & vbCrLf & _
"答え:" & Format(total, "#,##0") & vbCrLf & _
"処理時間:" & Format(elapsed, "0.000000") & " 秒", vbInformation

End Sub

‘— ここで本当に1つずつ足す
total = 0
For i = startNum To endNum
total = total + i
Next i
これが「要」です。たったこの4行の中で1000万回計算したわけです。

よって、この動画においてはガウスに勝るとも劣らない結果なのでPCの勝ちにしときましょうよ。

お好きなシートのC4、D4セルに数値を入れて実行したら計算してくれるmacroですが、大して役に立ちません。

とにかく、PCの計算(演算)能力を証明出来て良かったのですが・・・・

実は、これには続編があります。(次回は少しは役に立つはず)