- ベストアンサー
Excel2007で乱数をつくりコピペしたいのです
Excel2007で乱数をつくりコピペしたいです (1)、マクロボタンを押します。 (2)、1~10の数字を乱数で(U6:U15000)に表示(同じ数字が連なっても大丈夫)したらAA3に数値ができあがります。 (3)、(U6:U15000)に出来た乱数をsheet5のC6から下にコピペして、 (4)、(2)でAA3に数値ができあがるのでそれをsheet5のC4にコピペします。 (5)、(1)に戻ってマクロボタンを押すと(2)(3)(4)と行くのですがコピペする場所はCから一つ右隣のDと、マクロボタンを押す度に右隣にコピペしたいです。 ご協力お願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
AA4が何か計算式でデータを更新している場合コピー前にオンにしないと計算されないのでオンにするタイミングを変更しました。 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True の2行が以下の上に移動しただけです。 Sh2.Range(Sh2.Cells(6, LastColumn), Sh2.Cells(15000, LastColumn)).Value = Sh1.Range(Sh1.Cells(6, "U"), Sh1.Cells(15000, "U")).Value Sub Sheet1_ボタン1_Click() Dim c As Range, LastColumn As Long Dim Sh1 As Worksheet, Sh2 As Worksheet Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set Sh1 = Sheets("Sheet1") 'U6:U15000に乱数を表示するシート Set Sh2 = Sheets("Sheet5") For Each c In Sh1.Range(Sh1.Cells(6, "U"), Sh1.Cells(15000, "U")) c.Value = WorksheetFunction.RandBetween(1, 10) Next LastColumn = Sh2.Cells(6, Columns.Count).End(xlToLeft).Column + 1 If LastColumn < 3 Then LastColumn = 3 End If Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Sh2.Range(Sh2.Cells(6, LastColumn), Sh2.Cells(15000, LastColumn)).Value = Sh1.Range(Sh1.Cells(6, "U"), Sh1.Cells(15000, "U")).Value Sh2.Cells(4, LastColumn).Value = Sh1.Cells(4, "AA").Value Set Sh1 = Nothing Set Sh2 = Nothing End Sub
その他の回答 (4)
- watabe007
- ベストアンサー率62% (476/760)
>1~10の数字を乱数で(U6:U15000)に表示 U6:U15000のシート名が明記されていないのでActiveSheetとしています。 参考に Sub Test() Dim v(1 To 14995, 0) As Long, i As Long Dim LastCol As Long Randomize For i = 1 To 14995 v(i, 0) = Int(Rnd() * 10) + 1 Next ActiveSheet.Range("U6").Resize(14995).Value = v With Worksheets("Sheet5") .Range("C6").Resize(14995).Value = v LastCol = .Cells(4, Columns.Count).End(xlToLeft).Column + 1 If LastCol < 3 Then LastCol = 3 .Cells(4, LastCol).Value = ActiveSheet.Range("AA4").Value End With End Sub
お礼
お久しぶりですwatabe007さん。ご返答ありがとうございます。 やはり様々なやり方があるんですね。 また何かあれば是非よろしくお願いいたします。
- kkkkkm
- ベストアンサー率66% (1742/2617)
> AA4に出来上がるんですが何処をかえたらよろしいですか? Sh2.Cells(4, LastColumn).Value = Sh1.Cells(3, "AA").Value の Sh1.Cells(3, "AA"). を Sh1.Cells(4, "AA").Value に変更してください。 Sh2.Cells(4, LastColumn).Value = Sh1.Cells(4, "AA").Value セルの指定Cellsは Cells(行,列) になります。
お礼
お陰様で段々とソースが見慣れてきました。ありがとうございます。
- msMike
- ベストアンサー率20% (368/1813)
》 (2)、1~10の数字を乱数で(U6:U15000)に表示したら 》 AA3に数値ができあがります。 そのロジックが理解できません。 なぜ「 AA3に数値ができあが」るンですか?
お礼
イヤイヤ(^_^ゞ ちょっとトライしてみたいんです。有識者さん達に突っ込まれますと、落ち込みそうなんで。
- kkkkkm
- ベストアンサー率66% (1742/2617)
画面の描画と自動計算をオフにして実行するようにしています。 もしエラーで止まった場合には自動計算がオフの状態なので Sub エラーで止まった時() を実行してください。画面の描画と自動計算がオンになります。 Sub Sheet1_ボタン1_Click() Dim c As Range, LastColumn As Long Dim Sh1 As Worksheet, Sh2 As Worksheet Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Set Sh1 = Sheets("Sheet1") 'U6:U15000に乱数を表示するシート Set Sh2 = Sheets("Sheet5") For Each c In Sh1.Range(Sh1.Cells(6, "U"), Sh1.Cells(15000, "U")) c.Value = WorksheetFunction.RandBetween(1, 10) Next LastColumn = Sh2.Cells(6, Columns.Count).End(xlToLeft).Column + 1 If LastColumn < 3 Then LastColumn = 3 End If Sh2.Range(Sh2.Cells(6, LastColumn), Sh2.Cells(15000, LastColumn)).Value = Sh1.Range(Sh1.Cells(6, "U"), Sh1.Cells(15000, "U")).Value Sh2.Cells(4, LastColumn).Value = Sh1.Cells(3, "AA").Value Set Sh1 = Nothing Set Sh2 = Nothing Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub Sub エラーで止まった時() Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
お礼
AA3に数値ができあがるって言ってたんですが、間違ってました。 AA4に出来上がるんですが何処をかえたらよろしいですか? sheet5に写す時もC4からコピペしたいです。
お礼
ありがとうございました。お陰様で上手くできました。この件に関しての続きで質問しますので、ご返答おまちしております。
補足
この時間におかしいなと、ようやく気が付いて治したら滅茶苦茶上手くいってほっとしましたし、凄く嬉しいです。\(^_^)/ありがとうございました。