• ベストアンサー

エクセルVBAでこのプログラムの作るには

imogasiの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

エクセル(表計算ソフト)は、仕事の数字(金額、個数、人数など)を扱うのに適したものと思います。ゲームや遊興のソフト作成に使うためには、適したもの(メソッドなど)が少なく、却って普通のエクセルVBAの本に解説されている課題より、難しいと思います。時間(差)の問題なども難しい。下手にやると、一瞬に終わって何がなんだか判らなくなったりする。 上記のエクセルVBAの普通の解説書にあるエクセルVBAを少し判って、多分エクセルVBAを捨ててから、他のもの(VBなど)でやることになるでしょう。ゲーム的なものは特有の技術(サブプログラムの集積)が要ると思います。 >エクセルVBAを勉強し始めた初心者です。がやるべき課題ではないと思う。 両者で進むべき方向が違う。 それにこの課題は丸投げです。回答者にたよらっず、自分で必要なコード群を1つづ勉強してください。

関連するQ&A

  • VBAでこのプログラムの作り方

    最近VBAを勉強し始めた初心者です。 Excel上でコマンンドボタン1つで D18~H18からD22~H22の5×5の25マス(Aシート) と M18~Q18からM22~Q22の5×5の25マス(Bシート) それぞれに1~75の乱数を同時に発生させ一定時間、数字を回転させたあと数字を表示させたいのですがどのようなプログラムを組めばよろしいですか? ただしAシート内での数字の重複、Bシート内での数字の重複は起きないものです。 AシートとBシートの数字の重複はOKです。 数字はAシート25マス、Bシート25マス全て同時に回転させたいです。 乱数を回転させ数字を表示させるプログラムは For = i = 0 To 100  Range("○○").Value = Int(Rnd * 75) + 1 Next i です。 よろしくお願いします。

  • エクセルVBAでこのプログラムの作るには

    最近エクセルVBAを勉強し始めた初心者です。 エクセル上でコマンンドボタン1つでD4に1~75の乱数を発生させて次にE4に乱数を発生させる。 D4+E4が120以上なら終了で、そうでなければF4に乱数を発生させてD4+E4+F4が120以上なら終了で、そうでなければG4に乱数を発生させてD4+E4+F4+G4が120以上なら終了で、そうでなければH4に乱数を・・・の繰り返し。(最大、L4まで繰り返す) 表示される数字はD4~L4まで同時ではなく1つずつタイムラグがある感じで表示させたいです。 このプログラムを組みたいのですがどのようにすればよろしいでしょうか? よろしくお願いします。

  • Excel VBA 実行時エラー'1004':

     どちらの処理がより高速であるのかを調べるため、以下の2つのVBAを試作致しました。 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub  処が、これらのVBAを実際に動作させ様としますと、どちらの場合においても「Microsoft Visual Basic」ダイアログボックスが開いて 「実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。  さりとて、 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select ActiveSheet.Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub 或いは Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range(Cells(i, 1)).Value = Rnd Next i Range("B1").Select End Sub 等としましても、今度は 「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」 となってしまいます。  どの部分がどの様に悪いのでしょうか?  そして、どの様に修正すれば良いのでしょうか?  尚、使用しておりますExcelのバージョンはExcel2010です。

  • 99BASICプログラムの乱数の計算について

    学校で出た問題で、サイコロを2個振り、(乱数生成で代用)出た目の和がどのような 確率で分布するか調べなさい、と出たのですが、問1のプログラムがあっているのかと、問2を ヒントだけでも教えてください。お願いします。 問題↓ 回数を記憶する配列 f( ) を用意 1 r1=rnd(6)+1:r2=rnd(6)+1  2個のサイコロを振るr1、r2は1から6の目を生成 2 r=r1+r2 出た目の和を求める 3 f(r)=f(r)+1 和がrである回数を求める 4 1から3までを50000回繰り返す 5 cint(f(r)/f(2))をr=2からr=12まで順に表示する 問1 アルゴリズムに沿ったプログラムリストを示せ 問2 cint(f(r)/f(2))の表示結果を示し、簡単にその妥当性を検討せよ で、書いたプログラムが 10 dim f(12) 20 for i=1 to 50000 ←ここでサイコロを振る回数を決める? 30 r1=rnd(6)+1:r2=rnd(6)+1 40 r=r1+r2 50 f(r)=f(r)+1 60 next i 70 for i=1 to 6 80 print cint(f(r)/f(2)) 90 next i 100 end で、結果が縦に3が6個ならんだのですが、問1はこれでいいのでしょうか。 問2の妥当性ってどういうことでしょうか。

  • 正規分布するプログラムを教えてください。

    正規分布する乱数プログラムを作りたいのですが、うまく作れません・・。 プログラムソースは長くなりますので見ていただかなくても結構なのですが、下記のようなプログラムを実行したところ、実行結果下記になり、正規分布にはなりませんでした・・。 色々ネットで調べたものの理解できないのでどなたか教えていただけないでしょうか>< 正規分布を利用して、例えば50~100位の間に分布する乱数を生成したりしたいのです。。。 #include <math.h> #include <time.h> #include <stdlib.h> #include <stdio.h> #define PI 3.14159265358979323846264 double p_nor(){ double rnd,t,u,r1,r2; rnd=rand()%10000/10000.0; t=sqrt(-2.0 * log(1-rnd)); u=2*PI*rnd; r1=t*sin(u); return r1; } int main(){ int i,bunpu[30]={}; double p,min=0,max=0,total=0; srand((unsigned)time(NULL)); for(i=0;i<100000;i++){ p=p_nor(); for(int j=0;j<30;j++){ if(p>-2.0+0.1*j && p<=-1.9+0.1*j) bunpu[j]++; } if(min>p)min=p; if(max<p)max=p; total+=p; } printf("min:%f max%f 平均%f\n",min,max,total/100000); for(int j=0;j<30;j++){ for(i=0;i<bunpu[j]/200;i++){ printf("*"); } printf("\n"); } return 0; } 実行結果 min:-1.711381 max0.803275 平均-0.247841 **************** ************************************ ******************** **************** ************** ************ *********** ********** ********** ********* ********* ******** ******** ******** ******** ******** ******** ******** ************************************* ************************* *********************** *********************** ************************ **************************** ******************************** **************************************************************** ***********

  • EXCEL VBA で,プログラムが動かない.

    EXCEL2000のVBAでプログラムを組みました.(下に記す) 数千行に及ぶ数字のデータがあるのですが,20行に1回だけ,いらないデータが3行出てきます.その3行を削除していくプログラムです.Rangeのところで行を選んで欲しいのに,p列とq列を選んでしまうようです.RangeをRowsに変えたらエラーが出ました.こういう場合はどのように書けばいいのでしょうか.誰か教えてください.お願いします. Sub 削除() '20行ごとに入っている3行を削除していく. Dim i As Integer Dim p As Integer Dim q As Integer p = 21           'pの初期値は21 For i = 1 To 500 q = p + 2 r = "p:q" Range(r).Select Selection.Delete shift:=xlUp p = p + 20 Next i End Sub

  • EXCELでVBAをつかったコピーの高速化

    EXCELのVBAで、A1からA1000まで乱数をセルに書き込むと8秒かかるのですが、これを高速化することが可能でしょうか? For 行番号 = 1 To 1000 Cells(行番号, 1).Value = Int((10 * Rnd) + 1) Next セルに書き込まずに、1000個の乱数を発生させると1秒もかからないので、8秒のうちのほとんどの時間は、セルへの書込み時間にとられています。 EXCELで列のコピーをした場合は、セルへの書込み時間が早いので、1000個の乱数の結果をいったんメモリに書き込み、列のコピーのように、セルにコピーができれば、高速化が可能かなと思うのですが、VBAでできるのでしょうか?よろしくお願いします。 For 行番号 = 1 To 1000 Int((10 * Rnd) + 1)をメモリに書込み Next メモリの内容をA1:A1000にコピー

  • エクセル計算式、VBAについて

    エクセル計算式、VBAについて 下記質問の続きでございます。 http://okwave.jp/qa/q5871637.html 先日の質問にて表もうまく完成したかに見えたのですが、 何度か動作確認のテストをしているうちに、少しおかしな点が出てきました。 下記のURLにある表を見ていただきたいのですが、 加工前の状態から、下記のVBAを実行して、別シートへ加工後の形に出力しました。 ※質問文に直接画像を貼りたかったのですが、どういうわけか出来なかったので、 画像URLでのご説明になることをお許し下さい。 ※「加工前」 http://f58.aaa.livedoor.jp/~works/4.jpg ※VBAの内容 Sub ボタン1_Click() With Sheets("加工後") .Range("2:65536").ClearContents For i = 2 To Range("A65536").End(xlUp).Row For j = 1 To Range("D" & i).Value GYOU = .Range("A65536").End(xlUp).Row + 1 .Range("A" & GYOU).Value = Range("A" & i).Value .Range("B" & GYOU).Value = Range("B" & i).Value .Range("C" & GYOU).Value = Range("C" & i).Value .Range("D" & GYOU).Value = Range("D" & i).Value .Range("E" & GYOU).Value = j .Range("F" & GYOU).Value = "111-1111-" & Right("1111" & (i - 1), 4) .Range("G" & GYOU).Value = GYOU - 1 .Range("H" & GYOU).FormulaR1C1 = _ "=MIN(RC[-5],RC[-6]-SUMIF(R1C[-2]:R[-1]C[-2],RC[-2],R1C[-5]:R[-1]C[-5]))" Next j Next i End With End Sub ※「加工後」 http://f58.aaa.livedoor.jp/~works/1.jpg 加工後の結果でおかしいのが、「箱内数量」です。 目立つようにピンクと黄色で色分けしました。 H9とH10 は箱内数量が正しい数値ですが、 H18とH19は本来、H18=50、H19=40 とならなければなりません。 さらに、H22:H24も、H22=50、H23=50、H24=20 となってほしいのです。 ”加工前” シートのH列には下記の計算式が入っており、H列下方へ相対参照にて計算式をコピーしています。 =MIN(INDEX(C:C,MATCH(F2,F:F,0)),INDEX(B:B,MATCH(F2,F:F,0))-(ROW()-MATCH(F2,F:F,0))*INDEX(C:C,MATCH(F2,F:F,0))) ”加工後” シートのH列には事前には何も計算式が入ってませんが、VBAを実行することにより、下記の計算式が入り、H列下方へ相対参照にて計算式がコピーされています。 =MIN(C2,B2-SUMIF(F$1:F1,F2,C$1:C1)) なぜうまく結果が出るところと、出ないところがあるのか分かりません。 正常な結果を求めるには、どこを修正すればよろしいでしょうか?

  • エクセルVBA

    Sub PlusA001() Dim a As Range Dim b As Integer Range("e1").Value = "氏名" Range("e2").Value = "甲" Range("e2").AutoFill Destination:=Range("e2:e10"), Type:=xlFillDefault Range("f1:j1").Value = Array("国", "数", "理", "社", "英") Set a = Range("f2") For i = 1 To 5 Do Until b = 9 a.Value = Int(100 * Rnd) + 1 b = b + 1 Set a = a.Offset(1, 0) Loop b = 0 Set a = a.Offset(-9, 1) Next i End Sub サンプルコードの例ですが、どうも実行しても納得できない部分があります。それはSet a=a.offset(-9,1)の部分です。Set a = Range("f2")においてf2を始点としているのは判りますが、f2からであればa=a.offset(-9、5) とすればいいのかと思い実行したのですが、ぐちゃぐちゃになります。なぜ(-9、5)ではなく(-9、1)何ですか?いくら読み解いても判りません。教えてください。

  • BASIC プログラム教えてください

    RND関数を用いて1,2,3,4のいずれかの値がランダムに与えられた4つの添字付き変数 a(1), a(2), a(3), a(4) と,MAT INPUT文により入力された b(1), b(2), b(3), b(4) に対し, a(i)=b(i) が成り立つ i の個数 h をカウントして, h=4 となるまで「×」と表示させ,h=4 となったら「○」と表示させて終了するプログラム a(1), a(2), a(3), a(4) を FOR ~NEXT構文で表示させる方法 DO(UNTIL)~ LOOP構文でこのプログラムを作る方法が分かりません