質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

5回答

375閲覧

VBA 別のブックAを参照して別のブックBへ書き込み

Yuukiy

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/10/28 01:53

問題
全国に店舗がある「フルーツ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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DreamTheater

2020/10/28 02:18

VBAファイルとは何ですか?
Yuukiy

2020/10/28 02:21

VBAだけが記載されたファイルという意味でただのExcelです。
tatsu99

2020/10/28 03:03

「参照するリストと確認したい入荷リストをユーザーがファイル選択できるようにしたい」ということですが、参照するリスト及び入荷リストがそれぞれ複数存在するということですか。 参照するリストと確認したい入荷リストがそれぞれ1ファイルなら、ファイル名を決め打ちして、読み込んだほうが楽です。
Yuukiy

2020/10/28 03:11

参照するリストと入荷リストはそれぞれ複数存在するので、「参照ファイル」と「入荷リスト」のファイルをユーザーが選べるようにしたいと考えています。
tatsu99

2020/10/28 04:48

ブックA(注文リスト)のシート名はなんですか。 ブックB(入荷リスト)のシート名はなんですか。
guest

回答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

Ayalla

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuukiy

2020/10/28 03:05

回答ありがとうございます。参考にして実施してみます!
Ayalla

2020/10/28 03:14

よろしくお願いいたします。 ※変数が宣言されていないため、Option Explicitを削除してから実行したほうがいいかもしれません.
guest

0

他ブック(ブックA)を参照して他ブック(ブックB)に書き込めます。
(できるかどうか、との質問なので「できる」とだけ答えればいいのですよね?)
(探して見つかるかどうかわからず、見つかることを保証してもらいたいのですよね?)
他ブックは(フルパス/相対パス+)excelファイル名+シート名(+セル)を指定します。相対パスでもいいけれど、フルパス指定をすすめます。
詳細はネットで検索してみてください。必ず見つかります。

投稿2020/10/28 02:45

sage

総合スコア1216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuukiy

2020/10/28 03:02

回答ありがとうございます。出来ることが分かったのでなんとかなると思います。
guest

0

質問が大雑把ですね。
しかも所謂「丸投げ」質問です。

ブックAを参照してブックBの内容を変更(〇を表示)できるか教えて欲しいです。

できますよ。
でもこの質問は以下全てを含んでます。わからないところをもっと明確にしましょう。
・ブックの開き方
・データの取得・設定方法
・ブックの閉じ方

vbaを実行するとよくあるファイルを開くウィンドウが表示され

参照するリストと確認したい入荷リストをユーザーがファイル選択できるようにしたい。

「よくある」とは一般的なって意味ですか?
それとも利用者がよく使用するファイルという意味でしょうか?

全部わからないのでしたら、こちらの有名なサイトは初心者の方にも分かりやすく書かれています。
VBAの基礎レベルを学習して、自分なりのVBAコードが掲載できるようになった上で質問しましょう。

投稿2020/10/28 02:40

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yuukiy

2020/10/28 03:00

ご指摘ありがとうございます。言い訳になりますが、会社から明日までにvbaを作れと言われ、出来ないと回答したのですがやれと。知識0スタートで、調べてみても分からなかったので最終手段でここで質問しました。教えていただいたサイトで出来るところまで頑張ってみます。
guest

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

AkiSaito

総合スコア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

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問