![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_07.png?e8efa67)
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
No.3
- 回答日時:
こんにちは
内容はきちんと理解していませんが・・・
普通に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等を利用してもよさそうですが(複数ヒットの場合は一寸工夫が必要)・・・
No.1
- 回答日時:
ブックBは開いた状態で作業した方が宜しいのでは?
それに For~Next の中で閉じても仕方ないし、何より検索してないですよね?
検索するにも閉じたら出来ませんし。
会社IDで注文書?をシート管理しても同じ会社で別の日に注文受けたらどうなります?
同じ名前のシートを作ろうとしてエラーになりませんか?
あとはデータをシートにどのように溜めているのかにもよるでしょうかね。
画像(ダミーデータで良いですがセル位置は同じように)があるとわかりやすかったかも。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
マクロの「SaveAs」でエラーが...
-
Unionでの他のシートの参照につ...
-
楽天RSSからエクセルVBAを使用...
-
VBA 空白行に転記する
-
Count Ifのセルの範囲指定に変...
-
VBAで変数の数/変数名を動的に...
-
アクセスからエクセルへ出力時...
-
ExcelのVBマクロを、バックグラ...
-
エクセルのVBAで条件を別シート...
-
VBA 実行時エラー1004 rangeメ...
-
マクロ実行後に別シートの残像...
-
まとめシートから集計シートへA...
-
テキストボックスから、複数の...
-
VBA Userformで一部別シートに...
-
Excel VBA オートフィルターで...
-
vba 連続するとうまく作動せず
-
GASでチェックボックスを一括of...
-
100万件越えCSVから条件を満た...
-
Excel2013で切り取り禁止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
VBA別シートの最終行の次行へ転...
-
Count Ifのセルの範囲指定に変...
-
Changeイベントで複数セルへの...
-
VBAで変数の数/変数名を動的に...
-
VBA 別ブックからの転記の高速...
-
【VBA】特定の条件でセルをコピー
-
VBA 実行時エラー1004 rangeメ...
-
楽天RSSからエクセルVBAを使用...
-
Unionでの他のシートの参照につ...
-
複数シートの複数列に入力され...
-
ExcelのVBマクロを、バックグラ...
-
100万件越えCSVから条件を満た...
-
VBA Userformで一部別シートに...
-
Excel VBA オートフィルターで...
-
Excel2013で切り取り禁止
-
VBAでEXCELから固定長...
おすすめ情報