ExcelのVBAを使って軽い心理学実験をやりたいです。
実験内容は様々な色で感情の言葉が1つずつランダムで表示され、色と言葉がマッチしているかを1〜5の5段階で回答させたいです。
言葉は『嬉しい』、『悲しい』、『イライラ』、『好き』の4つで色は赤、青、黄、ピンクの4つにしようと思います。
文字は10秒間表示され、後に15秒間回答の時間が与えられるというのを繰り返したいです。
回答は別のシートに記録されるようにすれば終わりです。
そのコードが以下のようになるのですが、どのような手順で作ればよいかがわかりません..
ExcelのVisual Basicを開いたところからの手順を教えてください。
初歩的な質問、申し訳ございません。
以下コード↓
Option Explicit
'Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long)
Const シート名 As String = "Sheet1"
Const セル番地 As String = "E2"
Const 待機時間 As Long = 4
Const 対照表 As String = "嬉しい,赤;悲しい,青;イライラ,黄;好き,ピンク"
Public カード()
Public セル As Range
Public キャンセル As Boolean
Public Sub スタート()
初期化
Dim i As Long
For i = LBound(カード) To UBound(カード)
If キャンセル Then
クリア
キャンセル = False
Exit Sub
End If
Dim d: d = Split(カード(i), ",")
セル.Value = d(0)
セル.Interior.Color = getColor(d(1))
Sleep 待機時間 * 1000
DoEvents
Next
クリア
End Sub
Public Sub 初期化()
Set セル = ThisWorkbook.Sheets(シート名).Range(セル番地)
Dim v As Variant: v = Split(対照表, ";")
ReDim カード(UBound(v))
Dim i As Long
For i = LBound(v) To UBound(v)
カード(i) = v(i)
Next
カード = ShuffleArray(カード)
End Sub
Public Sub クリア()
セル.Value = "終了"
セル.Interior.Color = vbBlack
End Sub
Function getColor(str) As Long
Dim ret As Long
Select Case str
Case "赤": ret = vbRed
Case "紫": ret = vbMagenta
Case "ピンク": ret = 11823615
Case "青": ret = vbBlue
Case "緑": ret = vbGreen
Case "黄": ret = vbYellow
Case "白": ret = vbWhite
Case "黒": ret = vbBlack
End Select
getColor = ret
End Function
Function ShuffleArray(InArray() As Variant) As Variant()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'https://stackoverflow.com/questions/47479970/shu …
' ShuffleArray
' This function returns the values of InArray in random order. The original
' InArray is not modified.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim N As Long, L As Long
Dim Temp As Variant
Dim J As Long
Dim arr() As Variant
Randomize
L = UBound(InArray) - LBound(InArray) + 1
ReDim arr(LBound(InArray) To UBound(InArray))
For N = LBound(InArray) To UBound(InArray)
arr(N) = InArray(N)
Next N
For N = LBound(InArray) To UBound(InArray)
J = CLng(((UBound(InArray) - N) * Rnd) + N)
Temp = arr(N)
arr(N) = arr(J)
arr(J) = Temp
Next N
ShuffleArray = arr
End Function
<ソースコード ”Sheet1”モジュール>
Private Sub CommandButton1_Click()
Call スタート
End Sub
Private Sub CommandButton2_Click()
キャンセル = True
End Sub
No.1ベストアンサー
- 回答日時:
1 excelにてAlt+F11で、VBEを開く
2 その左側のプロジェクトウィンドウと呼ばれる領域の、VBAProject(Book1)の項目を右クリックし、挿入、標準モジュールを選ぶ
3 プロジェクトウィンドウに追加されたModule1をダブルクリックし、VBEの右側領域のコード記述領域に、質問者様のコードの「<ソースコード ”Sheet1”モジュール>」より上の内容をコピペ
4 プロジェクトウィンドウのSheet1をダブルクリックし、コード記述領域に、コードの「<ソースコード ”Sheet1”モジュール>」より下の内容をコピペ
5 Excelシートの開発タブ(ない場合は、ファイル、オプション、リボンのユーザ設定で表示設定する)の、コントロール、挿入、ActiveXコントロールのボタンのアイコンをクリック
6 シート上を適当にマウスで四角を描くことで、CommandButton1を描写
7 5-6を繰り返し、CommandButton2を描写
8 開発タブのコントロールで、アクティブになっているデザインモードボタンを押して、非アクティブにする
以上で、ボタンを押せば開始するはずです
中止は、Ctrl+Breakです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
エクセルVBA(実行時エラー438...
-
データが入力されている隣のセ...
-
ダブルクリックすると現在の時...
-
メッセージを1度だけ表示したい。
-
VBAで丸をつけたいです。
-
エクセルのVBAでダブルクリック...
-
GrapeCityのSpreadの複数セルの...
-
EXCELマクロ 保護されているシ...
-
ハイパーリンクされているファ...
-
ExcelのVBAを使って軽い心理学...
-
マクロを使って画像を貼り付け
-
Excel VBA セルを指定個数ラン...
-
StringGridでの文字入力制限
-
【VBA】参照値を1ずつ増やして...
-
VBAで選択したセルのみ処理を実...
-
VBAについて教えてください。 E...
-
セル色を5秒間隔で変える
-
VBAのListBoxで複数選択して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
ハイパーリンクされているファ...
-
VBAで丸をつけたいです。
-
メッセージを1度だけ表示したい。
-
エクセルVBA(実行時エラー438...
-
ダブルクリックすると現在の時...
-
VBA セルに合わせて移動するが...
-
(VBA)アクティブセルを起点に...
-
Jtableの特定のセルの背景色や...
-
Windowsで動くVBAがmacOSで動か...
-
エクセルVBA セル選択後にカレ...
-
Excelのセル内にある図形を削除...
-
Excel VBA ダブルクリックで入...
-
セル色を5秒間隔で変える
-
StringGridでの文字入力制限
-
【VBA】参照値を1ずつ増やして...
-
マクロでのカーソル移動
おすすめ情報