アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelのVBAでA1~A5,C1~C10に1~10の値を重複無しで入力にはどうしたらいいですか。

質問者からの補足コメント

  • 問題文にミスがありました。
    A1〜A5,C1〜C5の10個のセルにランダムで重複の数字を入れたいです。

      補足日時:2017/11/13 08:56
  • みなさま丁寧なご回答をいただきありがとうございます。
    何度も補足してしまい申し訳ございません。
    1つ飛ばし(A1,A3,…と言った具合)に先の質問のようにA列とC列に10個のランダムな数を入れるにはどうしたらいいでしょうか。
    お手数おかけしますがご教授願えたら幸いです。

      補足日時:2017/11/13 18:07

A 回答 (4件)

こんなのはいかがでしょうか?


--------------------------------------------------------------------------------
Sub 乱数()
Dim 行 As Long
Dim 乱数 As Long
Dim 数(9) As Boolean
Randomize
For 行 = 1 To 10
Do
乱数 = Int(10 * Rnd)
Loop While 数(乱数)
Cells(行, 3).Value = 乱数 + 1
数(乱数) = True
Next
For 行 = 1 To 5
Do
乱数 = Int(10 * Rnd)
Loop Until 数(乱数)
Cells(行, 1).Value = 乱数 + 1
数(乱数) = False
Next
End Sub
--------------------------------------------------------------------------------
    • good
    • 0

No.2です。



>1つ飛ばし(A1,A3,…と言った具合)

要するに範囲指定だけの問題だと思います。
色々やり方はありますが・・・

Dim c As Range, myRng As Range, myNum As Long
Sub Sample2()
Dim myFlg(1 To 10) As Boolean
Set myRng = Range("A1:A9,C1:C9") '//★//
Randomize
For Each c In myRng
If c.Row Mod 2 = 1 Then '//★//
Do
myNum = Int(10 * Rnd + 1)
Loop Until myFlg(myNum) = False
c = myNum
myFlg(myNum) = True
End If
Next c
End Sub

Sub Sample3()
Dim myFlg(1 To 10) As Boolean
Set myRng = Range("A1,A3,A5,A7,A9,C1,C3,C5,C7,C9") '//★//
Randomize
For Each c In myRng
Do
myNum = Int(10 * Rnd + 1)
Loop Until myFlg(myNum) = False
c = myNum
myFlg(myNum) = True
Next c
End Sub

Sub Sample4()
Dim myFlg(1 To 10) As Boolean
Set myRng = Range("A1:C9") '//★//
Randomize
For Each c In myRng
If c.Row Mod 2 = 1 And c.Column Mod 2 = 1 Then '//★//
Do
myNum = Int(10 * Rnd + 1)
Loop Until myFlg(myNum) = False
c = myNum
myFlg(myNum) = True
End If
Next c
End Sub

※ 上記のどのマクロでも大丈夫だと思います。
「★」の行でA・C列の奇数行を指定しているだけです。m(_ _)m
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。ご丁寧な回答をいただきありがとうございました。

お礼日時:2017/11/17 21:42

それでしたら


--------------------------------------------------------------------------------
Sub 乱数2()
Dim 行 As Long
Dim 列 As Long
Dim 乱数 As Long
Dim 数(9) As Boolean
Randomize
For 行 = 1 To 5
For 列 = 1 To 3 Step 2
Do
乱数 = Int(10 * Rnd)
Loop While 数(乱数)
Cells(行, 列).Value = 乱数 + 1
数(乱数) = True
Next
Next
End Sub
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。ご丁寧な回答をいただきありがとうございました。

お礼日時:2017/11/17 21:42

こんにちは!



横からお邪魔します。
>A1〜A5,C1〜C5の10個・・・

Sub Sample1()
Dim c As Range, myNum As Long
Dim myFlg(1 To 10) As Boolean
Randomize
For Each c In Range("A1:A5,C1:C5")
Do
myNum = Int(10 * Rnd + 1)
Loop Until myFlg(myNum) = False
c = myNum
myFlg(myNum) = True
Next c
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!