• ベストアンサー

エクセル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つずつタイムラグがある感じで表示させたいです。 このプログラムを組みたいのですがどのようにすればよろしいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

Public Sub f() Dim i As Integer Dim t As Integer Dim r As Integer Cells.Clear For i = 1 To 9 r = Int(Rnd() * 75 + 1) t = t + r Application.Wait (Now + TimeValue("00:00:01")) Range("d4").Cells(1, i).Value = r If t > 120 Then MsgBox "終了" Exit Sub End If Next End Sub こんな感じでどうでしょう。

shorinji36
質問者

お礼

回答有難うございます、大変助かりました。

その他の回答 (1)

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

Sub rndxx() Dim i As Integer Dim s As Integer Randomize i = 4 Range(Cells(4, 4), Cells(4, 12)).ClearContents While s <= 120 And i <= 12   Cells(4, i) = Int(Rnd * 75 + 1)   s = s + Cells(4, i)   i = i + 1 Wend End Sub 横に進むので添え字が使いやすいようrange("D4")では無くcells4,4)という形式にしました。

shorinji36
質問者

お礼

回答有難うございます、助かりました。

関連するQ&A

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

    最近エクセルVBAを勉強し始めた初心者です。 エクセル上でコマンドボタンを押すとF12~H12にそれぞれ0~9の数字を一定時間回転させF12、H12、G12の順(左、右、真ん中の順)に時間差で0~9の乱数を発生させ表示させるには(パチンコのリーチみたいな感じ?)どのようなプログラムを組めばよろしいでしょうか? 数字を回転させ乱数を表示させるプログラムは For = i = 0 To 100  Range("●●").Value = Int(Rnd * 10) Next i です。 よろしくお願いします。

  • VBA

    1 a;b;c;d; 2 e;f;g;h; 3 i;j;k;l; をVBAで   1 a;   2 e;   3 i;   1 b;   2 f;    3 j;   1 c;   2 g;   3 k;   1 d;   2 h;   3 l; としたいのですが、どうしたらいいですか?

  • エクセルVBAについて

    エクセルVBAについての質問です。A1、B1と順に入力していき、最終 F1列にカーソルがいったときに(F1を空欄のまま)エンターキーを押すと次の行のD2にカーソルが飛ぶ、そしてD2、E2に入力をして、G列にカーソルを動かしエンターキーで次の行のA列にカーソルが移動する、こんな操作をしたいのですが。つまりF列にカーソルがいったらカーソルは次の行のD列に飛び、G列にカーソルがいったら次の行の先頭つまりA列にカーソルが移動するように。VBA初心者でもつくれるかどうか、よろしくお願いします。

  • EXCEL 乱数発生の記録

    A1~C1 に0~9の乱数を発生[=RANDBETWEEN(0,9)]させ Dの列に再計算[F9を押す]の回数、E~Gの列に出た乱数の値を入れたいのですが、関数で可能でしょうか。   D E F G 1  1 2 5 7・・・1回目は 2,5,7が出た。 2  2 8 1 0・・・2回目は 8,1,0が出た。 3  3 9 4 4・・・3回目は 9,4,4が出た。 4  4 0 3 2・・・4回目は 0,3,2が出た。 このように再計算を行うと下の行に追加していきたいのですが、可能でしょうか。 宜しくお願いします。

  • エクセルVBAの自動計算について

    エクセルVBAの自動計算について vbaの自動計算について教えてください。 D      E        F        I 数量   仕様       容積      金額  1   仕様1      2.50      XXX 上記の表があります。 Eの仕様は3種類あり、別シートに以下のレート表があってそこから範囲内の容積にある単価を算出します。 その単価にF容積とD数量を掛けたものをI金額に表示して、次行に行き同じことを繰り返します。 レート表は以下の通りです。    H      I       J      L 6 以上    未満     仕様1 仕様2 7  0.01   0.80     3000      3500           中略 13  5.01   6.00    10000      12000 よろしくお願い申し上げます。

  • 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で悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • VBA マトリクス 全パターン

    VBAで以下のことを実現したいです。 以下のエクセルがあります。   A B C 1 a b c 2 d e f 3 g h i このマトリクスの全パターンを別のシートに表示したいです。 表示結果 abc abf abi aec aef aei ・  ・  ・ ghi VBAで以上のことを実現したいですが、ご教授お願いいたします。

  • エクセルのVBAで簡潔に表示させたいのですが、知恵を貸してください。

    エクセルのVBAで簡潔に表示させたいのですが、知恵を貸してください。 エクセルのVBAで現在、下記のような指示をしています。 メンテナンスが困難なため、簡潔に記載する方法または関数を教えていただけないでしょうか。 activesheet.range("c2")= "=sumproduct(('[nen.xls]1'!c4)*1)" activesheet.range("d2")= "=sumproduct(('[nen.xls]1'!d4)*1)" activesheet.range("e2")= "=sumproduct(('[nen.xls]1'!e4)*1)" activesheet.range("f2")= "=sumproduct(('[nen.xls]1'!f4)*1)" activesheet.range("g2")= "=sumproduct(('[nen.xls]1'!g4)*1)" activesheet.range("c3")= "=sumproduct(('[nen.xls]1'!c5)*1)" activesheet.range("d3")= "=sumproduct(('[nen.xls]1'!d5)*1)" activesheet.range("e3")= "=sumproduct(('[nen.xls]1'!e5)*1)" activesheet.range("f3")= "=sumproduct(('[nen.xls]1'!f5)*1)" activesheet.range("g3")= "=sumproduct(('[nen.xls]1'!g5)*1)" activesheet.range("c4")= "=sumproduct(('[nen.xls]1'!c6)*1)" activesheet.range("d4")= "=sumproduct(('[nen.xls]1'!d6)*1)" activesheet.range("e4")= "=sumproduct(('[nen.xls]1'!e6)*1)" activesheet.range("f4")= "=sumproduct(('[nen.xls]1'!f6)*1)" activesheet.range("g4")= "=sumproduct(('[nen.xls]1'!g6)*1)" ・ ・ このパターンを全部で50回ほど繰り返します。 ・ ・  この繰り返し作業を簡単な記述に変更したいのですが、できません。  お知恵をお貸しください。よろしくお願いいたします。

  • エクセルについて

    エクセルで A B C D E F G H I J K L M N O P Q R … と並んでいるデータを A B C D E F G H I J K L … のように並べ変えたいのですが、最も効率のよい方法を教えてください。 上記のアルファベット1つにセル1つです。 Office2007を使用しています。 以上、宜しくお願い致します。