FC2ブログ

Excel VBA をやってみた その15 


もう広告表示になったのね
記事として遅れていた分を緊急に・・・という事で


副題:重複しないグループ分けについて

重複しないグループ分けについて に回答したもの+α のものになります。
内容的には、
12人、15人の人で、1グループ3人の組合せを作る。
この時、1回以上違う人と組む。
15人の場合、1番の人なら、2番~15番の人と1回以上組む
というもの。

回答した、Samp1 / Samp2 / Samp3 は、重複しない組み合わせを求めて
Samp2 はソコソコに、Samp3 は一応全部組んでみよう・・・というもの
基本的な考え方は、以下の図の様な感じ

kEnt212.jpg

で、15人の場合を求めた結果は、左:Samp1、中:Samp2、右:Samp3
Samp1 / Samp2 は、人同士の組み合わせを Dictionary で管理
Samp3 は、人数 x 人数 の配列で管理

kEnt212_1.jpg  kEnt212_2.jpg  kEnt212_3.jpg

Samp1 / Samp2 / Samp3 では、重複しないものを1度求める事をしていたため、
人数が多くなればなるほど遅くなっていくので、
どうせ重複しないと全部求められないので、人数 x 人数の配列を綺麗に埋めていけば・・・
埋める際、何個使った・・・は、配列で管理して・・・埋め方を考えれば良いんでしょう・・・
※ この埋める時のやり方は、現状力任せになっています

Samp4 は単に、求めたパターンを管理する方法を変えてみただけの確認用
確認用の処理は、重複しない組み合わせが基本ですが、前に戻って求め直す事はしない。

kEnt212_4.jpg

Samp5 は、1グループ3人に限定して、処理パターンを4つ
人数 x 人数 の配列は、右上半分だけ使用・・・というのは
1グループに、1-2-3 番を作ったとした場合、配列(1,2)、配列(1,3)、配列(2,3) 部分を更新
この配列を更新して、使っていない部分がなくなるまで処理を続ける・・・・

処理1:配列(1,2) ~ (1,人数)、(2,3) ~ (2,人数) と探す
  使っていないものがあったら、その位置を確定して
  例えば、(x,y) が使っていなければ、残りの1つ z を
  z < x なら (z,x)、z < y なら (z,y)
  z > x なら (x,z)、z > y なら (y,z)
  この値を加算して1番小さかった z を残りの1つとして確定
処理2:探す順は処理1と同じだが、
  配列(1,2) ~ (1,人数) で使っていなものを探して、使っていないもの同士も使っていないものを優先
  例えば、(1,5)、(1,7)、(1,9)、(1,10)、(1,12) が使っていなかった場合
  (5,7)(5,9)(5,10)(5,12)(7,9)(7,10)(7,12)(9,10)(9,12)(10,12) の順で使っていないものを探す
処理3:配列(1,人数) ~ (人数-1,人数)、(1,人数-1) ~ (人数-2,人数-1) と探す
  残りの1つ z は同じようにして
処理4:処理2の処理3バージョン

パターンを求めていく中で、使える数字内で使っていないものが無かったら・・・
例えば、1 が使える場合
(1,2) ~ (1,人数) まで使える数字部分を眺めて、1番小さかったものを使う
1 以外に 6、9 が使えた場合、(1,6)、(1,9) の値の小さい 6 or 9 を選んでいく・・・

※ 残っていくもの同士の組合せについては、グループとして重複しない様にしているだけなので、
もっと数学的な選び方があると思いますが・・・力任せで・・・

以下は各処理で、左:15人、90人(中:31パターン目、右:結果)
「中:」の画像では、確定したパターンは赤もどきの色、確定候補が水色

処理1
kEnt212_5_1.jpg  kEnt212_5_1A.jpg  kEnt212_5_1B.jpg

処理2
kEnt212_5_2.jpg  kEnt212_5_2A.jpg  kEnt212_5_2B.jpg

処理3
kEnt212_5_3.jpg  kEnt212_5_3A.jpg  kEnt212_5_3B.jpg

