• ベストアンサー

Excel2007で広範囲のセルに乱数を入れる

sheet5の広範囲のセル(L6:BXI10000 )に1~5の数字を不規則に極力短時間で隙間なく埋める方法ってありますかね?

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

  • ベストアンサー
  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.13

>+1の意味は格納するときに一歩進むという意味でしょうか? 一歩進むという意味が分かりませんが、多分違います。単純な算数です。 Rnd()は、0以上1未満の単精度浮動小数点数型 (Single) の乱数を返す関数です。 なので、int(Rnd()*5)で得られる乱数は0、1、2、3、4のいずれかです。 今回1~5の乱数が欲しいので、各々に1足してやれば、望む乱数が得られます。 この1足すのが、式の中の+1です。

961awaawa
質問者

お礼

ありがとうございました。

その他の回答 (12)

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.12

>0~9の数字にする場合はArr(i, j) = Int(Rnd() * 9 + 1) いいえ、それだと1~9になります。 0から9にしたい場合、Int(Rnd() * 10)ですね。 もっと詳しく書くなら、Int(Rnd() * (最大値 - 最小値 + 1) + 最小値)になります。 Int(Rnd() * (9 - 0 + 1) + 0)→Int(Rnd() * 10)という訳です。

961awaawa
質問者

お礼

Randomize    Arr(i, j) = Int(Rnd() * 5 + 1) の +1の意味は格納するときに一歩進むという意味でしょうか?

  • kkkkkm
  • ベストアンサー率65% (1596/2432)
回答No.11

> sheet 5 だけにするやり方ってどうすればよろしいでしょうか? 他のシートをすべて削除するとか、新しいブックで作業するとかです。

  • kkkkkm
  • ベストアンサー率65% (1596/2432)
回答No.10

最初の As Variant を As Integer にしたら多少変わるかも。 「かも」です。

  • kkkkkm
  • ベストアンサー率65% (1596/2432)
回答No.9

> 実行中のソフトを止めるとはどういうことなんですかね? OKWAVEを開いたままとか、自身で何かソフトを起動したままにしているとかでなければ止めるものは無いと思って差し支えないです。バックグラウンドで動いているものもありますが、そのあたりは考えてなくていいと思います(止めていいものと駄目なものの判別ができないと思うので) Sheet5ということは別のシートもあるということのように思えますが、もしできるのならSheet5だけにしてみてもいいかもしれません。あくまで「かもしれません」です。

961awaawa
質問者

お礼

こんばんはkkkkkm さん。回答ありがとうございます。 sheet 5 だけにするやり方ってどうすればよろしいでしょうか? マクロを実行する前に"作業中のブック"というのを選択した状態がsheet5だけという形なんですかね?

  • kkkkkm
  • ベストアンサー率65% (1596/2432)
回答No.8

> メモリー不足とならないようにするにはどうすることが必要ですか? PCのメモリを増やす。実行中のソフトを止める。 とかでしょうか。多分です。

961awaawa
質問者

お礼

実行中のソフトを止めるとはどういうことなんですかね?まだまだ詳しくなくて……_(^^;)ゞ あまり詳しくなくて。ブックを開いてsheetに移りマクロ作業を指定回数指示する以外にソフトって動いてるんでしょうか?

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.7

既に回答がついているので控えようかと思いましたが、セル範囲の数指定を何度も繰り返しており、修正する時大変なので、一か所にまとめたコードを作成しました。 更新の停止も、三点セットに増やしています。 Sub RandomNumber()  Dim i As Long, j As Long  Dim TargetRange As Range  Dim Arr() As Integer  Set TargetRange = Worksheets("Sheet5").Range("L6:BXI10000") '数字を出力する範囲を設定  ReDim Arr(1 To TargetRange.Rows.Count, 1 To TargetRange.Columns.Count)  For i = 1 To TargetRange.Rows.Count   For j = 1 To TargetRange.Columns.Count    Randomize    Arr(i, j) = Int(Rnd() * 5 + 1) '1~5の乱数を配列に格納   Next j  Next i  Application.EnableEvents = False  Application.ScreenUpdating = False  Application.Calculation = xlCalculationManual  TargetRange.Value = Arr '乱数を格納した配列をセルに出力  Application.EnableEvents = True  Application.ScreenUpdating = True  Application.Calculation = xlCalculationAutomatic End Sub

961awaawa
質問者

お礼

