回答編集履歴
2
書式の改善
answer
CHANGED
@@ -59,6 +59,7 @@
|
|
59
59
|
|
60
60
|
時間が出来たので、コードを追記しておきます。
|
61
61
|
|
62
|
+
```VBA
|
62
63
|
'関数入力案
|
63
64
|
Sub test1()
|
64
65
|
Dim rngTable As Range '更新対象の表
|
@@ -107,6 +108,7 @@
|
|
107
108
|
rngTable.Columns(2).Replace r.Cells(2).Value, r.Cells(1).Value
|
108
109
|
Next
|
109
110
|
End Sub
|
111
|
+
```
|
110
112
|
|
111
113
|
Vlookup関数の話があったのでそちらに引きずられましたが、
|
112
114
|
単に置換の話なので置換機能を使った方がコードが簡便ですね。
|
1
誤字の修正&コードの追記
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
> Excelだと、VLOOKUP関数を用いてできる、とのことですが
|
2
2
|
|
3
3
|
Index関数とMatch関数の組み合わせの間違いでは?
|
4
|
-
|
4
|
+
VLookup関数だと2列目を索引に出来ないので、
|
5
5
|
他のアプローチが必要かと思います。
|
6
6
|
|
7
7
|
> どのようにすればできるか、ヒントがあれば教えてください。
|
@@ -15,9 +15,9 @@
|
|
15
15
|
(他のアプローチももちろんあります。)
|
16
16
|
この操作を自動で行うよう、マクロを考えたらいいと思います。
|
17
17
|
|
18
|
-
変に、「プログラミングをするんだ」と、肩を張らず、
|
18
|
+
変に、「プログラミングをするんだ」と、肩肘を張らず、
|
19
19
|
エクセル君に任せられるところは任せて、
|
20
|
-
自分は手順だけを指示してやるように考えてみてはいかがでしょうか?
|
20
|
+
自分は作業の手順だけを指示してやるように考えてみてはいかがでしょうか?
|
21
21
|
|
22
22
|
流れとしては、
|
23
23
|
|
@@ -55,4 +55,64 @@
|
|
55
55
|
動作確認ができますし、
|
56
56
|
いろいろな案も出てくるでしょう。また、それを実際に動かして比べられますし、
|
57
57
|
高速化などの話もいろいろ話が出来るかなとは思いますが、
|
58
|
-
そこまでは望んでないのでしょうかね。
|
58
|
+
そこまでは望んでないのでしょうかね。
|
59
|
+
|
60
|
+
時間が出来たので、コードを追記しておきます。
|
61
|
+
|
62
|
+
'関数入力案
|
63
|
+
Sub test1()
|
64
|
+
Dim rngTable As Range '更新対象の表
|
65
|
+
Dim rngKey As Range '検索の索引になるセル範囲
|
66
|
+
Dim rngTemp As Range '数式を一時的に入れるセル範囲
|
67
|
+
Dim rngList As Range '変更の元となる一覧表
|
68
|
+
Dim strFormula As String '数式とする文字列
|
69
|
+
|
70
|
+
'セル範囲特定
|
71
|
+
With Sheets("学科").Range("A1").CurrentRegion
|
72
|
+
Set rngTable = .Cells
|
73
|
+
Set rngKey = Intersect(.Offset(1), .Columns(2))
|
74
|
+
Set rngTemp = Intersect(.Offset(1).EntireRow, .Columns(.Columns.Count + 1))
|
75
|
+
End With
|
76
|
+
With Sheets("学部").Range("A1").CurrentRegion
|
77
|
+
Set rngList = Intersect(.Cells, .Offset(1))
|
78
|
+
End With
|
79
|
+
|
80
|
+
'1行目の数式の作成(2行目以降はエクセル君に任せる)
|
81
|
+
strFormula = "=INDEX(" & rngList.Address(, , , True) & ",MATCH(" & _
|
82
|
+
rngKey(1).Address(False, False, , external:=True) & "," & _
|
83
|
+
rngList.Columns(2).Address(, , , True) _
|
84
|
+
& ",0),1)"
|
85
|
+
|
86
|
+
'数式の入力
|
87
|
+
rngTemp.Formula = strFormula
|
88
|
+
'値のみ転記
|
89
|
+
rngTemp.Copy
|
90
|
+
rngKey.PasteSpecial xlPasteValues
|
91
|
+
'作業列のクリア
|
92
|
+
rngTemp.ClearContents
|
93
|
+
End Sub
|
94
|
+
|
95
|
+
'繰返し置き換える案
|
96
|
+
Sub test2()
|
97
|
+
Dim rngList As Range
|
98
|
+
Dim rngTable As Range
|
99
|
+
Dim r As Range
|
100
|
+
|
101
|
+
With Sheets("学部").Range("A1").CurrentRegion
|
102
|
+
Set rngList = Intersect(.Cells, .Offset(1))
|
103
|
+
End With
|
104
|
+
Set rngTable = Sheets("学科").Range("A1").CurrentRegion
|
105
|
+
|
106
|
+
For Each r In rngList.Rows
|
107
|
+
rngTable.Columns(2).Replace r.Cells(2).Value, r.Cells(1).Value
|
108
|
+
Next
|
109
|
+
End Sub
|
110
|
+
|
111
|
+
Vlookup関数の話があったのでそちらに引きずられましたが、
|
112
|
+
単に置換の話なので置換機能を使った方がコードが簡便ですね。
|
113
|
+
(数式の場合は細かくセルを特定しなきゃいけないのと、
|
114
|
+
数式を示す文字列を作るのが面倒)
|
115
|
+
無かった時とかの例外処理も不要だったと思うけど、
|
116
|
+
一応デバッグとかしてみてください。
|
117
|
+
速度はどれが速いか興味深いですが、
|
118
|
+
そこまでテストする時間がないのでこの辺で^^;
|