処理4
kEnt212_5_40.jpg  kEnt212_5_4A.jpg  kEnt212_5_4B.jpg
続きを読んでみようかな ---≫
スポンサーサイト

2015/04/11

Category: やってみる

TB: --  /  CM: 0

top △

Excel VBA をやってみた その12 


moug の Excel(VBA) での問題をやってみた。
( moug の QA は6ヶ月で消えるので、アドレスは省略)

内容はというと

 ABCDEF
1111100
2111000
3111000
4000000
5000011
6100111

という 6x6 の表(データ)があった時、内容が all 0 の 2x2 の範囲でセル結合。
ただし、結合したものの個数が最大のもの(配置)を求める
つまり、以下の様な解を求める

 ABCDEF
111110
21110
311100
400
511
6100111

考え方として 2x2 の左上で、all 0 なのか・・・という情報を持っておいて、ベタで全パターンをチェック・・・

 12345
100001
200011
300011
411100
501000

1 になっている9ヶ所に関して、使う/使わない・・・チェックするので、再帰を使おうか・・・
再帰については、過去記事にもいろいろありますね「Excel VBA をやってみた その11」とか
処理数的には単純計算で、2の9乗=512回?の試行になりますが、実際には少なくさせます。

 12345
100001
200011
300011
411100
501000
 12345
100001
200000
300000
411100
501000

例えば、(2,4) を使うとした場合、その領域にかかるものを 0 にして、次の(再帰)処理・・・
2x2 での (2,4) を使うから、(2,5) と (3,3)~(3,5) を 0 に・・・
これで、何回かは削減できますね・・・
提示した Samp1 では、上記パターンで再帰関数が呼ばれたのは87回
2x2 を変更して、3x2 とかできるようにしておきましたが、回転はできない・・・
回転できるようにしたのが Samp2 ・・・

Samp2 をコピーして、個数指定をシートから取り込むようにしたのが Samp3
再帰処理を使わないで・・・ Samp4

kEnt204.jpg  kEnt204_1.jpg

再帰処理を使わない Samp4 の方が速いですね・・・って、記述が悪いのかも・・・
回転できるようにした Samp2 以降は、上記方法ではないんですけど・・・
続きを読んでみようかな ---≫

2014/09/27

Category: やってみる

TB: --  /  CM: 0

top △

奥が深い 


連結にしたフォーム/フォームを連結にするために、レコードソースを設定しますね。
今まで、レコードソースに指定したものが使われるのは、
・フォームを起動
・Requery ( FilterOn / OrderByOn 含む)
した時だけ・・・と思い込んでいました。

hatena さんの新記事「帳票フォームでガントチャート(マウスドラッグで範囲指定)」は衝撃でしたね・・・
カレントの内容が変更される度に、レコードソースが解釈/動くんですね・・・???
こういった動きを使って・・・・ (知らなかったので何もしてませんでしたが・・・・)
色々と応用できそう・・・・

応用するにしても、動きを調べておこうかという事で・・・・

kEnt202.jpg

のフォームで確認してみる事に・・・
2つのフォームをサブフォームとして組み込んだものになります。
動きとしては、テーブル「T1」に「IX」「IY」の数値があって、基本これをレコードソースに・・・

上側のフォームでは、
フォーム上で [IX]*[IY] したものをコントロールソースとして持つテキストボックスの配置
フッタには、=Sum([IX]*[IY]) を設定

下側のフォームでは、
レコードソース内で、IX * IY AS IXY したフィールドを作っておいて、
テキストボックスのコントロールソースで、そのまま IXY を参照しただけのもの
フッタには、=Sum([IXY]) を設定

動きとしては、
・編集し始めると、[IX]*[IY] でも [IXY] でもすぐに表示に反映
・ただし、フッタ部分の合計の数値は編集を確定するまで、どちらも変化なし
 変化させたい場合は、hatena さんの「フォームでの集計をレコード保存する前に反映させる」が必要そう・・・

