こちらのコミュニティを初めて利用させていただくVBAを勉強中の初心者です。
経験者様のお知恵をお借りすることができたらと思い、相談させていただきました。
現在、ユーザーフォームのコンボボックスで「請求月」と「請求日」を選択し、
そのふたつの条件に当てはまるデータを、2種類のうち片方の請求書テンプレートに転記する
といったマクロの作成に取り組んでおります。
例えば、ユーザーフォームで「1月」の「20日」を選択したら、
B社の「1月」の金額"150円"とその会社の情報"△△△"だけ
「住所あり」の請求書に転記されるといったものです。
連番 1月 2月 3月 4月 5月 内容 請求日 テンプレートの種類
-------------------------------------------------------
A社 200 250 300 300 空白 〇〇〇 10日 住所なし
B社 150 空白 500 空白 400 △△△ 20日 住所あり
C社 300 空白 100 200 500 □□□ 月末 住所なし
-------------------------------------------------------
しかし、以下のマクロを実行すると、「住所なし」にも関わらず
必ず「"\請求書ひな形_住所あり.xlsx"」に転記されてしまいます。
もし、以下のマクロをご覧になってミス等に気付かれた方がいらっしゃいましたら
お手数をお掛けしますが、問題点をご教授いただけませんでしょうか?
問題があると思われる箇所は、
If 連番.Offset(0, 9).Value = "住所なし" Then
の部分です。
Private Sub Cnd_Click()
Dim 入力月 As String: 入力月 = ComboBox1.Text
Dim 請求日 As String: 請求日 = ComboBox2.Text
UserForm1.Hide
'以下、請求月の検索
Dim 列 As Long
列 = Worksheets("サンプル").Range("B1:F1").Find(What:=入力月).Column
'連番の数だけ以下の処理を繰り返す
Dim 最終行 As Long
最終行 = Worksheets("サンプル").Cells(Rows.Count, 1).End(xlUp).Row
Dim 行 As Long
For 行 = 2 To 最終行
Dim 連番 As Range: Set 連番 = Worksheets("サンプル").Cells(行, 1)
If Worksheets("サンプル").Cells(行, 列).Value = "" Or _
連番.Offset(0, 7).Value <> 請求日 Then
Else
If 連番.Offset(0, 9).Value = "住所なし" Then
Workbooks.Open (ThisWorkbook.Path & _
"\請求書ひな形_住所なし.xlsx")
ActiveWorkbook.Worksheets(1).Activate
Else
Workbooks.Open (ThisWorkbook.Path & _
"\請求書ひな形_住所あり.xlsx")
ActiveWorkbook.Worksheets(1).Activate
End If
Dim ブック As Workbook: Set ブック = Workbooks("テスト用.xlsm")
Dim シート As Worksheet: Set シート = ActiveSheet
With シート
.Range("C24").Value = 連番
.Range("Y24").Value = ブック.Worksheets("サンプル"). _
Cells(行, 列).Value
.Range("E24").Value = 連番.Offset(0, 6).Value
End With
Dim 社名 As String
社名 = ブック.Worksheets("サンプル").Cells(行, 1).Value
Dim ファイル名 As String
ファイル名 = ThisWorkbook.Path & "\" & 社名 & ".xlsx"
ActiveWorkbook.SaveAs ファイル名
ActiveWorkbook.Close
End If
Next 行 '次の行に進む
End Sub[b][code][/code]