質問編集履歴

5

前提に追記。

2023/01/16 04:26

投稿

koburon
koburon

スコア30

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

コードを追記。

2023/01/16 04:10

投稿

koburon
koburon

スコア30

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 11
37
+ For i = 3 To LastRow
34
38
  With Cells(i, "B")
35
39
 
36
40
  'VLookup関数を計算する

3

誤字を修正。

2023/01/16 04:06

投稿

koburon
koburon

スコア30

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("現在の社員名簿").Range("A3:B2191")
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
- 上述のコードを実行すると、異動者リストのB列に氏名を入れたいのですが、下の画像のように異動者リストのC列にA3の社員番号に対応する社員の氏名が最終行まで連続して出力されてしまいました。
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

問題を追記。

2023/01/16 04:04

投稿

koburon
koburon

スコア30

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("社員マスタ").Range("A3:B2191")
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
- Range("B3").Value = ret
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
- 上述のコードを実行すると、A3セルに入力さ社員番号を『社員マスタ』調べ該当する値がB3セルに入力されま
45
+ 上述のコードを実行すると、異動者リストのB列氏名を入れのですが、下の画像のように、異動者リストのC列にA3の社員番号に対応する社員の氏名が最終行ま連続し力されてしいました
46
+ オフセットの数字の設定に問題があるとは思いますが、その解釈で合っているでしょうか。
39
- エラーメッセージは発生していせんが、ここからさらに、対象とする社員番号範囲をA3セルら最終行まで、検索する右の範囲をEN列まで広げて、全てのセル値を貼り付けたいです。
47
+ 、この場合1列分し出力きていないので、検索する右の範囲をEN列まで広げて、全てのセル値を貼り付けたいです。
40
-
48
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-01-16/3a8b0d25-cb50-49da-b4ec-b5f36f83dfd4.jpeg)
41
- あるいはVLOOKUP関数にこだわらず範囲指定でコピー&ペーストする方法があれば、ご教示いただければ幸いです。よろしくお願いいたします。
49
+ VLOOKUP関数にこだわらず範囲指定でコピー&ペーストする方法があれば、ご教示いただければ幸いです。よろしくお願いいたします。
42
50
 
43
51
  ### 補足情報(FW/ツールのバージョンなど)
44
52
  PC:Windows11
45
53
  ソフト:Microsoft365 Excel
54
+ 参考URL:
46
- 参考URL:[VBAで別シートからVLookup](https://www.relief.jp/docs/excel-vba-vlookup-other-worksheet.html)
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

文法や誤字を修正。

2023/01/16 02:52

投稿

koburon
koburon

スコア30

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
- 『社員マスタ』A列と『異動者リスト』A列が一致した場合のみ、『社員マスタ』のA列~EN列をコピーして『異動者リスト』に貼り付けを行い、最終行までこれを繰り返すコードにしたいです。
14
+ 『社員マスタ』と『異動者リスト』A列を比較して社員番号が一致した場合のみ、『社員マスタ』のA列~EN列をコピーして『異動者リスト』に貼り付け、最終行までこれを繰り返すコードにしたいです。
15
- 『社員番号を検索し出力するマクロ』は別のVBAですでに作成しているので、ここではA列より右の値をコピー&ペーストするだけのマクロを作成します。
15
+ 『社員番号を検索し出力するマクロ』はすでに作成しているので、ここではA列より右の値をコピー&ペーストするだけのマクロを作成します。
16
16
 
17
17
  ### 試したこと
18
- 下記URLから、参考にしたサンプルコードをに作成しました。
18
+ 下記URLから、サンプルコードを参考して作成しました。
19
19
 
20
20
  ### 該当のソースコード
21
21
  ```VBA