VBA changeイベントにてVLOOKUPで検索する方法とエラーの
VBA changeイベントにてVLOOKUPで検索する方法とエラーの場合の方法
VBAは半年ほど独学で勉強してきましたが、どうにもならなくなったので、質問させてください。
以下、1つのブックです。
シート1<管理台帳>
4行目を入力行として、
B C D E F G H I J K L
伝票番号、日付、顧客名、顧客住所、集配地名称、集配地住所、数量A、数量B、数量C、備考、コメント
などを入力。
マクロを使い、5行目以降にリストを追加。
(これはなんとか自分で作成できました)
シート2<住所録>
おもな顧客の住所録。
シート1のD4セルに顧客名を入力すると、このリストから検索して、住所、主な集配地名称、住所をE4~G4に。
(これもなんとかできました。)
ここからがどうしてもできないのですが。
シート3<A伝票>(シート1の数量Aの集計作業等の為)
K列に伝票番号を入力すると、シート1<管理台帳>から検索して、
L列に顧客名、M列に数量A、N列に備考、O列にコメントを表示したいんですが。
どうしてもうまくいきません。
自分で考えた末、伝票番号が文字列になっているのがいけないのかな?と思ったのですが・・・。
どう対処したらいいのかわかりません。
伝票番号は10桁。0からはじまるものもあるので、文字列として扱いたいです。
また、もし、伝票番号シート1に入力されていなかった場合、エラーメッセージを表示したいのですが・・・。
いろいろ試してみましたが、知識不足でなんともなりませんでした。
どなたかご指導いただけませんか??
めちゃくちゃですが、下に自分なりに作ったコードをのせます。
新年度から使いたい、と思っていたものなので、少し、急いでおります。
どうか、よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
'伝票を K列に入力すると、管理台帳から検索。
Dim rang1 As Variant
Dim rang2 As Variant
Dim 顧客名 As String
Dim 数量 As String
Dim 備考 As String
Dim コメント As String
Set rang1 = Columns("k")
Set rang2 = Worksheets("管理台帳").Range("B5:X20").Value
If Intersect(Target, rang1) Is Nothing Then Exit Sub
Application.EnableEvents = False
顧客名 = Application.WorksheetFunction.VLookup(Target.Value, rang2, 2, 0)
If TypeName(顧客名) <> "error" Then
Target.Offset(, 1) = 顧客名
数量 = Application.WorksheetFunction.VLookup(Target.Value, rang2, 12, 0)
If TypeName(数量) <> "error" Then
Target.Offset(, 2) = 数量
備考 = Application.WorksheetFunction.VLookup(Target.Value, rang2, 18, 0)
If TypeName(備考) <> "error" Then
Target.Offset(, 3) = 備考
コメント = Application.WorksheetFunction.VLookup(Target.Value, rang2, 20, 0)
If TypeName(コメント) <> "error" Then
Target.Offset(, 4) = コメント
Else
End If
End If
End If
End If
Application.EnableEvents = True
End Sub
お礼
問題は解決しておりませんが、ひとまず質問を締め切ります。 お二人とも回答ありがとうございました。 またよろしくお願いします。
補足
回答ありがとうございます。 中身を同じように作っている名簿ファイルがもうひとつあるのですが、そちらのデータを使えばうまくいきました。 中身の違いとしては、入力内容とセル幅とセルの着色の違いくらいで、色はどちらも旧バージョンのエクセルに対応している色を使っています。 セルの書式も変えていないし、入力内容の違いと言えば、住所変更したために書き換えていることくらいです。 どうしてでしょう?