• 締切済み

【エクセルVBAについて】セルをランダムに選択コピーし、別シートにランダムに貼り付けたい。

エクセルのVBAについてあまり詳しくないので質問したいのですが、 件名のようなことをマクロで行いたいと思っています。 詳しく説明しますと、 シート2のA1:R3の54マスのセルにそれぞれ文字が入っています。 それを3×3、計9マスで1セットに罫線で区切っています。(全部で6セット) |あああ|いいい|ううう|えええ|おおお|かかか| |あああ|いいい|ううう|えええ|おおお|かかか| |あああ|いいい|ううう|えええ|おおお|かかか| このような「あ」~「か」のブロックのうち、1つのブロック(9つのセル)を、 ランダムにコピーして、シート1の領域内(A1:U24)のどこかに、 ランダムに貼り付けるようなことは、マクロで可能でしょうか? できればそのマクロをボタンに登録して使いたいと思っています。 ご教示いただけると大変助かりますので、よろしくお願いします。

みんなの回答

  • jindon
  • ベストアンサー率43% (50/116)
回答No.2

なにがしたいのですか?

kinpo-
質問者

お礼

ずばりこの質問どおりのことがしたかったのですが… 自分の説明力の無さに力不足を感じます。 ただ、ここに質問することをきっかけに、 自分なりに色々勉強することができたので、 私のために回答してくださったjindonさんには感謝します。 もう少し自分のしたいことを整理して、 なお、分からないことがありましたら再度質問したいと思います。 ありがとうございました。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.1

Sub test() Dim colary colary = [{1, 4, 7, 10, 13, 16;0,0,0,0,0,0}] Randomize For i = 1 To 6 colary(2, i) = Rnd() Next HSortMA colary, 1, 6, 2 With Sheets("sheet2") n = 1 For i = 1 To 6 .Cells(1, colary(1, i)).Resize(3, 3).Copy _ Sheets("sheet1").Cells(1, n) n = n + 3 Next End With End Sub Private Sub HSortMA(ary, LB, UB, ref) Dim M As Variant, temp Dim i As Long, ii As Long, iii As Long i = UB ii = LB M = ary(ref, Int((LB + UB) / 2)) Do While ii <= i Do While ary(ref, ii) < M ii = ii + 1 Loop Do While ary(ref, i) > M i = i - 1 Loop If ii <= i Then For iii = LBound(ary, 1) To UBound(ary, 1) temp = ary(iii, ii): ary(iii, ii) = ary(iii, i) ary(iii, i) = temp Next ii = ii + 1: i = i - 1 End If Loop If LB < i Then HSortMA ary, LB, i, ref If ii < UB Then HSortMA ary, ii, UB, ref End Sub

kinpo-
質問者

お礼

早速の回答ありがとうございます。 少し自分の説明不足だったようです。 補足質問させていただきます。

kinpo-
質問者

補足

質問してから色々考えて、下のような記述をしてみました。 Sub ランダム貼付() Randomize Sheets("B").Select 乱数1 = Int(6 * Rnd) Cells(1, 1 + 乱数1 * 3).Resize(3, 3).Copy Sheets("A").Select 乱数2 = Int(23 * Rnd) + 1 乱数3 = Int(20 * Rnd) + 1 Cells(乱数2, 乱数3).Select ActiveSheet.Paste End Sub ところが、これでしたら何度もこのマクロを実行すると、貼り付ける領域内でブロック同士の「重なり」が生じてしまいます。 領域内が満タンになるまで実行する必要はないのですが、 場合によれば2回目で重なることもあります。 この「重なり」を解消する方法はありますでしょうか?

