問題
全国に店舗がある「フルーツVBA店」で注文リストに記載されている果物が入荷されているか確認したい。
注文リストを参照して入荷リストを確認し、入荷していれば〇を付けたい。
目的
①vbaファイル、注文リスト(ブックA)、入荷リスト(ブックB)の3ファイルを使用
vbaを実行すると注文リストを参照して入荷リストに書き込みしたい。
疑問点
ブックAを参照してブックBの内容を変更(〇を表示)できるか教えて欲しいです。
vbaの希望内容
vbaを実行するとよくあるファイルを開くウィンドウが表示され
参照するリストと確認したい入荷リストをユーザーがファイル選択できるようにしたい。
ファイルイメージ例
ツールの流れ
vba→ブックA参照→ブックBへ書き込み
ファイルの内容例
ブックA(注文リスト)
列1 | 列2 |
---|---|
No. | 果物 |
1 | りんご |
2 | みかん |
3 | すいか |
VBA実行後のブックB(入荷リスト)
列1 | 列2 | 列3 |
---|---|---|
No. | 果物 | 入荷済み |
1 | ばなな | |
2 | みかん | 〇 |
3 | ぶどう |
知識が浅く読みずらい内容かもしれませんが、お願いいたします。
分かりずらい点等ございましたらズバズバとご指摘ください。出来る限り修正致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/28 02:21
2020/10/28 03:03
2020/10/28 03:11
2020/10/28 04:48
回答5件
0
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", Title:="ブックAを選択")
If OpenFileName <> "False" Then Workbooks.Open OpenFileName Set sht1 = Workbooks(OpenFileName).Worksheets("注文リスト") End If OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?", Title:="ブックBを選択") If OpenFileName <> "False" Then Workbooks.Open OpenFileName Set sht2 = Workbooks(OpenFileName).Worksheets("入荷リスト") End If With sht1 For i = 2 To 4 If .Cells(i, 2) = "★指定する果物★" Then For j = 2 To 4 If sht2.Cells(j, 2) = .Cells(i, 2) Then sht2.Cells(j, 3).Value = "○" Exit For End If Next j End If Next i End With
投稿2020/10/28 02:59
総合スコア4
0
他ブック(ブックA)を参照して他ブック(ブックB)に書き込めます。
(できるかどうか、との質問なので「できる」とだけ答えればいいのですよね?)
(探して見つかるかどうかわからず、見つかることを保証してもらいたいのですよね?)
他ブックは(フルパス/相対パス+)excelファイル名+シート名(+セル)を指定します。相対パスでもいいけれど、フルパス指定をすすめます。
詳細はネットで検索してみてください。必ず見つかります。
投稿2020/10/28 02:45
総合スコア1240
0
質問が大雑把ですね。
しかも所謂「丸投げ」質問です。
ブックAを参照してブックBの内容を変更(〇を表示)できるか教えて欲しいです。
できますよ。
でもこの質問は以下全てを含んでます。わからないところをもっと明確にしましょう。
・ブックの開き方
・データの取得・設定方法
・ブックの閉じ方
vbaを実行するとよくあるファイルを開くウィンドウが表示され
参照するリストと確認したい入荷リストをユーザーがファイル選択できるようにしたい。
「よくある」とは一般的なって意味ですか?
それとも利用者がよく使用するファイルという意味でしょうか?
全部わからないのでしたら、こちらの有名なサイトは初心者の方にも分かりやすく書かれています。
VBAの基礎レベルを学習して、自分なりのVBAコードが掲載できるようになった上で質問しましょう。
投稿2020/10/28 02:40
総合スコア1095
0
こんにちはこんばんは。ちょうど似たようなプログラムを作っていたので、こちらを参考になさってください。
こちらでテストしましたが、このままで動作します。
vba
1Option Explicit 2 3Private Sub UpdateNyukaListByChumonList() 4'注文リストにある商品名をみて、合致する商品名が入荷リストにあるとき、入荷リスト側にて”入荷済み”のカラムに〇をつける(アップデートする)プログラムです 5 6On Error GoTo ErrorHandler 'なにかのエラーが起きたら、ErrorHandlerにジャンプします 7 8'---注文リストについての各種の定義 9Dim MyChumonListFiles As Variant '注文リストのファイル名(複数あり) 10Dim MyChumonListFileName As String '処理対象の注文リストのファイル名(1ファイル) 11Dim MyChumonListBook As Workbook '"注文リスト"ワークブック(1ファイル) 12Dim MyChumonList As Worksheet '"注文リスト"ワークシート 13Dim MyChumonListFileCount As Long '注文リストのファイル数のカウント 14 15Dim ItemNames As Variant '注文リストのB列にある、商品名の集団。 16Dim ItemName As Variant '商品名の集団(ItemNames)のうちの一個 17 18'---入荷リストについての各種の定義 19Dim MyNyukaListFile As String '入荷リストのファイル名 20Dim MyNyukaListBook As Workbook '"入荷リスト"ワークブック 21Dim MyNyukaList As Worksheet '"入荷リスト"ワークシート 22 23'---検索をコントロールするための各種の定義 24Dim SearchRange As Range '入荷リスト側のどの部分(範囲)を検索するのか?の定義です 25Dim ItemCell As Range '検索してヒットしたときのセル範囲です 26 27 28'---ここから処理開始です 29 30'ファイルオープンダイアログを使って、”注文リスト”のブックを選択する 31'”注文リスト”のブックは、複数ファイルあってもよいこととする 32MyChumonListFiles = Application.GetOpenFilename("XLSXファイル,*.xlsx", Title:="注文リストを選択してください(複数選択が可能です)", MultiSelect:=True) 33 34If Not IsArray(MyChumonListFiles) Then 'ファイルオープンのダイアログで もしキャンセルボタンが押された場合 35 MsgBox "注文リストの選択がキャンセルされました" 36 Exit Sub '終了させます 37End If 38 39'ファイルオープンダイアログを使って、”入荷リスト”のブックを選択する 40'”入荷リスト”のブックは、1ファイルだけである 41MyNyukaListFile = Application.GetOpenFilename("XLSXファイル,*.xlsx", Title:="入荷リストを選択してください", MultiSelect:=False) 42 43If MyNyukaListFile = "" Then 'ファイルオープンのダイアログで もしキャンセルボタンが押された場合 44 MsgBox "入荷リストの選択がキャンセルされました" 45 Exit Sub '終了させます 46End If 47 48'---ここまででやっと 処理対象のファイルが全部決まりました 49 50'入荷リストのブックを開きます 51Workbooks.Open MyNyukaListFile 52Set MyNyukaListBook = ActiveWorkbook 'このブックをMyNyukaListBookという名前で定義しセットします 53Set MyNyukaList = MyNyukaListBook.Worksheets("sheet1") 'とりあえず、シート名はsheet1であるものとし、そのシートを処理対象の”入荷リスト”とします 54 55MyNyukaList.Select 'この次の行のコードで End(xlDown) を使うため。セレクトしています 56 57Set SearchRange = Range("B2", Range("B2").End(xlDown)) '入荷リストのB列2行目から データのある最終行までを"サーチレンジ”とします 58 59 '注文 リストのブックを 順に開きます 60 For MyChumonListFileCount = 1 To UBound(MyChumonListFiles) 61 MyChumonListFileName = MyChumonListFiles(MyChumonListFileCount) 62 Workbooks.Open MyChumonListFileName 63 Set MyChumonListBook = ActiveWorkbook 'このブックをMyChumonListBookという名前で定義しセットします 64 Set MyChumonList = MyChumonListBook.Worksheets("sheet1") 'とりあえず、シート名はsheet1であるものとし、そのシートを処理対象の”注文リスト”とします 65 66 '注文リストと入荷リストがそれぞれ定まったので、ここからが本番です 67 68 MyChumonList.Select 'この下のコードでEnd(xldown)を使うため、selectしています 69 '注文リストのB列を、B2セルから データがある最後のセルまで順番に一個ずつ見ていく 70 Set ItemNames = MyChumonList.Range("B2", Range("B2").End(xlDown)) 71 72 For Each ItemName In ItemNames 73 Set ItemCell = SearchRange.Find(what:=ItemName, lookat:=xlWhole) '商品名に合致するセルがあるかどうかを"FIND"します 74 75 If Not ItemCell Is Nothing Then '合致するセルが見つかったら 76 ItemCell.Offset(0, 1) = "〇" 'そのセルの右隣(C列)に〇をセットする 77 End If 78 79 Next ItemName '次のアイテム名へ移る 80 81 MyChumonListBook.Close 'この注文リストファイルは済んだので閉じます 82 83 Next MyChumonListFileCount '次の注文リストファイルへ 84 85 '処理が完了したら、 86 'このタイミングで、入荷リストのブックを 上書き保存しておく 87 Application.DisplayAlerts = False '上書き保存のワーニングが出ないようにする 88 MyNyukaListBook.Save 89 Application.DisplayAlerts = True 'ワーニングが出るように、元に戻す 90 91 MsgBox "処理が完了しました" 92 MyNyukaList.Cells(1, 1).Select '入荷リストのA1セルをアクティブにする 93 94Exit Sub 95 96ErrorHandler: 'なにかのエラーが発生したとき ここにジャンプしてきます 97 MsgBox "エラーが発生しました" 98 99End Sub 100
投稿2020/11/14 18:00
総合スコア110
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
以下のようにしてください。
注文リストのシート名と入荷リストのシート名が不明なので、"Sheet1"にしておきました。
異なる場合は、
Set sh1 = Worksheets("Sheet1")・・・注文リスト
Set sh2 = Worksheets("Sheet1")・・・入荷リスト
の個所を変えてください。
VBA
1Option Explicit 2 3 4Public Sub 入荷済設定() 5 Dim 注文book As Variant 6 Dim 入荷book As Variant 7 Dim ret As Variant 8 Dim 注文bk As Workbook 9 Dim 入荷bk As Workbook 10 Dim maxrow1 As Long 11 Dim maxrow2 As Long 12 Dim wrow As Long 13 Dim sh1 As Worksheet '注文リスト 14 Dim sh2 As Worksheet '入荷リスト 15 Dim key As Variant 16 Dim dicT As Object 17 Set dicT = CreateObject("Scripting.Dictionary") 18 注文book = Application.GetOpenFilename("注文ブック,*.xlsx") 19 If 注文book = False Then Exit Sub 20 入荷book = Application.GetOpenFilename("入荷ブック,*.xlsx") 21 If 注文book = False Then Exit Sub 22 ret = MsgBox("以下のファイルが選択されました。" & vbLf & "これでよろしいですか。" & vbLf & "注文ブック=" & 注文book & vbLf & "入荷ブック=" & 入荷book, vbOKCancel) 23 If ret <> vbOK Then Exit Sub 24 Set 注文bk = Workbooks.Open(注文book) 25 Set 入荷bk = Workbooks.Open(入荷book) 26 注文bk.Activate 27 Set sh1 = Worksheets("Sheet1") 28 maxrow1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row 'A列最大行 29 For wrow = 2 To maxrow1 30 key = sh1.Cells(wrow, "B").Value 31 dicT(key) = True 32 Next 33 入荷bk.Activate 34 Set sh2 = Worksheets("Sheet1") 35 maxrow2 = sh2.Cells(Rows.Count, "A").End(xlUp).Row 'A列最大行 36 For wrow = 2 To maxrow2 37 key = sh2.Cells(wrow, "B").Value 38 If dicT.exists(key) = True Then 39 sh2.Cells(wrow, "C").Value = "○" 40 Else 41 sh2.Cells(wrow, "C").Value = "" 42 End If 43 Next 44 MsgBox ("設定完了") 45End Sub 46
投稿2020/10/28 10:26
総合スコア5493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。