追加でわかったのは、
・編集状態になっても、Me.Recordset 自体には変化なし
 Me.Recordset.EditMode は変わらなかったので、どこかに情報を持っていて・・・
 確定時に Recordset をいじっているのかも・・・・

疑問が残ったけど・・・・
 カレントに限り(?)、レコードソースの内容が解釈されるのって・・・ どこまで???
 FROM の前までなのかな???
 WHERE にイッパイ記述していたら・・・ その部分も再解釈???

わからないけど・・・ 今のところ、FROM の前まで・・・ と、しておこうかな???
FROM の前には、必要以上に関数(D系/ユーザ定義)を使わない方が良い???

う~~ん・・・ レコードソースは解釈するけど・・・ EditMode は変わらない・・・
ふ~~ん・・・ まだ納得できる動きじゃないけど… そう動くんですもんね・・・・
続きを読んでみようかな ---≫

2014/08/31

Category: やってみる

TB: --  /  CM: 0

top △

Excel VBA をやってみた その11 


副題:hatena さんに挑戦・・・っていうか、もう一度やってみた・・・

Excel VBA をやってみた その3(合計値検索)」とか
再帰処理にはまる(その4 乾杯!!)」のリベンジ(?)になるか・・・返り討ちの雰囲気ですが・・・

hatena さんの記事「VBAで組み合わせ合計探索」を、自分なりにやってみたものになります。
詳細の仕様/サンプルファイルの入手は hatena さんの記事を参考にしてください。

私の考え方のベースは、再帰処理・・・があるんですが・・・・・ これじゃ遅いんですよね
でも、記述量は少なくて済むんですけどね・・・

回答していて、再帰を使わない処理を見かける事もあります。
最近勉強になったのは、「エクセルVBAにて4つの文字の全ての組み合わせを抽出したいです。」ですね・・・

ということで、再帰処理を使わない方法も考えてみたものの・・・・
結構速くなったんですけどね・・・

私のサンプルファイルは、「Excel VBA をやってみた その3(合計値検索)」のシートの中で

kEnt201.jpg

を、再帰なしでやってみたものになります。
数値が並んでいる C / F 列の右側( D / G 列)に、得たい合計値を入力すると、
数値の2行目から入力した左までのものを使って、組合せを求めます。
求めたものは組合せが無くても、新規シートに出力されます。

kEnt201_1.jpg  kEnt201_2.jpg

kEnt201_3.jpg  kEnt201_4.jpg

A1 には、求めたい値が・・・・、表示は行と列を入れ替えて・・・・
求める組合せ数に制限を付けていないので、組合せが多くなればそれなりに遅くなります。

【追記】2017/1/7
重複組み合わせ」の中でも同じことができたり・・・
続きを読んでみようかな ---≫

2014/08/26

Category: やってみる

TB: --  /  CM: 0

top △

検索急上昇 


本題に入る前に・・・
ブログ TOP の右上「全記事一覧」【緑色】・・・は気付かれてました?
サンプルファイルを置いているところで一覧表示しているものです。
記事本文はブログにしかないので、結局ここに戻ってくるのですが・・・
「インデックス(昇順)」「カテゴリ別」にわけてます。
(記事のタイトルから内容がわかり辛いのですが)

では本題に・・・ 副題:タグ解析?

最近、検索キーワード急上昇ランキング・・・とか、結構耳にします。
キーワードではないけど、
・ブログ内のどの記事が
・どんな感じで見られてる

FC2 でのアクセスランキングでは、
・リンク元
・人気ページ
・移動先
の3つを見る事が出来ます。以下の様な画面です。

kEnt197_1.jpg  kEnt197_2.jpg

ソース表示してみると、こんな感じです。

kEnt197_3.jpg

IE と連携すると情報は得られるようです。
(私が利用しているのは、IE9)