関連するQ&A

  • セルをクリックすると別のファイルのシートをコピー

    新しいシート(sheet1)に項目をつけて セルA1「表紙」・セルA2「消火器」・セルA3「誘導灯」を設定 セルA1の「表紙」をクリックすると、(sheet2)に別のブックからシート(表紙)をコピー セルA2の消火器」をクリックすると、(sheet3)に別のブックからシート(消火器)をコピー セルA3の「誘導灯」をクリックすると、(sheet4)にに別のブックからシート(誘導灯)をコピー という風にsheetを増やしていきたいのですが、どうやったら良いのでしょうか? マクロもVBAも経験ありません。 が、がんばりますので、アドバイスをお願いいたします。

  • VBA セルの値を別セルにコピーするには

    VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

  • EXCEL VBA シートの名前を指定してコピー

    EXCEL VBA 初心者です。 とても困っています。 助けてください。 excel2010を使っています。 今,「原本」というシートがあり,それをマクロを使って同じブック内にコピーしたいと思っています。 コピーして新しく作られたシートの名前は「A1」のセルに入力されている値にしたいです。 コピーされた後のシートにはマクロボタンは削除したいと考えています。 また,コピーした後のアクティブシートは「原本」のシートにしたいのですが これを全部いれたコマンドはどのようになるのでしょうか。 似たような質問だったり,回答があるのですが, どのように組み合わせたらいいのかよく分かりません。 どなたかお助けいただけないでしょうか。 よろしくお願いします。

  • Excel VBA セルを指定個数ランダム選択

    Excel VBA セルを指定個数ランダム選択 A1からA30までのセルをランダムで8コ選んで値として"○"を入れる ということをやりたいのですがどのようにすればよいでしょうか? よろしくお願いします。

  • シート内の一部のセルを別シートにコピー

    Excelのマクロ(VBA)の記載方法について お分かりになる箇所だけでも結構ですので、 どなたかご教授を願い致します。 シートX   A    B   C  1 data1 data2 data3 2 x   data7 data8 3 data4 data5 data6 4 data7 data8 data9 シート Y   A   B   C    D 1 length 3  (任意) (任意) 2 xxxx (任意) (任意) (任意) 3 zzz  (任意) (任意) (任意) 4 (空白)(任意) (任意) (任意) 上記のような2つのシート(同一Excelファイル内)があって、 シートXの一部のセルを次の条件(1~4)でシートYにコピーしたい場合 1.コピー元の列の数は、シートYの "length"と書かれたセルの右となりの数字   とする(上記では3なので、A,B,C列をコピー対象) 2.コピー元の行の数は、シートXの1~4行目までとするが、   シートXのA列のセルが"x"だったら、その行は全てコピーしない。 3.コピー先(Y)の列は、コピー元(X)の列と一つずれてコピー(BならCに、CならDに) 4.コピー先(Y)の行は、シートYのA列で1行からで始めて空白セルになった行からコピー開始。 (上記では、A列で空白セルのある4行目からコピー) 上記条件で、下記のシートYを作成したいのですが、 この場合どようなマクロ(VBA)で実現できますでしょうか。 コピー結果(シートY)  A     B   C   D 1 length  3  (任意) (任意) 2 xxxx  (任意) (任意) (任意) 3 zzz   (任意) (任意) (任意) 4 (空白) data1 data2 data3 5 (任意) data4 data5 data6 6 (任意) data7 data8 data9

  • Excel VBA 空白セル以外のセルを罫線で囲む

    Excel VBA 空白セル以外のセルを罫線で囲む ここの質問箱をよく利用させて頂いている者ですが、また質問させていただきます。 あるシート(例:”Sheet1”)の全セル内のうち、ランダムな文字が全セル内のどこかに記入されています。 また、記入される位置は常に変化します。 つまり、ある時は「A1」に入力されていても、次ははそうでないということです。 この様な場合、文字が入力されているセルのみに罫線を引く処理を行いたいのですが、実現は可能でしょうか? また、可能であれば、どの様なコードになるのでしょうか。教えてください。

  • VBAを使って検索したセルを別のシートにコピーする

    こんにちは。 業務でエクセルを使用して差し込み文書を印刷しています。 量が多いのでVBAを使って簡単に作業したいです。 まず、以下のようなシートがあります。 <Sheet1>差込文書 <Sheet2> (A)  (B)    (C)     (D) (E)  (F) 番号|会社名|支店名|役職名|氏名|会社、支店名、役職名、氏名 次のような作業をさせたいです。 1.<sheet2>のA列と同じ番号が<sheet1>の(L1)にあるかどうか検索する。 2.もし、一致するセルがあれば、<sheet2>の該当番号の行のF列を<sheet1>の(B5)にすべて(書式ごと)コピーする。 以上です。 VLOOKUP関数でしましたが、すべてをコピーする事ができなかったので、VBAでコピーしたいです。 F列は、個人名だけの方、支店がない会社などがあるため、バランス良く配置しているセルです。 よろしくお願いします。

  • エクセル2003で別のマクロで選択したセルに別のシートからコピーして貼り付けるマクロ

    別のマクロで選択したセルに別のシートからコピーして貼り付けるマクロ、どうしても、このマクロが作れないです。 難題すぎて・・・・ 貼り付けるセルの値は選択ボタンによって変わる仕様ですが、エクセル2003で可能なんでしょうか? 難しすぎてコードが全然解らない状態です どなたかご教授願えれば幸いです。

  • Excel VBAでシートのコピーをできなくするには

    Excel VBAで シートのコピー及びシートの新規挿入を出来なくする事はできるでしょうか? どなたかご教示お願いいたします。

  • EXCEL 別シートのコピー(2)

    こんにちわ。 以前、マクロなどで、同じ名前のシートから別ブックの同じ名前のシートへ上書きはできるのでしょうか?という質問をさせていただき、教えていただいた方法でコピーをしてますが、値だけコピーすることはできるのでしょうか?(結合セルが結構あるので、難しいとおもいますが・・・。) と、いうのも数式のセルは、リンクがはられてしまうので困るのです。 教えてください。

専門家に質問してみよう