• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロについて教えてください。)

マクロ初心者向けのマクロ操作の基本とは?

このQ&Aのポイント
  • マクロは、Excelや他のプログラムで自動的にタスクを実行するための便利なツールです。特定の操作を繰り返す必要がある場合や、効率化するために使用されます。
  • マクロ操作の基本的な概念を理解するために、以下の内容について説明します。B列内のセルにランダムにA列のデータを貼り付ける方法、データが入力された時にセルを下に移動する方法、そしてこれらの操作をB5まで繰り返す方法です。
  • もしB1にデータが入力されていなければ、B1にA1のデータを貼り付けます。もしB1にデータが入力されていれば、セルを1つ下に移動し、そのセルにA1のデータを貼り付けます。これをB5まで繰り返します。

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

Range("B1").Offset(1,0).Value=Range("A1").Value ってこと?

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.5

あ、貼り付け元のデータは重複していい・・・つか、重複するんですかね? だとすると、もっとシンプルに行けるかも。 Sub TEST2() Randomize Do J = Application.RoundDown(Rnd * 5, 0) Range("A1").Offset(J, 0).Copy Range("B1").Select I = 0 Do Until Selection.Value = 0 Selection.Offset(1, 0).Select I = I + 1 Loop ActiveSheet.Paste Loop Until I = 4 End Sub こうすると、B1にはA1~A5のどれかを、B2にはB1の数値と関係なくA1~A5のどれかを・・・と貼り付けます。

すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.4

あまり複雑に考えなくても、「1~5の乱数で貼り付け先指定して、そこにデータがあったらやり直し」でいいんじゃないすかね。何回も繰り返せば、いつかは「空いてる場所」のインデックスが出てくるんじゃないかと。 Sub MACRO1() Dim DAT(5) As Double Randomize For I = 1 To 5 DAT(I) = Range("A" & CStr(I)).Value Next For I = 1 To 5 Do J = Application.RoundUp(Rnd * 5, 0) If Range("B" & CStr(J)) = 0 Then Exit Do Loop Range("B" & CStr(J)) = DAT(I) Next End Sub こんな感じで行けるはず。つか、テストしたらイケました。 キモは Application.RoundUp(Rnd * 5, 0) だと思います。VBA内では直接端数処理が出来ないので・・・。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

これをB1:B5のセル範囲のセルについて、上の行から、繰返さないといけないはず。 Sub test01() For i = 1 To 5 If Cells(i, "B") = "" Then Cells(i, "B") = Cells(i, "a") End If Next i End Sub のような形(あくまで形だけ)。 質問者の例では、B列のセルが空白かと聞いているが、B列B1:B5のセルにに既にデータが入っているケースはありえるのか。 どういう場合か説明して質問のこと。余りないケースと思うが。 また >A1~A5までのデータをランダムに1つづつ貼り付ける なんて初心者には難しすぎるよ。ゲームの影響か、ランダムということをよく書く質問があるが、難しい。 理論的にも乱数は理解が難しい。 ランダムはコンピュターの関数でそのままやると、(特に狭い範囲だと)同じ値が出てきてもおかしくない。それで良いのか。 ーー 小数例ではテストしているが、下記は誤りを含んでないか、自信ないが(後出の回答も参考にして)。 Sub test02() For i = 1 To 5 If Cells(i, "B") = "" Then p1: Randomize x = Int((5 - 1 + 1) * Rnd() + 1) y = Cells(x, "A") If WorksheetFunction.CountIf(Range("B1:B5"), y) >= 1 Then GoTo p1 End If MsgBox y Cells(i, "B") = y End If Next i End Sub

すると、全ての回答が全文表示されます。
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

1から5と範囲が決まっているので For ~ Next を使いましょう。 --- Dim r as Integer Randomize For i = 1 to 5 If Range("B" & i).value = "" Then r = Int(5 * Rand + 1) Range("B" & i).value = Range("A" & r).value End Next i -- ランダムにというので r = Int(5 * Rand + 1) で1から5までの数字をランダムに取得しています。 (ただし重複あり)

すると、全ての回答が全文表示されます。

関連するQ&A