テニス等のダブルスゲームのペアを決めるための乱数表を作りたいと思い、Web検索したところrio_dさんが作成されたExcelマクロプログラムを見つけました(http://oshiete1.goo.ne.jp/kotaeru.php3?q=1388951)。記載されている通りにマクロを作成しましたが、実行すると「SubまたはFunctionが定義されていません」というコンパイルエラーメッセージが出てしまいます。rio_dさんのマクロプログラムの最初に「Sub 乱数表作成()」がありますが、この( )の中に何かを入力する必要があるのでしょうか。この他にも空白の( )がいくつかあります。マクロについて全くの素人で何も分かりません。このrio_dさんのマクロプログラムを実行する方法を素人にも分かるように解説していただければ幸いです。
【rio_dさんが書かれたマクロは以下の通りです】
<マクロ準備編>
(1)新規ブックを開き、とりあえず名前をつけて保存します。『てにす乱数表.xls』にしましょうか。
(2)メニューバーから、ツール→マクロ→Visual Basic Editorを選択します。
Visual Basic Editorが起動します。
(3)左側に「VBAProject(てにす乱数表).xls」というのがあると思います。
ツリー状になっていて、左の[+]で展開していくと、「ThisWorkbook」という
ものが表示されると思います。
(4)その「ThisWorkbook」をダブルクリックします。
右側に「~~.xls - Thisworkbook(コード)」というウインドウが表示されます。
(5)そこに、下記のコードをコピー&ペーストしてください。
(6)Visual Basic Editorを閉じます。
(7)ここで一旦上書き保存しておきましょう。
<データ準備編>
(1)セルA1に、コート数を入力してください。数字でお願いします。
(2)セルB1から横方向に、人数を入れていってください。
(3)セルA2から縦方向に、試合数を入れていってください。
こんなかんじ
_A__B_C_D__E__F__G__H__I__J__K
1| 3 5 6 7 8 9 10 11 12 13 14…
2| 1
3| 2
4| 3
5| 4
6| 5
7| 6
:
<データ作成編>
(1)メニューバーから、ツール→マクロ→マクロ と選択してください。
(2)実行するマクロの一覧に「ThisWorkbook.乱数表作成」というのがでるので、
それを選択して「実行」してください。
(3)砂時計が消えたら完成です。
このマクロは実行するたびに結果が変わります。気に入らなかったら何度でも
やり直してください。
また、全セルを消去すれば、データ準備からやり直すことも出来ます。
好きな表をいくつでも作ってください。
ちなみに100人とかデータ数がえらく膨大になると、なかなか計算が終わりませんので。
その場合は気長に待ってください。
'-----マクロ ここから-----
Sub 乱数表作成()
Dim iRow As Integer
Dim iCol As Integer
Dim iCnt As Integer
Dim iCnt2 As Integer
Dim iTmp As Integer
Dim sNum() As String
Dim bChk() As Boolean
Dim bChk2() As Boolean
Dim bFull As Boolean
Dim iCourt As Integer
iCol = 2
Do Until Cells(1, iCol) = ""
iRow = 2
If Cells(1, 1) * 4 > Cells(1, iCol) Then
iCourt = Round(Cells(1, iCol) / 4 - 0.5, 0)
Else
iCourt = Cells(1, 1)
End If
ReDim sNum(iCourt * 4 - 1)
ReDim bChk(Cells(1, iCol))
ReDim bChk2(Cells(1, iCol))
For iCnt = 1 To Cells(1, iCol)
bChk(iCnt) = True
bChk2(iCnt) = True
Next iCnt
Do Until Cells(iRow, 1) = ""
iCnt = 0
Do Until iCnt = iCourt * 4
iTmp = Round(Rnd(Second(Now)) * Cells(1, iCol) + 0.5, 0)
If bChk(iTmp) And bChk2(iTmp) Then
sNum(iCnt) = "[" & Trim(Str(iTmp)) & "]"
iCnt = iCnt + 1
bChk(iTmp) = False
bChk2(iTmp) = False
bFull = False
For iCnt2 = 1 To Cells(1, iCol)
bFull = bFull Or bChk(iCnt2)
Next iCnt2
If bFull = False Then
For iCnt2 = 1 To Cells(1, iCol)
bChk(iCnt2) = True
Next iCnt2
End If
End If
Loop
Cells(iRow, iCol) = sNum(0)
For iCnt = 1 To iCourt * 4 - 1
Select Case iCnt Mod 4
Case 0
Cells(iRow, iCol) = Cells(iRow, iCol) & Chr(10) & sNum(iCnt)
Case 2
Cells(iRow, iCol) = Cells(iRow, iCol) & ":" & sNum(iCnt)
Case Else
Cells(iRow, iCol) = Cells(iRow, iCol) & sNum(iCnt)
End Select
Next iCnt
For iCnt = 1 To Cells(1, iCol)
bChk2(iCnt) = True
Next iCnt
iRow = iRow + 1
Loop
iCol = iCol + 1
Loop
End Sub
'-----マクロ ここまで-----
No.1ベストアンサー
- 回答日時:
> この( )の中に何かを入力する必要があるのでしょうか?
関数なので、カッコは、このままで構いません。【入力不要】
rio_dさんの通りに、マクロを入力して実行させたところ、
下記のような結果になりました。
3 5 6 7 8
1 [4][3]:[2][1] [1][5]:[2][3] [1][2]:[7][3] [7][3]:[6][1]
[2][4]:[5][8]
2 [5][4]:[1][3] [6][4]:[3][5] [4][5]:[6][1] [3][5]:[1][6]
[4][8]:[2][7]
3 [5][2]:[1][3] [2][4]:[1][6] [2][3]:[4][5] [7][6]:[8][3]
[4][2]:[5][1]
4 [4][2]:[5][3] [2][5]:[3][6] [6][7]:[4][1] [1][7]:[4][2]
[6][5]:[8][3]
5 [5][2]:[4][1] [4][1]:[5][6] [6][3]:[2][5] [8][7]:[6][4]
[3][1]:[2][5]
6 [5][4]:[1][3] [1][4]:[3][2] [7][1]:[4][2] [4][8]:[2][3]
[5][6]:[1][7]
DIooggooID様
驚くほど素早く回答していただき、有り難うございました。こんなに早く回答をいただけるとは思っていませんでした。大変感謝申し上げます。どうも私のMacではExcel(Office2004)のマクロが正常に作動しないようです。マクロを実行すると、常に「SubまたはFunctionが定義されていません」が表示され、Visual Basic Editorの「~~.xls - Thisworkbook(コード)」画面の最上段に表示される「Sub 乱数表作成( )」の部分がカラー表示になってしまいます。残念ですが、諦めるしか、なさそうですね。
No.5
- 回答日時:
>iCourt = Round(Cells(1, iCol) / 4 - 0.5, 0)がエラーになる原因のようです。
Excel for Macの環境がないのでわかりませんが、Round関数がないのでしょうか?ちょっと考えにくいですが。ヘルプにもRound関数は載ってませんか?
あるいは、
Sub aa()
MsgBox Round(1.5, 0)
End Sub
で、本当にRoundが使えないのかを確認してみてください。
使えないのならとりあえず、
iCourt = Round(Cells(1, iCol) / 4 - 0.5, 0)
をコメント化してコピーを進めていき、エラーの度に問題の行をコメント化して全体がコピーできるかを確認してはどうでしょう?あとでコメント化した部分を個別に解決することにして。
しかし、一番速くて簡単なのは、お近くにいるWindowsのExcelを持っている人にマクロの実行をお願いすることかもしれませんが。
cistronezk様
何回も御回答いただき、誠に有り難うございます。
Sub aa()
MsgBox Round(1.5, 0)
End Sub
で実行してもダメで、Roundが使えないようです。WindowsのExcelでマクロを実行するのが手っ取り早そうですね。ご親切に御回答していただき、感謝の言葉もありません。
No.3
- 回答日時:
>Sub 乱数表作成()
>End Sub
>はエラーになりませんでした
では、そのサブルーチンへ、エラーになっているサブルーチンの中身を少しずつ(小さな処理単位で)コピーしては実行を繰り返してみてはどうでしょう?
ある程度、エラーの原因が絞り込めるかもしれません。
cistronezk様
ご親切な回答、有り難うございました。大変恐縮しています。御指摘に従って少しずつペーストしていきましたところ、16行目の If Cells(1, 1) * 4 > Cells(1, iCol) Then
iCourt = Round(Cells(1, iCol) / 4 - 0.5, 0)がエラーになる原因のようです。よく見ると、Roundが色字に変わっていますので、このコマンドがいけないと言うことかも知れません。
No.2
- 回答日時:
>記載されている通りにマクロを作成しましたが、実行すると「SubまたはFunctionが定義されていません」というコンパイルエラーメッセージが出てしまいます。
そもそも、中身が何も書かれていないサブルーチン
Sub 乱数表作成()
End Sub
は、エラーになりますか?
もしなるなら、単なるヤマカンですが、サブルーチン名を漢字ではなく、アルファベットに変えてみては?
cistronezk様
コメントを頂き有り難うございました。
Sub 乱数表作成()
End Sub
はエラーになりませんでした。また、漢字をアルファベットに変えてみましたが、やはり「SubまたはFunctionが定義されていません」が表示されました。私の知識が足らないことから、幼稚なやり取りになってしまい、申し訳ありません。基本的な設定等に不都合があるのかも知れませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
このQ&Aを見た人はこんなQ&Aも見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
冬の健康法を教えて!
温度変化が大きくなり、風邪をひきやすいこれからの季節。 どんなことに気をつけていますか?
-
テニス 乱数表
PowerPoint(パワーポイント)
-
エクセルで「1~15」の乱数表を作りたい。
その他(パソコン・スマホ・電化製品)
-
テニスの乱数表作成
PowerPoint(パワーポイント)
-
-
4
重複しない乱数表を作る関数について
その他(暮らし・生活・行事)
-
5
テニス大会ダブルスの乱数表の作成をお願いしたい
PowerPoint(パワーポイント)
-
6
バドミントン・ミックスダブルス乱数表について
数学
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel・Word リサーチ機能を無...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
Excel_マクロ_現在開いているシ...
-
Excel マクロでShearePoint先の...
-
エクセルに張り付けた写真のフ...
-
特定文字のある行の前に空白行...
-
ExcelのVBA。public変数の値が...
-
wordを起動した際に特定のペー...
-
エクセルで縦に並んだデータを...
-
EXCELマクロでのThisisWor...
-
ExcelVBAでPDFを閉じるソース
-
Excel VBAからAccessマクロを実...
-
エクセルで別のセルにあるふり...
-
エクセルマクロでワードの一ペ...
-
エクセル マクロ 指定日の指定...
-
ソース内の行末に\\
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBA。public変数の値が...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
Excel VBAからAccessマクロを実...
-
Excel_マクロ_現在開いているシ...
-
マクロ実行時、ユーザーフォー...
-
エクセルで別のセルにあるふり...
-
ソース内の行末に\\
-
特定文字のある行の前に空白行...
-
マクロで空白セルを詰めて別シ...
-
wordを起動した際に特定のペー...
-
【EXCEL VBA】オートシェイプを...
おすすめ情報