
VBA初心者です。
入門書を読み、コンボボックスを用いる(一つの条件検索)で請求書ツール作成までできたのですが、画像のようにユーザーフォームに複数選択リストを設けると現在のコードですと、エラーになってしまいます。
つきましては、リストボックスで条件を複数選択可能にして、該当データを転記するといったことを行いたいです。大変恐縮ですが、コードをご教示お願い致します。
↓参考に、現状のコードを下記致します。
(ユーザーフォームのコード)
Private Sub btnExit_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim ListRange As Range
Dim temp As Range
Dim vYear As Long
Dim i As Long
With Worksheets("取引先一覧").Range("A1").CurrentRegion
Set ListRange = .Resize(.Rows.Count - 1).Offset(1)
End With
For Each temp In ListRange
cmbcompany.AddItem temp.Value
Next
vYear = Year(Date)
cmbYear.AddItem vYear - 1
cmbYear.AddItem vYear
cmbYear.AddItem vYear + 1
cmbYear.Value = vYear
For i = 1 To 12
cmbMonth.AddItem i
Next
End Sub
Private Sub btnMakeBill_Click()
MakeBill cmbcompany.Text, cmbYear.Text, cmbMonth.Text
End Sub
(標準モジュールのコード)
Option Explicit
Sub Main()
frmMakeBill.Show
End Sub
Sub MakeBill(ByVal vCompany As String, ByVal vYear As Long, ByVal vMonth As Long)
Dim TargetSheet As Worksheet
Dim vDate As Date
Dim DataRange As Range
Dim TargetRange As Range
Dim BillBook As Workbook
Dim i As Long, vRow As Long
Dim vInfo(1 To 2) As String
On Error Resume Next
Worksheets("請求書Template").Copy After:=Worksheets(Worksheets.Count)
If Err.Number <> 0 Then
MsgBox "「請求書Template」ワークシートが見つかりません。確認下ください"
Exit Sub
End If
On Error GoTo 0
On Error GoTo ErrHdl
Set TargetSheet = Worksheets(Worksheets.Count)
Set TargetRange = TargetSheet.Range("A18")
i = 1
vRow = 1
With Worksheets("受注データ").Range("A9")
Do Until .Cells(i, 1).Value = ""
vDate = .Cells(i, 1).Value
If .Cells(i, 2).Value = vCompany _
And Year(vDate) = vYear And Month(vDate) = vMonth Then
TargetRange.Cells(vRow, 1).Value = .Cells(i, 1).Value '「日付」列
TargetRange.Cells(vRow, 2).Value = .Cells(i, 3).Value '「商品コード」列
TargetRange.Cells(vRow, 3).Value = .Cells(i, 4).Value '「商品名」列
TargetRange.Cells(vRow, 4).Value = .Cells(i, 5).Value '「数量」列
TargetRange.Cells(vRow, 5).Value = .Cells(i, 6).Value '「単価」列
TargetRange.Cells(vRow, 6).Value = .Cells(i, 7).Value '「金額」列
vRow = vRow + 1
End If
i = i + 1
Loop
TargetSheet.Range("F28").Formula = "=SUM(F18:F27)" '「小計」
TargetSheet.Range("F29").Formula = "=F28 * 0.08" '「消費税額」
TargetSheet.Range("F30").Formula = "=F28 + F29" '「合計金額」
TargetSheet.Range("B6").Formula = "F30" '請求額
vInfo(1) = Date
vInfo(2) = vCompany
TargetSheet.Range("F2").Value = vInfo(1) '「請求日」
TargetSheet.Range("A6").Value = vInfo(2) '「請求先」
End With
Set BillBook = Workbooks.Add
TargetSheet.Cells.Copy BillBook.Worksheets(1).Range("A1")
Application.DisplayAlerts = False
TargetSheet.Delete
Application.DisplayAlerts = True
Exit Sub
ErrHdl:
MsgBox "エラーが発生しました。処理を終了します"
End Sub

