Excelの表よりデータを絞り込みして出力する方法をご教授お願い致します。
Excelの表よりデータを絞り込みして出力する方法をご教授お願い致します。 【詳細】 売買請求書データより金額とファイル名(他多数)の項目をシートAに取込みすることまでは出来ました。 ユーザーフォームを使用して入力した内容により、一致した行をファイル名単位で出力したいです。 例) 「130,000」を入力 → 5・6、9・10行目が出力 「120,000」を入力 → 5・6行目が出力 「12月5日」を入力 → 7・8行目が出力 「130,000」、「12月3日」を入力 → 5・6行目が出力 入金日|合計金額 | ファイル名 ------------------------------------------ 3行目 12月1日|100,000 | aaa.xls →売り請求書 4行目 12月2日|110,000 | aaa.xls →買い請求書 5行目 12月3日|120,000 | bbb.xls →売り請求書 6行目 12月4日|130,000 | bbb.xls →買い請求書 7行目 12月5日|140,000 | ccc.xls →売り請求書 8行目 12月6日|150,000 | ccc.xls →買い請求書 9行目 12月7日|130,000 | ddd.xls →売り請求書 10行目 12月8日|170,000 | ddd.xls →買い請求書 (シートA) 以上、よろしくお願いいたします。
Excel | Visual Basic・100閲覧・50
ベストアンサー
質問の解釈が間違っていたらご免なさい。私の解釈では以下の問題があると考えられますので、対応としては警告のユーザーフォームを表示させることとしました。 例題により、「合計金額」または「入金日」を個別に指示した場合には、該当の指示された行のファイル名と対のファイル名の 行を読み込めば良いと言うことですよね。(添付図参照) 問題なのは、入金日と合計金額を同時に指示した場合です。 例題の「130,000」と「12月3日」では、共にファイル名が共有であるから「5行目」、「6行目」を取り込みますが、合計金額を「140,000」とした場合には、該当の行を検出できません。 そのため、そのような場合に対応して「添付図」のようにユーザーフォームで該当項目が見当たらないことを表示させるようにしています。 また,今回の例題では入金日がそれぞれ異なっていますが、意地悪く9行目の12月7日を12月3日として、例題の金額「130,000」及び「12月3日」で検索せると、当然この9行目も検索の対象となります。 この場合には、先の5行目、6行目はAシートに書込みを行ないますが、その後の9行目の12月3日のファイル名で合計金額「130,000」が検出されませんので、この時点でユーザーフォームで「9行目の12月3日の合計金額130,000の対が見当たりません」と表示を行なうようにしています。 但し、10行目の合計金額が「130,000」であれば、このペアもAシートに取り込みます。 プログラムの説明: 1.ボタン1でユーザーオームを表示させます。 Sub aws_ボタン1_Click() UserForm1.TextBox1.Value = "" UserForm1.TextBox2.Value = "" UserForm1.Show End Sub 2.テキストボックス1に書き込まれた入金日(m/d)では、入金日の検索はできないため、ExitプロシージャでA1セル(Cells(1,1))に仮置きします。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Cells(1, 1).Value = TextBox1.Value End Sub 3.後は書込みのコマンドボタンで検索を実行させます。 Private Sub CommandButton1_Click() With Worksheets("A") If TextBox1.Value <> "" And TextBox2.Value = "" Then For n0 = 3 To 1000 If Cells(n0, 1).Value = "" Then Exit For ElseIf Cells(n0, 1).Value = Cells(1, 1).Value Then For n1 = 3 To 1000 If .Cells(n1, 1).Value = "" Then For r = 1 To 5 .Cells(n1, r).Value = Cells(n0, r).Value Next Exit For End If Next For n2 = 3 To 1000 If Cells(n2, 3).Value = "" Then Exit For ElseIf Cells(n0, 3).Value = Cells(n2, 3).Value Then If n0 <> n2 Then For n1 = 3 To 1000 If .Cells(n1, 1).Value = "" Then For r = 1 To 5 .Cells(n1, r).Value = Cells(n2, r).Value Next Exit For End If Next End If End If Next End If Next ElseIf TextBox1.Value = "" And TextBox2.Value <> "" Then For n0 = 3 To 1000 If Cells(n0, 1).Value = "" Then Exit For ElseIf Cells(n0, 2).Value = Val(TextBox2.Value) Then For n1 = 3 To 1000 If .Cells(n1, 1).Value = "" Then For r = 1 To 5 .Cells(n1, r).Value = Cells(n0, r).Value Next Exit For End If Next For n2 = 3 To 1000 If Cells(n2, 3).Value = "" Then Exit For ElseIf Cells(n0, 3).Value = Cells(n2, 3).Value Then If n0 <> n2 Then For n1 = 3 To 1000 If .Cells(n1, 1).Value = "" Then For r = 1 To 5 .Cells(n1, r).Value = Cells(n2, r).Value Next Exit For End If Next End If End If Next End If Next ElseIf TextBox1.Value <> "" And TextBox2.Value <> "" Then For n0 = 3 To 1000 If Cells(n0, 1).Value = "" Then Exit For ElseIf Cells(n0, 1).Value = Cells(1, 1).Value Then For n2 = 3 To 1000 If Cells(n2, 1).Value = "" Then UserForm2.Label2.Caption = n0 & "行目の" & TextBox1.Value & "の合計金額「" & TextBox2.Value & "」の対が見当たりません。" UserForm2.Show Exit For ElseIf n0 <> n2 Then If Cells(n0, 3).Value = Cells(n2, 3).Value _ And Cells(n2, 2).Value = Val(TextBox2.Value) Then For n1 = 3 To 1000 If .Cells(n1, 1).Value = "" Then For r = 1 To 5 .Cells(n1, r).Value = Cells(n0, r).Value Next Exit For End If Next For n1 = 3 To 1000 If .Cells(n1, 1).Value = "" Then For r = 1 To 5 .Cells(n1, r).Value = Cells(n2, r).Value Next Exit For End If Next Exit For End If
前プログラムの続きです。 End If Next End If Next End If End With TextBox1.Value = "" TextBox2.Value = "" End Sub
質問者からのお礼コメント
ご丁寧にご回答していただき誠にありがとうございました。また、連絡が遅くなりまして申し訳ございませんでした。
お礼日時:1/22 8:20