• 締切済み

エクセルで在庫表を作ろうとしています

エクセルで在庫表を作ろうとしているのですが、躓いてしまって困っています。 TEST1 コードを手入力した後実行 TEST2 出庫数を入力した後実行 Option Explicit Option Base 1 Sub TEST1() 'コードを手入力した後実行 Dim ws1 As Worksheet Dim ws2 As Worksheet Dim r&, i& Dim vL1 As String Dim vL2 As Long Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") r = ws1.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To r vL1 = Application.WorksheetFunction.VLookup(ws1.Cells(i, 1), ws2.Range("A2:IV65536"), 2, False) ws1.Cells(i, 1).Offset(, 1) = vL1 vL2 = Application.WorksheetFunction.VLookup(ws1.Cells(i, 1), ws2.Range("A2:IV65536"), 3, False) ws1.Cells(i, 1).Offset(, 2) = vL2 Next i End Sub Sub TEST2() '出庫数を入力した後実行 Dim ws1 As Worksheet Dim ws2 As Worksheet Dim r&, i& Dim vL2 As Long Dim vL3 As String Dim syukko As Long Dim fnd As Range Dim zaiko As Long Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") r = ws1.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To r If ws1.Cells(i, 4) > 0 Then syukko = ws1.Cells(4, 1).Offset(, 3).Value vL2 = Application.WorksheetFunction.VLookup(ws1.Cells(3, 2), ws2.Range("A2:IV65536"), 3, False) Set fnd = ws2.Range("A:A").Find(ws1.Cells(i, 1)) If fnd Is Nothing = False Then zaiko = vL2 - syukko fnd.Offset(, 2) = zaiko End If MsgBox ws1.Cells(i, 2) & "を" & syukko & "出庫します" & vbLf & "在庫は" & zaiko & "になります。" Else MsgBox "出庫数を入力して下さい" Exit Sub End If Next i ws1.Range("A2:D65536").ClearContents End Sub ここまでは作りました。 ですが、プロシージャの外では無効です と出てしまいます。 どうすればよいのでしょうか。 教えて下さい。 シート1のB2にコード・C3に名前・D2に現在個数・E2に出庫数を入力します。 実際にはB3からすうじを入力し、コードを入力すれば自然に名前と現在個数を シート2から探してくるようにしたいです。 シート2にはA列にコード、B列に名前、C列に現在庫数が載っている表があります(量が半端ではないです) 出来れば、1度出庫数を入れたら、次開いた時にシート2のC列にある現在個数が自然に減っていて、シート1にはフォームしか残らない状態にしたいです。 お願いします<m(__)m>

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

質問と同じコードですが、小数例でやってみるとうまく行き増した。 Sub TEST1() 'コードを手入力した後実行 Dim ws1 As Worksheet Dim ws2 As Worksheet Dim r&, i& Dim vL1 As String Dim vL2 As Long Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") '-- r = ws1.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To r vL1 = Application.WorksheetFunction.VLookup(ws1.Cells(i, "A"), ws2.Range("A2:IV65536"), 2, False) MsgBox "vl1=" & vL1 ws1.Cells(i, "A").Offset(, 1) = vL1 'Sheet1の列へ vL2 = Application.WorksheetFunction.VLookup(ws1.Cells(i, "A"), ws2.Range("A2:IV65536"), 3, False) MsgBox "vl2=" & vL2 ws1.Cells(i, "A").Offset(, 2) = vL2 'Sheet1のC列へ Next i End Sub ーー 雑感 (1)チェック用に上記のようにMsgbox うお入れてみるのはどうか (2)Sheet2は A列    B列  C列 aa a 1 bb b 2 cc c 3 のようにB列文字列、C列数字にアンって居るか。 (3)VLOOKUP関数で見つからなかった場合の手を打っておく必要はあるのでは無いか。 ーー 標題の >エクセルで在庫表を作ろうとしています ・・ は不適当ではないか?台が大きすぎて実態を表してない。 上記なら、VLOOKUP関数の利用の質問ではないか ーーー 時間なく 質問後半は省略したが、 >躓いてしまって困っています 前半か後半かを明記すべきでは。 iでForNextで繰返しの中で syukko = ws1.Cells(4, 1).Offset(, 3).Value に i ガ無いのはこれで良いのか? 忙しい回答者に生のコードをコピペするだけでなく(また読み解かせるのでなく、シートの情況との関連も質問に書くこと。 全く予備知識が無いものが読むのだ。

すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

まず、[F8]でステップ実行させて変数の値があなたが考えている通りになっているのかを確認してください。 それでも解決しなければ、エラーが何処で出たのか、その時の使用している変数の値がどうなっているのかを明記してください。 ソースをざっと眺めた限りではシート1のB2セルに入っているはずのコードを参照している箇所が「出庫します」のメッセージ以外何処にもありません。 ソースか説明が間違っていませんか?

すると、全ての回答が全文表示されます。

関連するQ&A