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
こんにちは。
VB2005の勉強をさせて頂いています。
ボタンを押すとコモンダイヤログを表示し、
ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが
上手くできません。一応現在のソースを下記に置いておきます。
特に、下記のソースの
'DataGridView1に展開
For i As Integer = 0 To xlSheet.Rows.Count - 1
DataGridView1.Rows.Add()
DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0)
Next
のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、
実際セルに入力したデータは5行程度のものです。
1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか?
よろしければ、具体的なソースやアドバイスをお願いいたします。
--------------------------------------
Dim ofd As New OpenFileDialog()
'ofdの設定をする
'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する
If ofd.ShowDialog() = DialogResult.OK Then
'選択されたファイルを読み取り専用で開く
Dim ReadFile As System.IO.Stream
ReadFile = ofd.OpenFile()
If Not (ReadFile Is Nothing) Then
Dim xlApp As New Excel.Application
Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
'既存ファイルを開く場合
Dim xlFilePath As String = ofd.FileName
Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
Dim xlSheets As Excel.Sheets = xlBook.Worksheets
Dim xlSheet As Excel.Worksheet = xlSheets.Item(1)
'DataGridView1に展開
For i As Integer = 0 To xlSheet.Rows.Count - 1
DataGridView1.Rows.Add()
DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0)
Next
'xlSheet の解放
'xlSheets の解放
'xlBook を閉じる
'xlBook の解放
'xlBooks の解放
'Excelを閉じる
'xlApp を解放
End If
End If
ofd.Dispose()