これ何て呼びますか

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

A 回答 (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です
    • good
    • 0
この回答へのお礼

本当に助かりました!
ご教示ありがとうございます!!

お礼日時:2021/01/21 20:15

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