
下記はAシートのコードで、C列をTargetとしています。C列に社員番号を入力し、Enterを押すと社員名に切り替わって表示され、存在しない番号の入力や直接入力(社員名を直接入力する人もいるため)でもエラーが出ないよう「On Error Resume Next」を追加しております。
Bシートに社員情報が記載されており、BシートのA列が社員番号、C列に社員名の一覧があります。
下記のコードの状態で、AシートのC列の複数行に貼り付け、もしくは複数行の値を一気に削除(Deleteを押す)すると、両者とも1個目のセルのみがN/Aとなってしまいます。
1個目のセルにも問題なく張り付け、および削除が成功するコードを教えて頂けますでしょうか。
<現在のAシートのコード>
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 3 Then
With Cells(Target.Row, Target.Column)
.Value = WorksheetFunction.VLookup(Target.Cells, Worksheets("B").Range("A2:B5001"), 2, False)
End With
End If
On Error GoTo 0
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは
Changeイベントで渡されるTargetはセル範囲です。
>AシートのC列の複数行に貼り付け、もしくは複数行の値を一気に
>削除(Deleteを押す)すると、両者とも1個目のセルのみが
>N/Aとなってしまいます。
ご提示のコードは単独セルが変更された場合を想定していて、複数セルの変更に対応していないため、セル範囲を渡された場合には処理できません。
複数行に貼り付けた場合に、1行目が#N/Aになるだけで、2行目以降は処理されていないものと想像します。
あるいは、B2:C5のようなセル範囲にコピペした場合には、何も処理されないことになっていませんか?
>1個目のセルにも問題なく張り付け、および削除が成功する
>コードを教えて頂けますでしょうか。
1個目が処理できるようにするだけでは、本当のご要望に応えていないのではないかと思います。
変更のあった全部のセルに対応なさりたいのでしょうから、コードを複数セルに対応可能なように修正する必要があります。
簡単な方法の一例として、Targetの範囲内のセルに対してループ処理をすれば良いです。
ご質問文からは「一覧表にない値を入力した場合にどうするのか」が不明ですが、その場合には「何もしない」と仮定してもよいのなら、以下ご参考までに。
(現実的には、A列になければ、B列を検索して同じものがなければ「該当無し」などの表示にした方が良いのかも知れませんけれど・・)
Private Sub Worksheet_ChangeF(ByVal Target As Range)
Dim c, r
Set r = Worksheets("B").Range("A2:B5001")
Application.EnableEvents = False
For Each c In Target.Cells
If c.Column = 3 And c.Value <> "" Then
If Not r.Columns(1).Find(c.Value, , xlValues, xlWhole) Is Nothing Then
c.Value = WorksheetFunction.VLookup(c.Value, r, 2, False)
End If
End If
Next c
Application.EnableEvents = True
End Sub
No.3
- 回答日時:
本来作業以外の操作がC列に対して行なわれた場合を
排除する必要があります。
Targetのセル数が1以外は抜ける処理を入れましょう。

No.1
- 回答日時:
("A2:B5001"), 2, False)が相対アドレス指定になってるからでは?
絶対アドレスにすれば良いと思います。
("A2:B5001") → ("$A$2:$B$5001")
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBAで重複した値のセルに色付けをしたい 1 2022/11/02 16:12
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
このQ&Aを見た人はこんなQ&Aも見ています
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
-
4
すでにコピーした情報を貼り付けたらイベントを発生
PowerPoint(パワーポイント)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
エクセルVBAのDeleteキーによるエラー
Excel(エクセル)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
エクセルVBA/イベント発生でコピペ不能はなぜ?
Excel(エクセル)
-
9
エクセル VBA Worksheet_Changeとコピー&ペースト
Excel(エクセル)
-
10
エクセルVBA 複数行にまたがっている選択を判定するには
Excel(エクセル)
-
11
エクセルVBA セルの入力後「Delete」キーを押したか判断するプログラム
Excel(エクセル)
-
12
”戻り値”が変化したときに、マクロを実行したい
Visual Basic(VBA)
-
13
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
14
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
15
エクセルで、セルに値を入力して確定した時(フォーカスが隣に移動した時)に発生するイベントを教えてください!
Excel(エクセル)
-
16
VBA/Worksheet_Changeがうまくいかない
PowerPoint(パワーポイント)
-
17
worksheet_changeがループする
PowerPoint(パワーポイント)
-
18
VBAでセルがコピーされているか判定したい
Excel(エクセル)
-
19
教えて For Each R In Target
Excel(エクセル)
-
20
Worksheet.Change イベントを他のシートにも反映させる方法?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
VBAで変数の数/変数名を動的に...
-
Count Ifのセルの範囲指定に変...
-
VBA別シートの最終行の次行へ転...
-
【VBA】特定の条件でセルをコピー
-
【VBA】データを各シートに自動...
-
VBAでEXCELから固定長...
-
VBAでのピボットテーブルの範囲...
-
RemoveDuplicatesメソッドにつ...
-
VBA 別ブックからの転記の高速...
-
Excel VBA オートフィルターで...
-
Excel VBA での商品管理について
-
エクセルで入力した内容の消去方法
-
VBA データ抽出 速度改善
-
グラフマクロで系列を変数にす...
-
2010 Excel VBA 測定結果を貼...
-
100万件越えCSVから条件を満た...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
マクロ実行後に別シートの残像...
-
VBA別シートの最終行の次行へ転...
-
Count Ifのセルの範囲指定に変...
-
VBA 別ブックからの転記の高速...
-
Changeイベントで複数セルへの...
-
【VBA】特定の条件でセルをコピー
-
100万件越えCSVから条件を満た...
-
楽天RSSからエクセルVBAを使用...
-
複数シートの複数列に入力され...
-
Excel VBA オートフィルターで...
-
VBAで変数の数/変数名を動的に...
-
Unionでの他のシートの参照につ...
-
Excel2013で切り取り禁止
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
VBA 最終行を選んだシートにコ...
-
アクセスからエクセルへ出力時...
おすすめ情報