• ベストアンサー

Excellでの関数の作り方

今、こんな関数を作りたいと思っているんですけど… 値を入力 ↓  ↓ 偶数 奇数 | ↓ ↓3倍して1加える 2で割る ↓ ↓ 偶数奇数 偶数奇数 : : : : : : : : : : : : 1(いわゆる「角谷の予想」です) 意味分かるでしょうか?こういう関数です。ご教授願います。

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.4

値を入力 ↓  ↓ 偶数 奇数 | ↓ ↓3倍して1加える 2で割る ここまでの関数が欲しいのでしょうか? ここまででしたら、他の方の回答でOKですね。 それとも、1になるまでの関数ですか? それでしたら、 =1 でOKですね。 (冗談ですよ。) 繰り返し計算していって、1になるかどうかを検証するための関数であれば、VBAを使用する必要があるかもしれません。 こんな感じの関数を作って Function 角谷(p_Value As Variant) As Integer Dim i As Integer i = Val(p_Value) If i = 1 Then 角谷 = 1 Exit Function End If If (i Mod 2) = 0 Then 角谷 = 角谷(i / 2) Else 角谷 = 角谷(i * 3 + 1) End If End Function セルで =角谷(A1) のようにして使用します。

Noy
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

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

『角谷の予想』ということで、なるべく大きい数値が扱えるようにしてみました。(当方、Excel97です) A1に最初の数値を入れ、A2に  =IF(OR(A1<=1,A1=""),"",IF(INT(A1/2)*2=A1,A1/2,A1*3+1)) とします。 999999でも258回目でやっと1になります。A2の式は下方向にコピーします。 ただ、エクセルの関数では、最初が12桁数値くらいでも3倍を繰り返すと、計算結果が15桁を超して正しく求められなくなる場合があります。 長い桁の数値で、1位または1位と10位の数値が0になったら計算の検証が必要です。

Noy
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

=IF(OR(A1=1,A1=""),"",IF(MOD(A1,2)=0,A1/2,A1*3+1)) の方がよさそうですね。これだと左隣のセルが1または空白だとなにも表示しなくなります。

Noy
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.1

おはようございます。 A1に数字をいれて B1に =IF(MOD(A1,2)=0,A1/2,A1*3+1) を入れます。 あとは、その関数をC1 D1....とコピーしていけばできあがりです。 エクセルで試してみました。関数については http://www3.tokai.or.jp/excel/index.htm を参考にされるとよいと思います。

参考URL:
http://www3.tokai.or.jp/excel/index.htm
Noy
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A