以下を Excel に記述して実行すると、ID 等区別して表示させる事が出来ます。
Public Sub ItemsShow()
  Dim o1 As Object, o2 As Object, o3 As Object
  Dim iRow As Long

  iRow = 1
  Cells.ClearContents
  Application.ScreenUpdating = False
  Set o1 = CreateObject("Shell.Application")
  Set o2 = o1.Windows(o1.Windows.Count - 1)
  For Each o3 In o2.Document.All
    With o3
      Cells(iRow, "A") = .ID
      Cells(iRow, "B") = .className
      Cells(iRow, "C") = .nodeName
      Cells(iRow, "D") = Left(.outerHTML, 60)
      Cells(iRow, "E") = Left(.innerText, 50)
    End With
    iRow = iRow + 1
  Next
  Open ActiveWorkbook.Path & "\a.txt" For Output As #1
  Print #1, o2.Document.body.outerHTML
  Close #1
  With ActiveSheet.UsedRange
    .HorizontalAlignment = xlLeft
    .EntireColumn.AutoFit
    .EntireRow.AutoFit
  End With
  Application.ScreenUpdating = True

  Set o2 = Nothing
  Set o1 = Nothing
End Sub

kEnt197_E1.jpg

※ IE を直接起動せずに、Shell.Application から IE を求めているので、
最後に表示したもの・・・・になるのですが、IE 操作後に
・エクスプローラを起動した・・・・ とかならエラーになります。
※ 最後に表示したものをシートに展開し、Body 部分をファイル「a.txt」に書き出します。
※ 最後に表示したものになるので、特定のURL・・・にはならないです。

さて、FC2 でのアクセスランキングへ辿り着くには・・・・
ログインして、チョンチョン・・・
パスワードは、VBA に書きたくないし、辿りが変わったら・・・
等々あって、上記のものをベースに・・・・
また、必要な部分 <TABLE ・・・</TABLE> 間だけソース表示から入手して・・・
これは、全部が全部 html 形式になっていなくても、それらしいものであれば部分的解釈を・・・

フォームを表示して、
kEnt197_F1.jpg

自動取得、もしくは部分的貼り付け・・・
kEnt197_F2.jpg

テーブルへ格納
kEnt197_T1.jpg

さて、取込はできたけど、これをどう料理していこうか・・・・
続きを読んでみようかな ---≫

2014/07/05

Category: やってみる

TB: --  /  CM: 0

top △

Excel VBA をやってみた その10 Vol.2 


この記事は、「Excel VBA をやってみた その10」の続編です。
1度そちらを参照されてから読まれたらと思います。

内容としては、多面体に色を割付ける時、重複するパターンを少なく割付けていくには・・・・

その記事で、サンプルファイルに入れていなかったVBA記述等、今回のサンプルファイルに盛り込んでいます。
また、もう少し Excel 側の記述を確かめています。
その中には、
今まで「A」「B」~「L」の順で確認していたものを、順をローテーションさせた出力もしています。

kENt195_1.jpg  kENt195_2.jpg

条件付き書式で、パターンを探してみると「重複」とは何ぞや・・・・ が疑問になるかも・・・・・・
重複を減らす・・・・ 各面の色数を増やす方向のアプローチもありなのかなぁ??

今回のサンプルファイルには、Excel ファイル以外に Access ファイルも入れています。
前の記事で Access でやってみたら・・・・ に、触れていましたが、今回、何パターンか追加試行しています。

Access での動きとしては、
・同梱 Excel ファイルを開いて情報を入手
・色の割付け処理は Access のテーブル/SQL を使って
・結果を Excel ファイルに書き出す(情報を入手した Excel ファイルの Sheet2 へ)
・処理後、Excel ファイルを表示(保存するかは、操作者任せに・・・)

記事後半には、Excel での、また、Access での処理時間を Timer() で測定した結果を記述しています。
続きを読んでみようかな ---≫

2014/05/05

Category: やってみる

TB: --  /  CM: 0

top △

Excel VBA をやってみた その10 


以下の様な質問があり回答したわけですが・・・・
解釈間違いが甚だしく、迷惑をかけてしまったような気も・・・・
解釈し直しで作ってみたけど、文字数制限に引っ掛かるみたいなので回答は自粛する事に・・・

