電子書籍の厳選無料作品が豊富!

bookA
sheetA1(請求書作成シート)Inputboxに会社ID入力で請求書作成
sheetA2(注文データ)A列会社ID、B列以降は商品名、個数などG列まで
bookB
SheeB1(会社住所のみの一覧)A列会社ID、B列以降は〒会社名住所TELなどG列まで
会社IDは500件ほど

Inputboxからの会社IDを検索キーにして、
sheetB1から会社住所行を取得、
sheetA2より注文データ行を取得
sheetA1請求書シートに、会社宛名と注文内容を表示作成
会社情報と注文情報が別々のシート、IDもランダムに入力されている

上記内容で初心者ですがコードを記述してみました
検索行 i が一緒だと、それぞれランダムなので、会社宛名と別の注文データが抽出される??? 頭の中がゴチャゴチャで何かよくわかりませんTT 助けてください
、、、動きませんTT  手詰まりです

Sub Seikyu()
keyID = Application.InputBox(“会社IDを入力”)
Set wbA = Workbook(“sheetA1”)
Set wsA = Worksheet(“sheetA2”)
Set wbB = Workbooks.Open(Filename:=bookB.xls)
Set wsB = Worksheet(“sheetB1”)

‘2行目から検索
For i = 2 to 500
IF keyID = wsA.Cells(i,”A”) Then
With wbA
‘会社宛名住所
.Range(“B5”) = wsB.Cells(i,”B”)
.Range(“B6”) =wsB.Cells(i,”C”)
.Range(“B7”) =wsB.Cells(i,”D”)
.Range(“B8”) =wsB.Cells(i,”E”)
        ‘注文データ
        .Range(“B10”) = wsA.Cells(i,”B”)
.Range(“B11”) =wsA.Cells(i,”C”)
.Range(“B12”) =wsA.Cells(i,”D”)
.Range(“B13”) =wsA.Cells(i,”E”)
      End With
wbB.Close
Goto sakusei
Else
Msgbox “会社IDが見つかりません”
    wbB.Close
Goto syuryo
End If
Next i

Sakusei:
wbA.Copy after:=Worksheets(“sheetA2”)
wbA(“sheetA2 (2)”.Name = keyID
wbA.PrintOut

Syuryo:
wbA.Select
End sub

A 回答 (3件)

No.1です。



まず会社住所は基本ID1つに対して情報は1つであると思いますが、ある時の注文データの項目数が常にID1つに対して1つの商品しか扱わないのですかね?
まさか商品1つに対して1つの注文書?を作成し続ける訳ではないとは思うのですが。
    • good
    • 0
この回答へのお礼

めぐみんさん、ありがとうございます
そもそも自身が流れを理解してないのが問題であって、再度じっくり1コード毎、しっかり確認してもう一度トライしてみようと思います。急に任されたものですから、やるしかないのですけどねTT 頑張ります

お礼日時:2020/10/09 18:59

こんにちは



内容はきちんと理解していませんが・・・

普通にLOOKUP関数や MATCH、INDEX関数での検索・抽出の仕組みにしておけば、マクロ等を実行しなくても、ID入力時に即座に表示に反映されると思いますけれど?
式が上書きされる可能性を心配しているのなら、シートの保護を利用すれば宜しいかと。

ご提示のループの構成は
For i = 2 to 500
 IF keyID = wsA.Cells(i,”A”) Then
  'IDが一致した時の処理
  ' ・・・・・
   wbB.Close
   Goto sakusei
 Else
  '一致しなかった時の処理
   Msgbox “会社IDが見つかりません”
   wbB.Close
   Goto syuryo
 End If
Next i
のようになっていますが、i=2でスタートして、IDが一致しても一致しなくても
   wbB.Close
でファイルが閉じられ、
(もしも2回目のループがあるなら、ファイルはもう参照できない)
   Goto sakusei(または Goto syuryo)
で、必ずループを抜けることになっているので、そもそもが、ループで記述する意味がない処理内容になっています。


検索を(この場合、ヒットはひとつだけ?注文情報は複数か??)なさりたいのなら、FINDとかを利用する方が効率が良さそうに思いますけれど。
あるいは、シート関数(WorkSheetFunction)のMatch等を利用してもよさそうですが(複数ヒットの場合は一寸工夫が必要)・・・
    • good
    • 0

ブックBは開いた状態で作業した方が宜しいのでは?


それに For~Next の中で閉じても仕方ないし、何より検索してないですよね?
検索するにも閉じたら出来ませんし。

会社IDで注文書?をシート管理しても同じ会社で別の日に注文受けたらどうなります?
同じ名前のシートを作ろうとしてエラーになりませんか?

あとはデータをシートにどのように溜めているのかにもよるでしょうかね。
画像(ダミーデータで良いですがセル位置は同じように)があるとわかりやすかったかも。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!