mathmi さん回答ありがとうございます。0~9の数字にする場合は Randomize    Arr(i, j) = Int(Rnd() * 5 + 1) を Randomize    Arr(i, j) = Int(Rnd() * 9 + 1) に すれば大丈夫ですか?

  • kkkkkm
  • ベストアンサー率65% (1596/2432)
回答No.6

BXでなくてBXIだったんですね。Iを見落としてました。 65は1974に変更です。

961awaawa
質問者

お礼

回答ありがとうございます。 列を、欲張って10000 にしたときメモリー不足になりメッセージが出ました。 メモリー不足とならないようにするにはどうすることが必要ですか?

  • kkkkkm
  • ベストアンサー率65% (1596/2432)
回答No.5

> 所で65とはどういう意味になりますか? L列からBX列までの列数です。

  • msMike
  • ベストアンサー率20% (363/1772)
回答No.4

1.式 =RANDBETWEEN(1,5) を入力したセル L6 を選択して、Ctrl+C  ̄ ̄をパシーッ 2.[数式バー]にマウスカーソル放り込んで、それまで表示されていた  ̄ ̄L6 を L6:BXI1000 に上書きして、Enterキーを「エイヤッ!」と叩き  ̄ ̄付け 3.Ctrl+V をパシーッ 4.そのままの状態で、再度 Ctrl+C をパシーッ 5.そのままの状態で、[値の貼り付け]を実行

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

これだけ広範囲だと何が起きるか分かりません。 私のパソコンでは2~3秒かかりました。 win10、Excel2010です。 以下の操作でできるはずです。 (1)セルL6に「=INT(RAND()*5+1)」と入力。 (2)名前ボックス(左上)をクリックすると、L6が選択状態になっているので、名前ボックスの何もないところをクリックして、後ろに「:BXI10000」を入力して「L6:BXI10000」にしてEnterキーを押す。 (3)ファンクションキーF2を押す。 (4)Ctrlキーを押しながらEnterキーを押す。