多面体の各面に色を割付けたい

6面体の場合は以前教えてもらってできていた。
そこで、12面体の場合にもできるようにしたい・・・・・
どこをどうすれば・・・・

以前の方法は、
全組合せをExcelに展開して、その横に乱数を設定
その乱数順に並べ替えをして1~400行目までを取得する

ただ、前回の難点は、6面のうち5面が同じものになる場合があるので、これも解消したい

さて、この文面を見て勘違いしたのは、「6面のうち5面が同じもの
同じ=同じ色 ・・・・・ こう解釈してしまったんですね
また、12面体の各面の組み合わせ全てをExcelに展開して・・・って無謀?
12面体の次(20面体)の計画はあるんだろうか??

この解釈で、
・多面体に割付けようとした色の数が xx 以上なら・・・・
・また、正多面体であれば、転がった場合、同じ配色になる場合があるよねって・・・
上記2つについて回答したわけですが・・・・

各面に割付ける色候補が面ごとに違っていても「6面のうち5面が同じもの」に該当する場合がありますね。

以下、早とちりの反省も込めて

回答した
・重複した色を割付けても良く、割付けた色数で使う使わない(12面体用)
・重複した色を割付けても良く、色数関係なく転がったパターンが異なれば・・・(6面体用)

未回答分
・12面体用の転がったパターンでのもの
・割付ける色が面ごとに異なった場合、配色のパターンが極力同じにならない様に
これを記述している時に、補足があって・・・ Dictionary キー管理を変更してみたもの(エラー対応)
考え方を変更したもの(チョッと時間はかかるけど、この中では一番まともなのかな)

おまけ(配色パターン確認用(6面体限定))

配色のパターンを求めるのは、全部を Excel に展開してからじゃなく、
各面ごとに乱数抽出したものを組み合わせる方法としてました。
(考え方を変更したものは、チョッと色気を・・・)


もっと良い方法があるかも・・・・

※※ Access でもチョピットやってみたけど・・・・追加情報として、最後に記述してます。

続きを読んでみようかな ---≫

2014/05/01

Category: やってみる

TB: --  /  CM: 0

top △

指定時間に強制終了させたい・・・かな 


サンプルファイルを作り終わると、記事を書いたつもりになって・・・・
結構、公開まで時間が過ぎます。
土曜から何日経ったかなぁ~~

という事は置いといて・・・・っと


ある決まった時間帯に、Access の利用を禁止したい・・・・
朝10時から11時の間とか・・・・

何故って、データをマージするとか・・・・
他からのデータを取り込むとか・・・・

スタンドアロンで使っている分には、何か問題でも・・・・ってなことになるんでしょうかね
データ(テーブル)部分を分離して複数で使っている等・・・ってな時には考えないと・・・・

確実に、データ側に接続しないで・・・・ってなことなら、以下の方法は使えませんけど・・・


その方法というのは、
・運用状況用のテーブルを1つ用意し
・フロント側では、周期的にそのテーブル情報を取得
・入手した情報を解釈して、メッセージを出す/Accessを終了する

情報をテーブルに持つ方法であれば、
内容を書き換えるだけなので、突発的な状態にも対応できるかな・・・・
通常は、朝10時から・・・だけど、今日に限って2時からだ・・・・とかね

用意したテーブルと、そのテーブルを更新するものとして

kEnt193.jpg

このテーブルの「情報」= 1 が、運用に関してですよ
「状態」= 0 では、通常の利用が出来ますよ
「状態」= 1 では、設定した「日時」前10分以内になったら、終了予告メッセージを出しますよ
 また、既に「日時」を過ぎていたら Access を強制終了しますよ
「状態」= 2 では、すぐに Access を強制終了しますよ

周期的な作業が終わったら、
「日時」を次の予定時刻に /「状態」= 1 とすれば、予約完了・・・ってな動きになります
予約は後で良いや・・・ ってなことなら、「状態」= 0 とすれば利用できるようになります

