• 締切済み

ExcelのVBAソースコード(一部)の翻訳

ソースコードの一部ですが、開発者が他界し訊けずにおります。 今後自分でもVBAを勉強しますが、お教えいただけますでしょうか。 なお冒頭は Function process_new(m0 As Integer, m As Integer, d As Variant, ans As Double) As Integer Dim a(501), b(501), s(501), r(501) As Double Dim w(501), g(11), xx As Double Dim s1 As Double Dim k(501) As Integer Dim i, j, flg As Integer でスタートしています。 =(以下、質問内容)==== s1 = s(k(0)) * 1.618 flg = 0 For i = m0 To m - 3 If Not i = k(0) Then If s1 > s(i) Then flg = flg + 1 End If End If Next i =(以上)====

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

掲示されたマクロの前段で,s(0)からs(501)まで502個の要素に,何らかの数字が格納されていますね。 また,k(0)からk(501)まで502個の配列も用意されていますが,ご質問のマクロではk(0)しか使っていません。奇異な印象です。 ともあれその,謎の「k(0)」を基準として >s1 = s(k(0)) * 1.618 >flg = 0 「k(0)に格納された数字番目」のs(k(0))の値の1.618倍を,まずs1に格納します  カウンタ(flg)をゼロに初期化します >For i = m0 To m - 3 >If Not i = k(0) Then >If s1 > s(i) Then  m0とmは,この関数に引数として渡されている数字ですが,m0からm-3までの数列を1ずつ調べます  k(0)と等しくないiについて  s(i)が最初にセットしたs1(=s(k(0))*1.618)よりも小さいときに >flg = flg + 1 >End If >End If >Next i  flgを1増やします。 以上からs(0)~s(501)と,k(0)の具体的な内容を理解した上で,マクロ全体を紐解き直して下さい。

すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7991/21370)
回答No.2

え? 日本語で書けって話じゃない? 「i = k(0)」でなく、かつ「s1 > s(i)」でなければ、「flg」に1を 加算する。これを「i が m0~m-3の間繰り返す」 こういう話じゃないかと。 なんか、特定条件のレコードを数えるって処理っぽいですね。

すると、全ての回答が全文表示されます。
  • aokii
  • ベストアンサー率23% (5210/22063)
回答No.1

s1 = s(k(0)) * 1.618 flg = 0  For i = m0 To m - 3   If Not i = k(0) Then    If s1 > s(i) Then     flg = flg + 1    End If   End If  Next i

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

専門家に質問してみよう