回答編集履歴

3

コードの誤りを修正

2021/04/05 08:20

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -26,7 +26,9 @@
26
26
 
27
27
  ### 注意点
28
28
 
29
+ Application.OnKeyは他のシートを開いていても反応してしまうため、
30
+
29
- 他のブックを開いていても反応してしまうため、対象のシートが表示されたときにマクロを登録し、対象のシート以外が表示されたときにマクロを解除する…という手法がよく使われるようです。
31
+ 対象のシートが表示されたときにマクロを登録し、対象のシート以外が表示されたときにマクロを解除する…という手法がよく使われるようです。
30
32
 
31
33
 
32
34
 
@@ -40,7 +42,7 @@
40
42
 
41
43
  Public Sub Worksheet_Activate
42
44
 
43
- Application.OnKey "~", "OnKey"
45
+ Application.OnKey "~", "Sheet1.OnKey"
44
46
 
45
47
  End Sub
46
48
 

2

Application.OnKeyについての注意点を追記

2021/04/05 08:20

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -21,6 +21,66 @@
21
21
  Application.Onkeyメソッドを使用することで、特定のキーが入力されたことを感知できます。
22
22
 
23
23
  [参考](https://pc.arthhuman.com/enter/)
24
+
25
+
26
+
27
+ ### 注意点
28
+
29
+ 他のブックを開いていても反応してしまうため、対象のシートが表示されたときにマクロを登録し、対象のシート以外が表示されたときにマクロを解除する…という手法がよく使われるようです。
30
+
31
+
32
+
33
+ #### シートモジュール(シート名はSheet1とします)
34
+
35
+ ```VBA
36
+
37
+ 'Sheet1が表示されたときに実行
38
+
39
+ 'EnterキーにOnKeyプロシージャを紐づける
40
+
41
+ Public Sub Worksheet_Activate
42
+
43
+ Application.OnKey "~", "OnKey"
44
+
45
+ End Sub
46
+
47
+
48
+
49
+ 'Sheet1以外が表示されたときに実行
50
+
51
+ 'EnterキーへのOnKeyプロシージャの紐づけを削除する
52
+
53
+ Private Sub Worksheet_Deactivate
54
+
55
+ Application.OnKey "~"
56
+
57
+ End Sub
58
+
59
+
60
+
61
+ Private Sub OnKey
62
+
63
+ '色々な処理
64
+
65
+ End Sub
66
+
67
+ ```
68
+
69
+
70
+
71
+ #### ブックモジュール
72
+
73
+ ```VBA
74
+
75
+ 'Sheet1が表示されたときに実行されるプロシージャを、ブックを読込時にも無理やり実行する
76
+
77
+ Private Sub Workbook_Open()
78
+
79
+ Call Sheets("Sheet1").Worksheet_Activate
80
+
81
+ End Sub
82
+
83
+ ```
24
84
 
25
85
 
26
86
 
@@ -56,7 +116,7 @@
56
116
 
57
117
  ## 4. D列の値をF列に転記する
58
118
 
59
- 特定のセルの値は `Range(v(行番号, 列番号).).Value` で取得出来ます。
119
+ 特定のセルの値は `Range(v(行番号, 列番号)).Value` で取得出来ます。
60
120
 
61
121
  例えばセルD10の値を取得したければ `Range(v(4, 10)).Value` になりますが、今回は行番号が変動します。どう書けば良いでしょうか?考えてみて下さい。
62
122
 

1

どの機能を使えば良いか、ヒントを追記

2021/04/05 08:06

投稿

Automatic9045
Automatic9045

スコア313

test CHANGED
@@ -6,12 +6,64 @@
6
6
 
7
7
 
8
8
 
9
- - Application.OnkeyメソッドでEnterキーの入力を感知
9
+ - 1. Enterキーの入力を感知
10
10
 
11
- - 今選択されているセルを取得し、F10〜F140のいずれかであれば
11
+ - 2. 今選択されているセルを取得
12
12
 
13
+ - 3. F10〜F140のいずれかであれば
14
+
13
- - D列の値をF列に転記する
15
+ - 4. D列の値をF列に転記する
14
16
 
15
17
 
16
18
 
19
+ ## 1. Enterキーの入力を感知
20
+
21
+ Application.Onkeyメソッドを使用することで、特定のキーが入力されたことを感知できます。
22
+
17
- [こちら](https://pc.arthhuman.com/enter/)のページが参考になります。
23
+ [参考](https://pc.arthhuman.com/enter/)
24
+
25
+
26
+
27
+ ## 2. 今選択されているセルを取得
28
+
29
+ ActiveCellプロパティでアクティブセル(現在選択されているセル)の情報を取得出来ます。
30
+
31
+ [参考](https://vbabeginner.net/get-position-operate-activecell/)
32
+
33
+
34
+
35
+ ## 3. F10〜F140のいずれかであれば
36
+
37
+ ActiveCell.Addressプロパティでアクティブセルの位置情報を取得出来ます。
38
+
39
+
40
+
41
+ ### ActiveCell.Address.Rowプロパティ…行番号を取得
42
+
43
+ 今回の場合は、この値が10〜140の範囲にあれば良いですね。
44
+
45
+ If文を使って、条件式を書いてみて下さい。
46
+
47
+
48
+
49
+ ### ActiveCell.Address.Columnプロパティ…列番号を取得
50
+
51
+ 今回の場合はF列で、Aが1、Bが2、…ときてFが6ですから、この値が6であれば良いですね。
52
+
53
+ これも同様に、If文を使って条件式を書いてみて下さい。
54
+
55
+
56
+
57
+ ## 4. D列の値をF列に転記する
58
+
59
+ 特定のセルの値は `Range(v(行番号, 列番号).).Value` で取得出来ます。
60
+
61
+ 例えばセルD10の値を取得したければ `Range(v(4, 10)).Value` になりますが、今回は行番号が変動します。どう書けば良いでしょうか?考えてみて下さい。
62
+
63
+
64
+
65
+ セルの値の設定については、先程出てきたValueプロパティに代入すればOKです。
66
+
67
+ 例えばF1の値を「hoge」にしたければ `Range(v(6, 1)).Value = "hoge"` となります。
68
+
69
+ 同様にこれもどう書けば良いか考えてみて下さい。