今回、監視用に用意したものは、
・上記テーブルを 30 秒周期で確認 (フォーム:F監視)
・メッセージを出す必要があったら、情報を 10 秒間表示 (フォーム:F_MSG)
 メッセージの表示部分は、注意をひきつけるために 0.5 秒周期でフォームの背景色を変更・・・

kEnt193_1.jpg  kEnt193_2.jpg

Access を強制終了する際も、メッセージを出して・・・・

kEnt193_3.jpg

今回、AUTOEXEC を利用していませんが、監視用フォームを起動する様にしておくと、
Access を起動した際、まだ作業中であれば、メッセージが出て終了する様になります。
続きを読んでみようかな ---≫

2014/04/29

Category: やってみる

TB: --  /  CM: 0

top △

Excel VBA をやってみた その9 


そろそろ広告表示されるタイミングかと・・・
急遽、見かけた質問をチョッとやってみた


100マス計算のシートを作ってみる。
その時、1桁部分を2桁にしたい・・・・
ただ・・・ "X" の場合は、2桁x1桁にしたい・・・・

10×10 のセルを使って(正確には 11 x 11 )、"+","-","X" での計算を埋め込めるように
そして、
・計算元の値の桁を指定できるように
・正解も付加する/しないを指定できるように
・また、正解を付加した場合、間違った結果を入力したら「文字色」を赤に(条件付き書式にて)

"+", "X" では違和感はないのですが、"-" の場合は「上」の値 -「左」の値 なんですね・・・
「左」-「上」の方が私はしっくりきますね・・・
でもまぁ、そういうものらしいので・・・・

Private Sub MakeMasu(sPos As String, sPtn As String _
    , Optional iXcnt As Long = 10, Optional iXketa As Long = 2 _
    , Optional iYcnt As Long = 10, Optional iYketa As Long = 2 _
    , Optional bAns As Boolean = True _
    , Optional bSgn As Boolean = False)
という関数を作って

「B2」の所に、"+" の 10×10マスを作成し、その右側に正解の表を付加する場合
  Call MakeMasu("B2", "+")
の様に呼び出すだけです。

明示指定していない部分は、
iXcnt : 列側マス数 (=10)
iXketa : 列側数値の桁数 (=2)
iYcnt : 行側マス数 (=10)
iYketa : 行側数値の桁数 (=2)
bAns : 正解表を付加するか (=はい)
bSgn : 数値に負値を含めるか (=いいえ)

※ ()内は省略した時の解釈値

また、例えば
  Call MakeMasu("B2", "+", 11, 3, 15, 2, True, True)
と呼び出すと

列側マス数 : 11
列側数値の桁数 : 3
行側マス数 : 15
行側数値の桁数 : 2
正解表を付加するか : はい
数値に負値を含めるか : はい

で作成します。
そこで、
Const CTASU As String = "+"
Const CHIKU As String = "-"
Const CKAKE As String = "X"

Public Sub Sample1()
  Application.ScreenUpdating = False
  ActiveSheet.UsedRange.EntireRow.Delete
  Call MakeMasu("B2", CTASU)
  Call MakeMasu("B14", CHIKU)
  Call MakeMasu("B26", CKAKE, iXketa:=1, iYketa:=1)
  Call MakeMasu("B38", CKAKE, iXketa:=1)
  Call MakeMasu("B50", CKAKE, iYketa:=1, bAns:=False)
  Call MakeMasu("B62", CTASU, iXketa:=3, bSgn:=True)
  Application.ScreenUpdating = True
End Sub
としたとすると以下の様になります。(縦にスクロール)

kEnt187_1A  kEnt187_1B

Public Sub Sample2()
  Application.ScreenUpdating = False
  ActiveSheet.UsedRange.EntireRow.Delete
  Call MakeMasu("B4", CTASU, 11, 3, 15, 2, True, True)
  Application.ScreenUpdating = True
End Sub
としたとすると以下の様になります。(横にスクロール)

kEnt187_2A  kEnt187_2B

