Excel(VBAかマクロ)について詳しいかたお願いします

このQ&Aのポイント
  • Excel(VBAかマクロ)について詳しいかたお願いします。生物の進化のシミュレーションの課題について教えてください。
  • 学校の授業で生物の進化のシミュレーションの課題が出されましたが、全く分かりません。ExcelのVBAかマクロに詳しい方、助けてください。
  • Excel(VBAかマクロ)について詳しい方に質問です。生物の進化のシミュレーションの課題について教えていただけますか?
回答を見る
  • ベストアンサー

Excel(VBAかマクロ)について詳しいかたお願いします

このカテゴリーであっているか分かりませんが質問の回答お願いします。 学校の授業でこういった課題が出されたのですが、全く分かりません…。 「生物の進化のシミュレーション 」 ☆ルール☆ ・各セルは、生と死の2つの状態を取る。 ・次の世代のセルの状態は隣接する8つのセルによって次のルールで決まる。 ・生きているセルの隣接するセルのうち生きているセルが2つか3つあれば次の世代も生き続ける。 ・生きているセルの隣接するセルが上の状態以外の時は、次の世代は死ぬ。 ・死んでるセルの隣接するセルのうち生きているセルが3つあれば次の世代に生命が誕生する。 ・死んでるセルの隣接するセルが上の状態以外の時は、次の世代は何も変わらない。 ・50×50のセルでシミュレーションを行う。 ・端のセルは、反対側につながっているとする。 ・生きているセルは黒色に塗りつぶして表示する。 ・初期状態は、乱数を使って与える。 ☆問題☆ ・10世代までの計算を行うボタンを作りなさい。 ・計算したい世代数をセルに入力して、その世代数まで計算するボタンを作りなさい。 ☆ヒント☆ (1)セルに初期状態を書き込む。 (2)各セルの隣接セルの状態を計算する。(端のセルの処理) (3)次の世代のセルの状態を計算する。 (4)次の世代のセルの状態を表示する。 ヒントの(1)までは出来たのですが、それ以降が出来ません。 分からない事があれば答えますので、Excelに詳しい方お願いします…。

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

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

これは「ライフゲーム」と呼ばれる、セル・オートマトンの代表例です。 http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0 を見ると色々と面白いパターンが紹介されてます。幾つか、パターンが動いてるサンプルもあります。 とても歴史が古い(考案は1970年)ので、ネット上を「ライフゲーム」で検索すると、色々な言語で書かれたプログラムサンプルが見付かります。 本来、こういう「課題を丸投げした質問」は「禁止事項」なので削除対象になり回答しないんですけど「ライフゲーム」が余りにも懐かし過ぎて、つい回答を(笑)

M-k-FiNe
質問者

お礼

ちゃんと禁止事項を読んでなく、質問してしまいました…。 でも、ありがとうございます! これをヒントに頑張ってみます☆

