回答編集履歴
3
コードの誤りを修正
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についての注意点を追記
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(行番号, 列番号)
|
119
|
+
特定のセルの値は `Range(v(行番号, 列番号)).Value` で取得出来ます。
|
60
120
|
|
61
121
|
例えばセルD10の値を取得したければ `Range(v(4, 10)).Value` になりますが、今回は行番号が変動します。どう書けば良いでしょうか?考えてみて下さい。
|
62
122
|
|
1
どの機能を使えば良いか、ヒントを追記
test
CHANGED
@@ -6,12 +6,64 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
-
|
9
|
+
- 1. Enterキーの入力を感知
|
10
10
|
|
11
|
-
- 今選択されているセルを取得
|
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
|
-
[
|
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
|
+
同様にこれもどう書けば良いか考えてみて下さい。
|