##使用ソフト・プログラミング言語
使用ソフト:Excel2016
使用言語:VBA
前提・実現したいこと
Excel VBA ファイル(.xlsx)から別ブック(.xlsx)を起動して、セルに入力規則としてドロップダウンリストを作成いたしました。
ドロップダウンリストにて選択できる値を連動させたいのですが、ドロップダウンリストのファイルは.xlsxで可能でしょうか?
発生している問題・エラーメッセージ
各行の4列目の値を上限として、0から上限値までの整数をドロップダウンリストにて選択できるようにしましたが、
ドロップダウンリストの選択値の合計が4列目の値を超過する場合があることが判明しました。
6列目にて選択した値が4列目と等しい場合は、8列目・10列目を0とし、6列目にて選択した値が、4列目の値未満の場合は、6列目・8列目で選択できる値は、12列目【=4列目-6列目-8列目-10列目という演算列です。】の値を上限としたいです。
該当のソースコード
Option Explicit Dim Row, Col, RMax, CMax, Cnt, Max, i As Integer Public CellList() As Variant Dim ListStr, Exf As String public sub List() Cnt = 0 'カウント用変数を宣言し、初期値を格納する Exf = Dir(Path & "Q*.xlsx") '対象ファイルを取得する Do While Exf <> "" '対象ファイルがなくなるまで繰り返す If Ename(Cnt) = Exf Then '取得したファイル名と編集するファイル名が一致した場合 If Cnt < 7 And De(Cnt + 11) = True Then On Error Resume Next Workbooks.Open Path & Exf '当該ファイルを開く Worksheets(1).Select '左から1番目のシートを選択 Col = 1: Row = 1: CMax = 1: RMax = 1 '行番号 ・ 列番号の初期値を設定する CMax = Cells(1, 1).End(xlToRight).Column '右端の列番号を変数に格納する RMax = Cells(1, 1).End(xlDown).Row '下端の行番号を変数に格納する For Row = 2 To RMax '明細行の間繰り返す Max = Cells(Row, 4).Value '入庫数量を変数に格納する If Max > 40 Then '入庫数量が40超えの場合 Max = 40 '最大値を40とする End If ReDim CellList(Max) '入力規則用配列を設定する For i = 0 To Max '入庫数量の間繰り返す CellList(i) = i '現在のカウント数値を配列に格納する Next ListStr = Join(CellList, ",") '入力リストを文字列化する For Col = 6 To 10 Step 2 Cells(Row, Col).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=ListStr '入力規則を設定する Cells(Row, Col).Validation.ErrorTitle = "エラー" 'エラー発生時のタイトルを設定する Cells(Row, Col).Validation.ErrorMessage = "入荷数量以内で入力してください。" 'エラーメッセージを設定する Next Next Cells(1, 1).Select: ActiveWorkbook.Save 'A1セルに移動してここまでの作業を保存する Workbooks(Exf).Close 'Excelを終了する On Error GoTo 0 End If End If Exf = Dir(): Cnt = Cnt + 1 Loop end sub
###入力ファイル
入力ファイルにつきましては、配達数量の入力処理を実施する端末がマクロ非対応のため、Xlsx拡張子とさせていただいています。
######配達数量を入力する前の状態の例です。
日付 | 届け先 | 商品名 | 入荷数量 | 配達数量1 | 配達数量2 | 配達数量3 | 残り |
---|---|---|---|---|---|---|---|
2020/02/01 | A部B課 | 手提げ袋小 | 10 | 0 | 0 | 0 | 10 |
2020/02/01 | C部D係 | 手提げ袋中 | 40 | 0 | 0 | 0 | 40 |
######配達数量1で入荷数量(最大値)を入力した場合
日付 | 届け先 | 商品名 | 入荷数量 | 配達数量1 | 配達数量2 | 配達数量3 | 残り |
---|---|---|---|---|---|---|---|
2020/02/01 | A部B課 | 手提げ袋小 | 10 | 10 | 0 | 0 | 0 |
2020/02/01 | C部D係 | 手提げ袋中 | 40 | 40 | 0 | 0 | 0 |
配達数量2も3も1以上の値が入力できるようになっています。
######配達数量1と2のそれぞれに入荷数量(最大値)を入力した場合
日付 | 届け先 | 商品名 | 入荷数量 | 配達数量1 | 配達数量2 | 配達数量3 | 残り |
---|---|---|---|---|---|---|---|
2020/02/01 | A部B課 | 手提げ袋小 | 10 | 10 | 10 | 0 | -10 |
2020/02/01 | C部D係 | 手提げ袋中 | 40 | 40 | 40 | 0 | -40 |
配達数量の合計が入荷数量を超過しているため、残り数量がマイナスとなっています。
回答2件
あなたの回答
tips
プレビュー