• ベストアンサー

エクセル関数

再度質問させて下さい。行と列に24から100までの数字を入れてあり、それぞれの掛け合わせた数字を一覧表として作成してあります。その中から割り算の答え(ex.0.5816425121)に合う分母と分子の組み合わせ(2408/4140)を答えとして導きたいのですが、こんなことができるのでしょうか。ご教示下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

一般性は失わないと思うので、添付図のように5×5(11~15)の表で解答します。 B4~G9は掛け算を実行した表です。計算式ではなく値です。 片方ずつ候補の数値を絞っていきます。 ここで問題になるのが指定される数値の誤差です。質問にある「0.5816425121」はコンピュータ(Excel)の中の数値ではありません。まだ有効桁数が多いということです(IEEE754)。従って、演算誤差を考慮した絞り込みが必要になります。 添付図ではセルA1に指定の数値、セルI1に誤差の上限を指定しています。この誤差の取り方で結果が変わってきます。 セルK5:=IF(MIN(MOD(C5/$A$1,1),MOD(-C5/$A$1,1))<$I$1,"〇","") これを5×5にコピーします。これで分母の可能性のある個所に「〇」が付きます。質問の表は大きいので表の上と左で「〇」の個数をカウントしています。(CountIf関数) 次に分子を絞り込みます。 セルK13:=IF(MIN(MOD(C5*$A$1,1),MOD(-C5*$A$1,1))<$I$1,"〇","") これで分子の候補に「〇」が付きます。 添付図で144/169で指定した数値になります。 質問の表で調べると、0.5816425121を満足する数値は、  1204(2*2*7*43)  /2070(2*3*3*5*23)  1806(2*3*7*43)  /3105(3*3*3*5*23)  2408(2*2*2*7*43) /4140(2*2*3*3*5*23)  3010(2*5*7*43)  /5175(3*3*5*5*23)  3612(2*2*3*7*43) /6210(2*3*3*3*5*23)  4816(2*2*2*2*7*43)/8280(2*2*2*3*3*5*23) の6個が出てきました。「( )内」は素因数分解した結果です。分子は2*7*43、分母は3*3*5*23が共通の因数です。 これからも、解は複数の組み合わせがあるでしょう。 やみくもに計算すると同じ答えでした。答えをSheet1のA,B列に出しています。 ご参考に。 Sub Gyakusann()   Dim dblShitei As Double   Const dblGosa = 0.0000001      Dim Num(100, 100) As Integer   Dim i As Integer, j As Integer   Dim i2 As Integer, j2 As Integer   Dim rw As Long      For i = 24 To 100     For j = 24 To 100       Num(i, j) = i * j     Next   Next      'dblShitei = InputBox("指定の数値")   dblShitei = 0.5816425121   For i = 24 To 100     For j = 24 To 100       For i2 = 24 To 100         For j2 = 24 To 100           If Abs(Num(i, j) / Num(i2, j2) - dblShitei) <= dblGosa Then             rw = rw + 1             Worksheets("Sheet1").Cells(rw, 1) = Num(i, j)             Worksheets("Sheet1").Cells(rw, 2) = Num(i2, j2)           End If         Next       Next     Next   Next      MsgBox "終了" End Sub

853245yh6191
質問者

お礼

有難う御座います。朝、期待しながらPCを開くとありました。すごいですね!と言ってもまだ理解できておりません。とにかく有難う御座います。今日一日かけて勉強してみます。またご連絡申し上げます。

関連するQ&A