A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは
コードを拝見すると、?がありますが、
先ずは、
コンボボックスからリストボックスに変更していますよね。
リストボックスで条件を複数選択可能にするの
プロパティであらかじめ設定するか、
Initializeで
cmbcompany.MultiSelect = fmMultiSelectMulti
などとすれば良いかと。。 ここは、大丈夫そう?。
あと 肝心の
MakeBill cmbcompany.Text, cmbYear.Text, cmbMonth.Text
すべて Stringに対し
Sub MakeBill(ByVal vCompany As String, ByVal vYear As Long, ByVal vMonth As Long)
String, Long, Long、、、エラーだと思うけど
実際に試すの大変そうなので、検証していませんが
cmbcompany オブジェクトが ListBoxであるとして
選択されている値をMakeBillに投げれば良いのでは無いかと
多分それが一番簡単かな、、
Private Sub btnMakeBill_Click()
MakeBill cmbcompany.Text, cmbYear.Text, cmbMonth.Text
End Sub
を
Private Sub btnMakeBill_Click()
Dim i As Integer
With cmbcompany
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
MakeBill .List(i), cmbYear.Text, cmbMonth.Text
End If
Next i
End With
End Sub
型を確認する事。
内容をよく見ていないので参考まで
No.1
- 回答日時:
まず。
>On Error GoTo ErrHdl
をコメントアウトにして『どこでエラーが出ているのか?』を把握した上で質問された方が的を絞った内容になると思いますよ。
個人的にはエラーが発生しないコード作成が好きですし、初級レベルなジジィは昔諸先輩方にそう教わりました。
☆彡複数選択可能なリストボックス
http://officetanaka.net/excel/vba/tips/tips144.htm
選択されている項目を調べる
によって、その値が選択されているか否かの条件式で選択されている場合だけ次に進むようにすれば宜しいのでは?
ここまで書ける方なら実際のコードはリンク先を参考にちょっと修正するくらいかなと思われます。
『ExcelVBA リストボックス 複数選択』でググりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
このQ&Aを見た人はこんなQ&Aも見ています
-
【Excel VBA】ユーザーフォームで選択した複数条件に一致するデータ行を削除
Excel(エクセル)
-
エクセル VBA ユーザーフォーム リストボックスで選択した値をテキストボックスに自動表示
Visual Basic(VBA)
-
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
-
4
VBA リストボックス内の値を複数選択し別シートに転記するには
Visual Basic(VBA)
-
5
エクセルVBA 複数列のリストボックス内を検索して値を複数列表示したい
Excel(エクセル)
-
6
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
7
エクセルVBA「リストボックスで選択した値をテキストボックスで変更してシート上セルに反映したい」
Excel(エクセル)
-
8
Excel VBA 複数選択したリストボックスからテキストボックスに転記したいです。
Visual Basic(VBA)
-
9
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
10
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
11
VBA フォームに入力された数値を検索条件としたい
Visual Basic(VBA)
-
12
UserForm1.Showでエラーになります。
工学
-
13
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
14
Excelにて、ユーザーフォームで、日付けの範囲を指定し、検索しデーターを抽出し 別シートへ転記した
Excel(エクセル)
-
15
ユーザーフォームでのリストボックス連動(VBA)
Visual Basic(VBA)
-
16
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
17
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
18
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
19
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
20
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1、Rstudioで回帰直線を求める...
-
1日に1人がこなせるプログラム...
-
access2021 VBA メソッドまたは...
-
Exel VBA 別ブックから該当デ...
-
JANコードとPOSコードは同じ?
-
VBAでファイルオープン後にコー...
-
Javaの改行について
-
C# コードビハインドについて
-
【VB6】実行ファイルとした後、...
-
access2003 クエリSQL文に...
-
PreviewKeyDownイベントが2回...
-
VB2005 TextBoxの入力制...
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
python、区分求積法を用いて円...
-
pythonで同じコード内で複数の...
-
Excel VBA 空白をセルを探して...
-
ASCIIコードを文字に変換したい
-
JavaScript|特定URLだった時、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
JavaScriptの定数名が取り消し...
-
access2021 VBA メソッドまたは...
-
JANコードとPOSコードは同じ?
-
PreviewKeyDownイベントが2回...
-
エクセルに見えない文字(JISX0...
-
オートフィルタで抽出結果に 罫...
-
Excelシート上で右クリックがで...
-
Exel VBA 別ブックから該当デ...
-
access2003 クエリSQL文に...
-
変数名「cur」について
-
Nullの使い方が不正です。
-
【VB6】実行ファイルとした後、...
-
VBAでファイルオープン後にコー...
-
COBOLの文法
-
Accessでの抽出で完全一致。
-
AccessでReplace関数を使うときに…
-
Access DCountでの連番について
-
sinカーブの表示のさせ方
おすすめ情報