質問編集履歴
5
前提に追記。
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
1. 社員マスタ
|
5
5
|
2. 異動者リスト
|
6
6
|
『異動者リスト』A列に、ある日に異動した社員の『社員番号』を記入しています。
|
7
|
-
※『社員マスタ』『異動者リスト』の表はA列~EN列まであり、全
|
7
|
+
※『社員マスタ』『異動者リスト』の表はA列~EN列まであり、2行目の項目名は全て同じで、各セルは同じ列幅、同じフォントの大きさに調整しています。
|
8
8
|
|
9
9
|
【社員マスタ】
|
10
10
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-16/954796ce-ffe6-41a6-bbdb-52b98c13343d.jpeg)
|
4
コードを追記。
test
CHANGED
File without changes
|
test
CHANGED
@@ -29,8 +29,12 @@
|
|
29
29
|
Dim ret As String
|
30
30
|
ret = WorksheetFunction.VLookup(key, tbl, 2, False)
|
31
31
|
|
32
|
+
'最終行を取得する
|
33
|
+
Dim LastRow As Long
|
34
|
+
LastRow = Worksheets("異動者リスト").Cells(Rows.Count, "A").End(xlUp).Row
|
35
|
+
|
32
36
|
'ループする
|
33
|
-
For i = 3 To
|
37
|
+
For i = 3 To LastRow
|
34
38
|
With Cells(i, "B")
|
35
39
|
|
36
40
|
'VLookup関数を計算する
|
3
誤字を修正。
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
```VBA
|
22
22
|
Sub 別のシートからVLookup()
|
23
23
|
Dim tbl As Range
|
24
|
-
Set tbl = Sheets("
|
24
|
+
Set tbl = Sheets("社員マスタ").Range("A3:B2191")
|
25
25
|
Dim key As Long
|
26
26
|
key = Range("A3").Value
|
27
27
|
|
@@ -42,7 +42,7 @@
|
|
42
42
|
```
|
43
43
|
|
44
44
|
### 発生している問題・エラーメッセージ
|
45
|
-
|
45
|
+
異動者リストのB列に氏名を入れたいのですが、上述のコードを実行すると、下の画像のように『異動者リスト』のC列にA3の社員番号に対応する社員の氏名が最終行まで連続して出力されてしまいました。
|
46
46
|
オフセットの数字の設定に問題があるとは思いますが、その解釈で合っているでしょうか。
|
47
47
|
また、この場合1列分しか出力できていないので、検索する右の範囲をEN列まで広げて、全てのセル値を貼り付けたいです。
|
48
48
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-16/3a8b0d25-cb50-49da-b4ec-b5f36f83dfd4.jpeg)
|
2
問題を追記。
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,13 +15,13 @@
|
|
15
15
|
『社員番号を検索し出力するマクロ』はすでに作成しているので、ここではA列より右の値をコピー&ペーストするだけのマクロを作成します。
|
16
16
|
|
17
17
|
### 試したこと
|
18
|
-
下記URLから、サンプルコードを
|
18
|
+
下記2つのURLから、サンプルコードを組み合わせて作成しました。
|
19
19
|
|
20
20
|
### 該当のソースコード
|
21
21
|
```VBA
|
22
22
|
Sub 別のシートからVLookup()
|
23
23
|
Dim tbl As Range
|
24
|
-
Set tbl = Sheets("社員
|
24
|
+
Set tbl = Sheets("現在の社員名簿").Range("A3:B2191")
|
25
25
|
Dim key As Long
|
26
26
|
key = Range("A3").Value
|
27
27
|
|
@@ -29,19 +29,29 @@
|
|
29
29
|
Dim ret As String
|
30
30
|
ret = WorksheetFunction.VLookup(key, tbl, 2, False)
|
31
31
|
|
32
|
+
'ループする
|
33
|
+
For i = 3 To 11
|
32
|
-
|
34
|
+
With Cells(i, "B")
|
35
|
+
|
36
|
+
'VLookup関数を計算する
|
37
|
+
.Offset(0, 1) = ret
|
38
|
+
End With
|
39
|
+
Next
|
33
40
|
|
34
41
|
End Sub
|
35
42
|
```
|
36
43
|
|
37
44
|
### 発生している問題・エラーメッセージ
|
38
|
-
上述のコードを実行すると、
|
45
|
+
上述のコードを実行すると、異動者リストのB列に氏名を入れたいのですが、下の画像のように、異動者リストのC列にA3の社員番号に対応する社員の氏名が最終行まで連続して出力されてしまいました。
|
46
|
+
オフセットの数字の設定に問題があるとは思いますが、その解釈で合っているでしょうか。
|
39
|
-
|
47
|
+
また、この場合1列分しか出力できていないので、検索する右の範囲をEN列まで広げて、全てのセル値を貼り付けたいです。
|
40
|
-
|
48
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-16/3a8b0d25-cb50-49da-b4ec-b5f36f83dfd4.jpeg)
|
41
|
-
|
49
|
+
VLOOKUP関数にこだわらず範囲指定でコピー&ペーストする方法があれば、ご教示いただければ幸いです。よろしくお願いいたします。
|
42
50
|
|
43
51
|
### 補足情報(FW/ツールのバージョンなど)
|
44
52
|
PC:Windows11
|
45
53
|
ソフト:Microsoft365 Excel
|
54
|
+
参考URL:
|
46
|
-
|
55
|
+
- [VBAで別シートからVLookup](https://www.relief.jp/docs/excel-vba-vlookup-other-worksheet.html)
|
56
|
+
- [【VBA】VLookupを最終行まで繰り返し使う【Endを使います】](https://daitaideit.com/vba-vlookup-to-last-row/)
|
47
57
|
|
1
文法や誤字を修正。
test
CHANGED
File without changes
|
test
CHANGED
@@ -11,11 +11,11 @@
|
|
11
11
|
【異動者リスト】
|
12
12
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-16/47298b41-9d13-46c2-8717-102ebf8a1a2a.jpeg)
|
13
13
|
### 実現したいこと
|
14
|
-
『社員マスタ』
|
14
|
+
『社員マスタ』と『異動者リスト』A列を比較して社員番号が一致した場合のみ、『社員マスタ』のA列~EN列をコピーして『異動者リスト』に貼り付けて、最終行までこれを繰り返すコードにしたいです。
|
15
|
-
『社員番号を検索し出力するマクロ』は
|
15
|
+
『社員番号を検索し出力するマクロ』はすでに作成しているので、ここではA列より右の値をコピー&ペーストするだけのマクロを作成します。
|
16
16
|
|
17
17
|
### 試したこと
|
18
|
-
下記URLから、
|
18
|
+
下記URLから、サンプルコードを参考にして作成しました。
|
19
19
|
|
20
20
|
### 該当のソースコード
|
21
21
|
```VBA
|