
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル VBA ユーザーフォーム リストボックスで選択した値をテキストボックスに自動表示
Visual Basic(VBA)
-
エクセルVBA 複数列のリストボックス内を検索して値を複数列表示したい
Excel(エクセル)
-
エクセルVBAリストボックスに表示された検索結果をクリックして、該当するセルをアクティブセルにしたい
Excel(エクセル)
-
-
4
VBA リストボックス内の値を複数選択し別シートに転記するには
Visual Basic(VBA)
-
5
【Excel VBA】ユーザーフォームで選択した複数条件に一致するデータ行を削除
Excel(エクセル)
-
6
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
7
エクセルVBA「リストボックスで選択した値をテキストボックスで変更してシート上セルに反映したい」
Excel(エクセル)
-
8
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
9
Excel VBA 複数選択したリストボックスからテキストボックスに転記したいです。
Visual Basic(VBA)
-
10
VBA フォームに入力された数値を検索条件としたい
Visual Basic(VBA)
-
11
UserForm1.Showでエラーになります。
工学
-
12
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
13
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
14
ユーザーフォームでのリストボックス連動(VBA)
Visual Basic(VBA)
-
15
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
16
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
17
ExcelVBA でリストリストボックスに列見出しをコーディングでつける
Excel(エクセル)
-
18
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
VBAでファイルオープン後にコー...
-
変数名「cur」について
-
access2021 VBA メソッドまたは...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
特定行の背景色を変えたいのですが
-
Excelシート上で右クリックがで...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
JavaScriptの定数名が取り消し...
-
ACCESS VBA ヘッダなしCSVの入...
-
PreviewKeyDownイベントが2回...
-
VBA リストボックス(複数条件...
-
Excel VBAでOpenTextのFieldInf...
-
ランタイムのいらないプログラ...
-
Exel VBA 別ブックから該当デ...
-
エクセルVBA ユーザーフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2021 VBA メソッドまたは...
-
1日に1人がこなせるプログラム...
-
JANコードとPOSコードは同じ?
-
1、Rstudioで回帰直線を求める...
-
access2003 クエリSQL文に...
-
Exel VBA 別ブックから該当デ...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
変数名「cur」について
-
エクセルに見えない文字(JISX0...
-
オートフィルタで抽出結果に 罫...
-
Nullの使い方が不正です。
-
PreviewKeyDownイベントが2回...
-
【VB6】実行ファイルとした後、...
-
Javaの改行について
-
C# コードビハインドについて
-
Excelシート上で右クリックがで...
-
木偏に「久」
おすすめ情報