関連するQ&A

  • 一番右側のセルの値

    Sheet 1のセルA1~セルL10までのセル120個には、不規則にランダムで数字(整数)が記載されています。 ランダムですので数字のゼロが記載されているセルもあります。 これをセルM1にはセルA1~L1までのセルの一番右のセルに記載されているゼロ以外の数字を抜き出します。同様にA2~L2、A3~L3,・・・・・・・・と云うように各行についても最も右側にあるゼロ以外の数字を抜き出したいのですが、IF関数でIFを重ねて式を作成せずにできる関数を教えてください。 また、同様に一番左に記載されているゼロ以外のセルを抜き出す方法についても教えてください。

  • EXCEL同じセルのデータを抜き出す

    よろしくお願いします。 1つのフォルダの中に、20近くのファイルがあります。 その1つのファイルには、それぞれ6つのシートがあります。 その中の1つのシート  ※シートもすべて同じ構造で作られています。 例えば、A100セルに書かれている数字を 別のファイルに20個分まとめて抽出したいのですが いちいちA100の数字をコピーして張り付けるのは時間がもったいない。 何とか簡単に出来る方法はないでしょうか? 関数かマクロを使うのでしょうか? よろしくお願いします。

  • セルの数字を範囲で選択して計算させたいです。

    エクセル2000を使用しています。 CSVファイルを読み込んで、シートに,区切りで開きました。 特定の列の数字を範囲で選択して(複数行)、範囲で選択したセルの数字を1/1000したいです。  特定のセルを範囲で指定するのは、毎回セルの開始行とセルの終了行が変わるためです。また 選択行の上下セルにも文字が入ってきます。 別シートに数式をいれないで、同じセルに計算結果を出すことは可能でしょうか?

  • Excel2007で行番号を指定してセル範囲を

    Excel2007で行番号を指定してセル範囲を抜き出したいです。 sheet2のF8に行番号を入れてsheet3のセル範囲(C:T)の値とセル範囲(AB:AS)の値を取り出して sheet2の(A2:AQ2)に入れます。目で分かりやすい様に背景色か色線で4等分したいです。 よろしくお願いいたします。

  • EXCEL:同じセルへどんどん足していく方法

    ちょっと調べたらすぐわかるだろう! ¨¨¨と思ったら案外わからなかったので、教えてください。 まずやりたいことから説明します。 (1)【シート1】A1セルに数字を入力します。(例としてA1に数字の10が入っているとします。) (2)【シート2】A2セルに数字を入力します。(例としてA2に数字の20が入っているとします。) するとなんと・・・ (3)【シート2】A1セルに(1)+(2)の合計(30)が入っています! さらに (4)【シート3】A2セルに数字(30)を入力すると・・・ あらまぁ、 (5) (3)+(4)の合計が【シート3】のA1に数字の60が入っていたりします! ・・・・ていうことを【シート4】、【シート5】、【シート6】・・・とやっていきたいのです。 **:::ちなみに:::************ ■VBAはもちろんわかりません。。 ■(3)で【シート2】A1セルに=SUM(B1+Sheet1!A1)とかやればいいじゃんと思うかもしれませんがなんか違います。 ■VBAで自動で出来るに越したことはないのですが、関数とかで毎回手動でも上手いこと出来れば問題ないです。(計算間違いすることがなければ何でもいいです) ********************* しょうもない質問で申し訳ありません。 本気とかいてマジで調べればわかりそうな気もするんですが、 どうも人間として重要な「ヤル気」というものが欠如しているせいか、 普通に萎えました。 皆様お忙しい中、大変お手数をお掛け致しますが、 お力添えをどうかよろしくお願い申し上げます(-_-)

  • Excel2007のVBAで、セル範囲を指定し

    Excel2007のVBAで、セル範囲を指定して画像として保存したいです。 たとえば、 Worksheets("Sheet1").Range("A1:B10").CopyPicture xlScreen, xlBitmap Worksheets("Sheet2").Paste とすれば、別のシートに指定した範囲を画像にすることはでき、 さらにこれを、 With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, "C:\test.html", _ "Sheet2", "", xlHtmlStatic, "image", "") .Publish (True) .AutoRepublish = False End With とすれば、画像を指定した場所に保存することはできると思います。 ただ、これだと無駄な処理をしているような気がしますし、実際時間も数秒必要です。 これが、グラフだと Worksheets("Sheet1").ChartObjects("グラフ1").Chart.Export Filename:="C:\graph.gif", FilterName:="gif" のように簡単に、しかも短時間で出来ます。 できれば、上記グラフのように、指定したSheetの指定したセル範囲を画像として指定した場所にPNGにて保存したいです。 どなたかご教授いただければ幸いです。

  • Excel2016 範囲最下から移動コピペ

    sheet1のセルL4から下に向かって値が入ります。 その最下のセルから下に1セルと右に2セル移動させ、 その行のセルNから右に向かってセルBLまでを範囲コピーをし、 sheet8のA2からに、値だけをそのまま貼り付けたいです。 お願い致します。

  • VLOOKUPのセル範囲指定

    VLOOKUP(検索値,セル範囲,列番号,検索型) のうち、セル範囲を別の色々なワークシート上のセル範囲として指定したい と思っています。 ワークシート名を書いたセルをT()で参照すればできるかと思ったのですが、 エラーになってしまいました。ワークシートが少数であればIFをつかって 場合わけをしても良いのですが、そこそこ数がある上にこれから増えるかも しれないので、どうにかワークシート名を簡単に変更・指定できる方法が ないか悩んでいます。 なにか知恵があれば教えてください。 よろしくお願いします。

  • 範囲内を絶対セルにする方法

    こんにちは いつもお世話になります。 質問の件ですが、 エクセルのセルひとつひとつに対しての絶対セルの指定方法は できるのですが、範囲を最初に指定しておいて 絶対セル にする という命令はあるのでしょうか?またはその方法はあるのでしょうか例 事例 sheet1の B1からB10 の商品出たを sheet2 のb1からb10に参照セルとしてsheet1の B1からB10 のデータを挿入。 月末になると 100行くらいまでのデータの入力された表ができあがる 月末にC列の条件で並び替えが必要になったので Sheet2のb10からb100 を範囲選択して絶対セルとしたい。 できるでしょうか? ※vlookupなどの関数を使った別方法も考えられるのですが、  範囲指定をして 絶対セル に変換する方法があったかなぁ? ということで質問してみました よろしくお願いします。

  • Excel2016での保護セルを越えて選択範囲

    Excel2010で作成したシートをExcel2016に移行して使っていると、保護されているセルの手前でセルの選択範囲が広がらなくなります。 しかし、初めからExcel2016で作成したシートで同じことをすると、保護されているセルを越えてその先の保護されていないセルまで選択が可能なのです。 前者の動作が好ましいのですが後者の動作との切替は可能なのでしょうか? また、前者と後者では「見出し」の文字サイズが異なります。これも変更可能なのでしょうか? ご存知の方、是非ご指導くださるようお願い致します。

専門家に質問してみよう