みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

=(以上)====

投稿日時 - 2012-09-11 16:02:43

QNo.7692340

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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)の具体的な内容を理解した上で,マクロ全体を紐解き直して下さい。

投稿日時 - 2012-09-11 17:27:58

ANo.2

え? 日本語で書けって話じゃない?

「i = k(0)」でなく、かつ「s1 > s(i)」でなければ、「flg」に1を
加算する。これを「i が m0~m-3の間繰り返す」

こういう話じゃないかと。

なんか、特定条件のレコードを数えるって処理っぽいですね。

投稿日時 - 2012-09-11 16:37:35

ANo.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

投稿日時 - 2012-09-11 16:29:49

あなたにオススメの質問