【ExcelVBA公開模試】分母が10万以下で円周率に最も近い分数
文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。
問題
図1のようにセルA1に円周率を返す関数「=PI()」を入力した。この円周率に最も近い分数を考えたい。例えば、分母が7の場合、円周率に最も近い分数は22/7である。
ExcelVBAを用いて、次の各設問の処理を実行しなさい。
(1)Int関数を用いて、分母が1~100000の場合について、円周率に最も近い分数をそれぞれ求め、C1:D100000に図2のように表示しなさい。なお、関数Int(x)は、xが正の場合は小数点以下切り捨てとなるVBA関数である。
(2)さらに、Abs関数を用いて、D列の小数のうち円周率に最も近いものの右隣りのセルに〇印をつけなさい(図3)。なお、関数Abs(x)は、xの絶対値を求めるVBA関数である。
<図1>
<図2:設問(1)完成イメージ>
<図3:設問(2)完成イメージ>
わえなび式 正解例
(このページの下にあります)
目標回答時間
プロ3分以内、アマチュア10分以内に処理ができたら合格
この問題の出題範囲
「速読VBA単語」Program3-7まで
ご案内
ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。
正解例
円周率をPとすると、分子は「分母 * P」に近い整数なので、「Int(分母 * P)」か「Int(分母 * P)+1」のどちらかになります。最も円周率に近い分数は312689/99532です。
Sub kakko1()
p = Range("A1")
Dim a(1 To 100000, 1 To 2)
For i = 1 To 100000
j = Int(i * p)
If (j + 1) / i - p < p - j / i Then j = j + 1
a(i, 1) = j & "/" & i & "="
a(i, 2) = j / i
Next
Range("C1").Resize(100000, 2) = a
End Sub
Sub kakko2()
p = Range("A1")
gosa = p
a = Range("D1:D100000")
For i = 1 To 100000
If gosa > Abs(a(i, 1) - p) Then
gosa = Abs(a(i, 1) - p)
gosa_i = i
End If
Next
Cells(gosa_i, 5) = "〇"
Cells(gosa_i, 5).Select
End Sub
バックナンバー
この記事が気に入ったらサポートをしてみませんか?