下記は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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
エクセルVBAのDeleteキーによるエラー
Excel(エクセル)
-
-
4
すでにコピーした情報を貼り付けたらイベントを発生
PowerPoint(パワーポイント)
-
5
複数処理 Worksheet_Change(ByVal Target As Range)
Visual Basic(VBA)
-
6
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
7
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
-
8
エクセルVBA/イベント発生でコピペ不能はなぜ?
Excel(エクセル)
-
9
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
10
エクセルVBA intersect columnsの複数列のやり方
Visual Basic(VBA)
-
11
エクセルVBA セルの入力後「Delete」キーを押したか判断するプログラム
Excel(エクセル)
-
12
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
13
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
14
【VBA】Worksheet_changeイベントで特定のキーが押されたときだけ無効にしたい
Visual Basic(VBA)
-
15
Excel VBA 標準モジュール内でイベント
その他(Microsoft Office)
-
16
教えて For Each R In Target
Excel(エクセル)
-
17
エクセル VBAで複数セル選択時エラーになる問題
Visual Basic(VBA)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
Worksheet_Changeの内容を標準モジュールから実行するには?
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
グラフマクロで系列を変数にす...
-
100万件越えCSVから条件を満た...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
Count Ifのセルの範囲指定に変...
-
Excelで横書き50行の漢字テス...
-
エクセル 複数シートの同一セ...
-
VBAを使って複数のシートから抽...
-
VBA 別ブックからの転記の高速...
-
vba 連続するとうまく作動せず
-
【VBA】特定の条件でセルをコピー
-
Excel VBA オートフィルターで...
-
別シートから年齢別の件数をカ...
-
VB2005でExcelのグラフのデータ...
-
ExcelのVBA ListBox.RowSource...
-
Excel2013で切り取り禁止
-
VBA データ抽出 速度改善
-
上書き、修正、転記
-
VBA webクエリをループさせる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
VBAコードについて
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
VBA 別ブックからの転記の高速...
-
【VBA】特定の条件でセルをコピー
-
VBA別シートの最終行の次行へ転...
-
100万件越えCSVから条件を満た...
-
VBAで変数の数/変数名を動的に...
-
Changeイベントで複数セルへの...
-
楽天RSSからエクセルVBAを使用...
-
Count Ifのセルの範囲指定に変...
-
Unionでの他のシートの参照につ...
-
Excel2013で切り取り禁止
-
Excel VBA オートフィルターで...
-
VBA 実行時エラー1004 rangeメ...
-
複数シートの複数列に入力され...
-
VBA Userformで一部別シートに...
-
ExcelのVBマクロを、バックグラ...
おすすめ情報