Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


45801 / 76732 ←次へ | 前へ→

【35916】Re:任意に数字を入れて結果を求めるVB...
発言  ichinose  - 06/3/15(水) 22:17 -

引用なし
パスワード
   うさちゃん さん,ちくたくさん、こんばんは。
つまり、総当たりリストが作成できればよいと言うことですね?

>ちょっと図にしてみました。
>
>下のように、A1、B1、C1のセルに、
>例えば、1〜20まで順次入力していって、
>E1、F1のセルに答えが返るとします。
>これを手作業でやっていくと、
>A1、B1、C1を変えるだけで8000回かかります。
>この入力をVBAに任せて、出てきた答えを例えばHとIの列に、
>上から列記されたように表示させたいのです。
>実際にマクロを実行したら、HとIの列に8000行のデータが現れて、
>終了するようになると思います。
>
>
>A1 B1 C1 → E1 F1
> 1 1 1 → 2 3
> 1 1 2 → 5 7
> 1 1 3 → 8 7
> . . .   . .
> . . .   . .
> . . .   . .
>20 20 18 → 5 0
>20 20 19 → 9 1
>20 20 20 → 6 4

この例を引用すると

標準モジュールに

'=====================================================
Sub main()
  Dim idx As Long
  Dim ans(1 To 3)
'  ↑総当たりメンバーを取得する配列
  Dim ss As Variant
  ss = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
  Call init_totalhit(ss, 3)
  idx = 1
  Do While get_totalhit(ans()) = 0
    Range("a1:c1").Value = ans()
    Range(Cells(idx, "h"), Cells(idx, "i")).Value = Range("e1:f1").Value
    idx = idx + 1
    Loop
   
  Call term_totalhit

End Sub


別の標準モジュールに
'=============================================================
  Private c_myarray()
  Private c_idx() As Long

'===================================================================
Function init_totalhit(標本 As Variant, 抜取り数 As Long) As Double
'総当たりデータをセットする
'input : 標本 総当たりリストを作成する標本配列
'   : 抜取り数
'Output: init_totalhit 総あたり数
  Dim g0 As Long
  Erase c_myarray
  Erase c_idx
  ReDim c_myarray(1 To UBound(標本) - LBound(標本) + 1)
  For g0 = LBound(標本) To UBound(標本)
   c_myarray(IIf(LBound(標本) = 0, g0 + 1, g0)) = 標本(g0)
   Next g0
  init_totalhit = (UBound(標本) - LBound(標本) + 1) ^ 抜取り数
  ReDim c_idx(1 To 抜取り数)
  For idx = LBound(c_idx()) To UBound(c_idx())
    c_idx(idx) = 1
    Next
  c_idx(UBound(c_idx())) = 0
  
End Function
'======================================================================
Sub term_totalhit()
'総当たり処理の終了処理
  Erase c_myarray()
  Erase c_idx()
End Sub
'======================================================================
Function get_totalhit(ans()) As Long
'総当たりメンバーを配列に出力する
'output: ans() メンバの配列 添え字は必ず1から始まる配列を用意する
'    get_totalhit:0 -- 正常に配列取得
'            1 -- メンバの終わり
  get_totalhit = 1
  For i = UBound(c_idx()) To LBound(c_idx()) Step -1
    If c_idx(i) + 1 <= UBound(c_myarray(), 1) Then
     c_idx(i) = c_idx(i) + 1
     get_totalhit = 0
     Exit For
    Else
     c_idx(i) = 1
     End If
    Next
  If get_totalhit = 0 Then
    For i = LBound(c_idx()) To UBound(c_idx())
     ans(i) = c_myarray(c_idx(i))
     Next
    End If
End Function

として、当該シートをアクティブにして
実行してみて下さい。

総当たりのリストによるセルE1、F1の結果が
H列、i列に順次移行されます。

総当たりリストは、例ではA1,B1,C1の抜取り3つですが、
4つになっても簡単に移行出来るようにしておきました。
試してみて下さい
2 hits

【35881】任意に数字を入れて結果を求めるVBAを教えてください うさちゃん 06/3/15(水) 12:11 質問
【35884】Re:任意に数字を入れて結果を求めるVBA... ちくたく 06/3/15(水) 13:58 回答
【35888】Re:任意に数字を入れて結果を求めるVB... うさちゃん 06/3/15(水) 14:57 質問
【35893】Re:任意に数字を入れて結果を求めるVB... ちくたく 06/3/15(水) 16:02 回答
【35895】Re:任意に数字を入れて結果を求めるVB... うさちゃん 06/3/15(水) 16:37 質問
【35907】Re:任意に数字を入れて結果を求めるVB... ちくたく 06/3/15(水) 18:35 発言
【35914】Re:任意に数字を入れて結果を求めるVB... うさちゃん 06/3/15(水) 21:35 質問
【35915】Re:任意に数字を入れて結果を求めるVB... やっちん 06/3/15(水) 22:15 発言
【35921】Re:任意に数字を入れて結果を求めるVB... やっちん 06/3/16(木) 0:39 発言
【35916】Re:任意に数字を入れて結果を求めるVB... ichinose 06/3/15(水) 22:17 発言
【35920】皆さん、どうもありがとうございました。 うさちゃん 06/3/16(木) 0:27 お礼
【35928】パラメータがバラバラの場合を教えてくだ... うさちゃん 06/3/16(木) 9:20 質問
【35964】Re:パラメータがバラバラの場合を教えてく... ichinose 06/3/16(木) 22:05 発言
【35979】Re:パラメータがバラバラの場合を教えてく... ちくたく 06/3/16(木) 23:48 発言
【35983】Re:パラメータがバラバラの場合を教えて... うさちゃん 06/3/17(金) 1:52 お礼
【35982】Re:パラメータがバラバラの場合を教えて... うさちゃん 06/3/17(金) 1:49 お礼

45801 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free