Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


581 / 13645 ツリー ←次へ | 前へ→

【79585】Cells.Findについて(在庫管理システム) おはぎ 18/1/25(木) 20:24 質問[未読]
【79586】Re:Cells.Findについて(在庫管理システム) γ 18/1/25(木) 23:06 回答[未読]
【79587】Re:Cells.Findについて(在庫管理システム) おはぎ 18/1/26(金) 16:31 お礼[未読]

【79585】Cells.Findについて(在庫管理システム)
質問  おはぎ  - 18/1/25(木) 20:24 -

引用なし
パスワード
   はじめまして。
VBA初心者ですが、会社で在庫管理システムの作成を任され、悪戦苦闘しております。
かなり最初の部分で躓いてしまいました。
過去ログ検索しても分からなかったので、教えて下さい。
作りかけのコードには執着ありませんので、「もっとこうした方が良いよ」などあれば、ご教示頂けるとうれしいです。

◆最終的に作ろうとしているもの
 製品(複数種類)を販売すると、部品毎に在庫が引かれていくシステム。
 カスタム依頼も多いので、対応可能なもの。

◆今作っている部分
 最初の、製品登録画面。
 「Parts List」というシートに、部品の情報がまとまっている。
 それとは別に製品(完成品)ごとのシートを作成し、そこへ必要な部品と数を予め登録する

◆引っかかっている点
 「Parts List」の(B,5)に「Part Number」という項目があり、
  (B,6)以下に1000件程、コードが並んでいる。
  製品ページにてコードを入力すると、「Parts List」
  シートより、以下の情報を自動的に引っ張ってくる。
  1.(C,6)以下のパーツ名
  2.(E,6)以下の製造元会社名
  3.(M,6)以下の値段(原価)
  4.(O,6)以下の値段(販売価格)

◆作成したコード(途中)
Option Explicit

Sub パーツリストから詳細を取得2()

Dim i As Integer
Dim r As Range
Dim LastRow As Long

LastRow = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row
'選択中のシートのE列最終行を取得

i = 6

'For i = 6 To LastRow
  
  Set r = Worksheets("Parts List").Cells.Find(Worksheets(ActiveSheet.Name).Cells(i, 5).Value)
  
    If Not r Is Nothing Then
      Cells(i, 7) = Worksheets("Parts List").r.Value
    
      '以降はエラー処理
      Else
      MsgBox "該当パーツが見つかりません", vbExclamation
    End If
  'i = i + 1

'Next

End Sub

◆できないこと
1.変数「r」に代入された「Range」の値を変更する(B列を取得しているが、C,Dと横にずれて、それぞれの値を取得したい)
2.製品シートに値を入れる
3.「ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row」の部分で、本当は「5(E列)」にしたいが上手く機能しない。
  (今入っているのは「LPA239」などの記号)
  仕方なく、製品ページのF列に「=IF(E6="","","○")」を入れて、無理やり認識させている。
4.その他、進行するごとに質問が多数出てくると思います…

【79586】Re:Cells.Findについて(在庫管理システ...
回答  γ  - 18/1/25(木) 23:06 -

引用なし
パスワード
   以下のコード片を参考にしてみてください。

Sub パーツリストから詳細を取得2()
  Dim i As Long
  Dim r As Range
  Dim LastRow As Long

  LastRow = Cells(Rows.Count, 5).End(xlUp).Row

  For i = 6 To LastRow
    Set r = Worksheets("Parts List").Cells.find(Cells(i, 5).Value)
    If Not r Is Nothing Then
      Cells(i, 7).Value = r.Value
      Cells(i, 8).Value = r.Offset(, 1).Value
      ' 以下同様に。
    Else
      MsgBox "該当パーツが見つかりません", vbExclamation
    End If
  Next
End Sub

Findメソッドの引数は省略しないほうがよいでしょう。
マクロ記録をとって調べてみて下さい。

【79587】Re:Cells.Findについて(在庫管理システ...
お礼  おはぎ  - 18/1/26(金) 16:31 -

引用なし
パスワード
   Y様

有難うございます!
主にrに取り込んだ情報の操作方法で悩んでいたのですが、
Offsetで操作できるのですね。
これで、完璧に動作しました。

大変助かりました。
また進めていって分からない事があれば、
ここで質問させていただこうと思います。

581 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free