で、正解表を作成しているので、間違った入力部分は「赤」表示されます。

kEnt187_2C

※ "-" の場合、結果が 正 だけにはなりません。( 63 - 96 があったりします)
 それ用のものが必要なら、上限値 / 下限値を指定する様に変更していけば良いと思います。
続きを読んでみようかな ---≫

2013/12/10

Category: やってみる

TB: --  /  CM: 0

top △

Excel VBA をやってみた その8 


副題「足して100になるような乱数のアルゴリズム」

質問の内容はこんな感じでした・・・

Excel で、合計値が100となるように、30行使って、0~4の値を割振りたい
http://oshiete1.watch.impress.co.jp/qa4035587.html
に同じようなものがあったけど、VBA じゃないのでわからない

その参照先の方法は、チョッと使えないんじゃないかな・・・ ってんで回答したわけですが・・・
(回答したそのものは後述)

参照先のものを解釈した内容を以下図にまとめてみました。

kEnt185A.jpg

合計値は100、30行、0~4を乱数で・・・
まず気になるのは、30行全部をなめて、都度 0~4 を設定していったとして
・合計値が100に届かなかったら・・・
・途中で合計値が100を超えてしまったら、残りは0・・・
・30行全部に設定してみて、合計が100でなかったら1からやり直し・・・・
 何回やりなおせばいいんだろう・・・ こっちの方が心配・・・

ということで、初めに考えついたのは
・30行全部をなめるんじゃなく、設定する行を乱数で求めて・・・ (設定の偏りをなくしたいかな)
・乱数で 1~4 を求めて・・・(設定行を選んだ=値を設定する・・・なら、0は除外しても)
・設定した値を合計値から引いておいて、その合計値が 0 になったら終わり・・・
これだと、選択しなかった行は 0 のまま・・・

値を設定する際に同じ行が選ばれる事もあるので、以前に設定した値と新値を加算
加算した結果 ≧ 4 なら 4 に・・・ (この方法が良いのかは??)
設定する値は 1~4 範囲を乱数で求めますが、加算すると最大値(4)になりやすいのかなぁ・・・

という事で、違う方法も・・・
設定する行を乱数で求めるのは同じですが、都度 1を加算していくもの
・既に最大値(4)なら何もしない
1加算したら、合計値から1減算して 0 になったら終わり・・・

合計値は100、30行、0~4を乱数で・・・程度なら、この方法もありですかね
行を求める・・・ 1~30 の乱数を 100回・・・・
偏った乱数でなければ、1~30の出現頻度は平均化されるんじゃなかろうか・・・
ある行が突出する・・・・ 結構あるのかな??
最大値(4)へは、すぐに到達するからいいのかな・・・
もし、最大値(25)とかなら、25になる行はあるのだろうか・・・

上記の方法以外にも何個かやってみた。

※ 結果を先に言っておくと、乱数でどうのこうの・・・・
 その乱数をどう扱うかによって、求めたいものが違ってくる・・・
 どの様な傾向をもつものにする・・・等々、考え方・処理の記述次第
乱数で求めているので平等?です・・・・ って、安易に言えるものだろうか・・・

今回のサンプルファイルは Excel になります。

用意したシートは「回答確認用」「NumSum確認用」「NumSum2確認用」の3つです

kEnt185_1.jpg  kEnt185_2.jpg  kEnt185_3.jpg

結果確認は、各シートの「大仏さんの絵」をクリックする事で、
求めた結果一覧が左側に表示されます。

シート「NumSum確認用」「NumSum2確認用」では、上記に加え
・合計値、行数、最大値を自由に設定でき
・求めた結果一覧の下に、検証用の SUM 埋め込み
また、出現数の確認用に
・0~最大値までの数字一覧と
・その右には COUNTIF を埋め込んで、結果一覧での各個数を・・・
・その表が正しいのか下側に SUMPRODUCT を埋め込んで、合計値を求め直しています
続きを読んでみようかな ---≫

2013/11/10

Category: やってみる

TB: --  /  CM: 0

top △