関連するQ&A

  • エクセルを使ってのシミュレーション

    連立方程式をエクセルで解き,シミュレーションをしたいと思ってます.最初の状態としては制約条件をすべてゼロに等しくなるようにしています(そのため,制約条件を書き込んだセルは0になります).その状態から,パラメータを変化させて,解きたいのですが,パラメータの数値を初期値と変えてしまうと制約条件のセルが0にどうしてもならないことになってしまいます.どのようにシミュレーションをしたら宜しいでしょうか?

  • エクセルVBA ヒントを下さい

    バージョンはエクセル2000です。 セルの値を判定し条件分岐する、というありふれた処理です。 A1を判定⇒A2を判定・・・のようにオフセットなり変数を使うなりで 次のセルをアクティブにしていっているのですが、 当然セルの数だけ処理時間は増えていきます。 アクティブセル範囲がA1:Z1000みたいなかんじであったとして、 これをRangeオブジェクトとして定義し一気にその中身を処理する (セルの値が1ならば0にする、のような)ことは出来るのでしょうか。 配列を使えばいいのかとも一瞬思ったのですが、それでも一つ一つ処理することに変わりはなさそうだし・・。 何かヒントをいただければと思います。

  • EXCEL VBA 複数セルの移動 

    かなり困っています。 どなたかヒントだけでもご教示お願いいたいます。 A列に大項目 B列に中項目 というリストがあります。 A.1に大項目があると、次の大項目が10行ぐらい下に入ります。(決まっていはいません。) 次の大項目がA.10とすると、中項目はB.1からB.8と、次の大項目が始まる一つ上のセルが、 最終行の中項目のセルとなります。 目的は大項目と同じ行に中項目があるので、これを1行下にずらしたいと思います。 中項目は次の大項目まで連続しているわけではなく、歯抜けのものが結構あります。 これが50万行もありマクロを使用しないと、何週間たっても終わりそうにありません。 どなたか、何卒ヒントだけでもお願いいたします。

  • エクセルVBAのヒントをください

    エクセルのある列に、文字列が入っているとします。 たとえば、Aであったり、Cであったり、A,C,Fとカンマ区切りで複数の文字列(個数は不定) が入っていたりします。 このとき、一行に一つの文字列しか含まないように、カンマで区切られた文字列を展開し、 複数行に分けて格納したいと思っています。 たとえば、一番上の行のセルにA、二番目の行に「C,D,A」、三番目の行にB、四番目の行に 「E,A」と入っていたら、各行に一文字列のみ入るように、上からA、C、D、A、B、E、Aという行を 作りたいと思います。各セルに含まれる文字列の個数は不定で、規則性はありません。 基本的に、 (1)各セルに含まれているカンマの数を調べる (2)カンマの数だけ次の処理を繰り返す  ・行挿入   ・最初のカンマの位置を調べる   ・先頭からカンマまでを切り取る   ・上記の値をセルに入力  ・行挿入   ・2番目のカンマの位置を調べる   ・1番目のカンマの位置+1から2番目のカンマの位置まで切り取る   ・上記の値をセルに入力 上記をカンマの数だけ繰り返す。 といった具合にしていくのだと思いますが、このような処理をするのに はどの程度のVBAのスキルが必要ですか? 上記のヒントや、参考になるサイト、書籍があればご教授ください。

  • エクセル マクロ

    ・まずルールとして決められた時間 今回は『 8:00 』~『 17:00 』以外の時間外の『 同一日付 』の日付の計算をするエクセルの マクロを組もうと考えています。少し複雑な内容になりますので私では組めなく困っております。 どうかお力添えをお願い致します。 考えている 作業としては 具体例を挙げますが (1) 『 同一日付 』の『 8:00 』~『 17:00 』以外の時間外のまとめをしたい (2) 下の例、 縦に並ぶ『 D 』セル内の 2012/07/10、7/12..と続く『 同一日付 』の時間外の時間を比較して (3) 『 同一日付 』の『 E 』と『 F 』の数字の最初の数字(時間)と最後の数字(時間)を取得し (4) 『 それ以外の時間 』には数字の上にーを引き《 エクセルの[ CTRL ]+数字の[ 5 ] 》で 引ける取り消し線 ーを引き (5) 『 D 』セル内の 2012/07/10 の『 同一日付 』が終わる『 下のセル 』 例( ● )黒丸の場所にセルを挿入し一旦『 空白を空け 』 その一旦『 空白を空け 』た『 A 』のセルに『 最初と最後の時間 』と書き込み その行の『 E 』と『 F 』に『 同一日付 』の数字の最初の数字(時間)と最後の数字(時間)を 自動で書き込むマクロを作りたいのです (6) ・『 D 』セル内の比較する『 同一日付 』は『 縦に並んでおり 』、1つの時もあれば多くて20個 ・基本的に20日~翌月20日まで(土日祝が20日に当たれば18日~20日など前後しますが) ・(3)のデータを取得し(5)で『 同一日付 』の数字の最初の数字(時間)と最後の数字(時間) を書き込むので(5)で書き込む以外の 『 同一日付 』内の時間外の時間にはすべて取り消し線を引きます ・数字の上にーを引き《 エクセルのCTRL+数字の5 》で 引ける取り消し線を引き..が説明のテキストでは表現出来ませんでしたが..必要な作業です 例で 『 時間の下に× 』を書いて見ましたが、これが取り消し線を実行した感じの時です 上手く伝えられているか分かりませんが、どうぞよろしくお願致します    A  | B | C  |     D  | E  |  F ____________|_______|_______|________________|__________________      |   |   | 2012/07/10| 17:24 | 17:37 _________________________________________________________________      |   |   | 2012/07/10| 17:15 | 17:50 __________________________________________________________________            |   |   | 2012/07/10| 17:15 | 17:22 __________________________________________________________________      |   |    |     |    |     | ●(セル挿入) → 『 最初と最後の時間 』と書き込み ___________|_______|_______|__________|_________|___________________      |   |   | 2012/07/12| 17:28 | 17:33 ___________|_______|______|___________|_________|___×___|___×___      |   |   | 2012/07/12| 17:35 | 17:38 ___________|_______|______|___________|_________|___×___|___×___      |   |   | 2012/07/12| 17:43 | 17:54 ___________|_______|______|___________|_________|___×___|___×___ 『 最初と最後の時間 』   |    |17:28  | 17:54 ___________|_______|______|___________|_________|___×___|___×___      |   |   | 2012/07/12| 17:37 | 17:45 ___________|_______|_______|___________|_________|_______|___________      |   |   | 2012/07/12| 17:50 | 17:53 ___________|_______|_______|___________|_________|_______|__________

  • エクセルのマクロ(VBA)について質問です。

    お世話になります。 エクセルのマクロ(VBA)について質問があります。 下記、わかりにくいと存じますが、お力添え下さい。 ある表があります。 項目としてA列「名前」B列「連絡先」C列「順番」とんでE列に 「乱数」があります。 2行目にこれら項目名が並んでおり、3行目から34行目までは データ入力範囲になります(32名入力出来る。1行目は表のタイトルです) 入力したデータを順不同に並べたく、「順番」項目は乱数を用いた数字を入力させます。 ここから、マクロの登録をします。 ~↓登録中↓~ ・「乱数」項目の1番上(E3)から一番下(E34)までドラッグ  (範囲指定)し、右クリック→コピー ・「順番」項目の一番上(C3)で右クリック→”形式を選択して貼り付け” ”値”にチェックを付けて「OK」 ☆「順番」項目の一番上(C3)から「名前」項目の一番下(A34)まで ドラッグ(範囲指定)し、”昇順で並べ替え”ボタンを押す ~ここまで~ (乱数は、毎回変化してしまうのを防ぐ為、別項目から引っ張ってきて 値だけをコピーするようにしています) このようにマクロを登録しました。 しかし、毎回32名を入力するわけではなく、時には32名未満の入力をする場合があります。 別のセルF40に、COUNTA関数より取った「名前」項目に登録されている数を表示させているのですが、 ☆部分の処理にてこの数だけ範囲指定して並べ替えたいのです。 (セルC3から登録されている人数分だけ範囲指定したい、ということです。20名だけ登録されていれば、 セルC3からセルA22を範囲指定する。指定した部分だけを並べ替える) 32名未満の時、乱数に元づく順番で並べ替える際、データの入って いない行も順番に並んでしまうのですが、空白の行はそのままにし、 データの入っている行だけを上(セルA3)から詰めて並べたいのです。 VBAの編集で、COUNTA関数の結果の数字を変数に代入して使用したいのですが、 そのやり方がわかりません。 どなたかお知恵をくださいますよう、お願い致します。 (わかりにくい記述なので、必要に応じて補足させて頂きます。)

  • エクセルのマクロ(range)について

    マクロの作りと理解の方法について教えてください。 今、日報を作り直しています。 以前作成した方は、このように作っていました。 Worksheets("日報").Select Range("Q7:Q23").Value = Range("U7:U23").Value Range("S7:S59").Value = Range("V7:V59").Value Range("A1").Select MsgBox " 転写を終了しました。" End Sub マクロでは複数の行列を指定していますが、1行だけ表すと、 具体的な表とデータの変化の仕方とするとこのようになっています。 M    O    Q     S       U     V 個数 金額  累計個数 金額金額 (=M+Q) (=O+S) 0、   0、   100、   1000、    100、   1000  1,初期状態 10、  100、  100、   1000、    110、   1100 2,個数を入力すると、計算式を入力してあるUとVの数が変わる 10、  100、   110、   1100、    120、   1200 3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。 0、   0、    110、   1100、   110、    1100 4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。      なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、 2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。 通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、 マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。 なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。 また、QやSをUやVへ書き込んでいないのでしょうか。 どなたか詳しく教えていただけると幸いです。

  • エクセルの関数に詳しい方教えてください!

    次のようなゲームをした場合の成績を、エクセルの関数を使って計算したいのですが、詳しい方お願いします。 例) A列:○ ○ × × × ○ × ○ ○ × × × × ○ ○ ○ B列:1 1 1 2 3 4 3 4  3 1 2 3 4 5 4 3 C列:+1 +1 -1 -3 -6 -2 -5 -1 +2 -1 -3 -6 -10 -5 -1+2 損益:+6 最大賭数:5(B列) 最大マイナス:-10(C列) A列がゲームの結果(○が勝ち、×が負け)、B列が賭数、C列が損益を表します。 ゲームのルールですが、 (1)まず最初に1を賭け、勝てば1の利益で1セット終了。 (2)最初に1を賭け、負ければ次は2を賭ける。 (3)外れ続けると、1を足し続けて賭ける。 (4)あたると1減らして賭ける。 (5)利益が0以上になったら1セット終了とし、また1から賭けなおす。 ---------------------------------------------------------------------- いまエクセルのA列に○と×が並んでいる状態で、そこから上に書いたB列、C列を関数をつかって計算し、最終的に損益、最大賭数、最大マイナスを求めたいのです。 例の数字の並びがきれいじゃありませんが、うまくいかないのでご容赦ください。

  • エクセル:ランダムに配置するVBAプログラム

    大学の情報の授業でVBAに関するレポートが出題され、 さっぱり分からなくて困っています。 どなたか分かる方いらっしゃいましたら、お教えください。 問題は以下の通りです。 10行10列のセル範囲に、1から100までの整数をランダムに配置するVBAプログラムを作成せよ。 ヒント:まず1から100までの数を1次元配列に格納せよ。次に、その中身をシャッフルせよ。最後に、その配列から順に10個ずつ取り出して、セル範囲に1行ごと書き出せ。 よろしくお願いします!

  • エクセルに詳しい方、お願いします。

      例を挙げます。   添付図のように、1月から12月までの各月の数字に合わせて、〔ふた〕の数だけセルを塗りつぶしたいのです。または〔■〕印を黒以外で書き込みたいのです。 〔ふた〕〔胴体〕〔脚〕を組み合わせて、一個の製品にした場合の半端物をできるだけ少なくしたいのです。 塗りつぶす数は、最大(366×2=)732セルです。 塗りつぶした月が区別できるように、各月の塗りつぶした部分を色やパターンで月ごとに区別できると、尚良いのです。2色で交互でも良いのです。 実際には、農薬や肥料・パッケージのパーツ数などの在庫と注文などの管理に応用したいのです。 集計表で、計算すれば良いのですが、視覚的にさっと累計を把握したいのです。   よろしくお願いいたします。

専門家に質問してみよう