[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストボックスの日付以前のデータを抽出』(ゆき)
たびたびお世話になります。
の質問の関連なのですが、「出荷データ」というシートから、条件を指定して売上がされていない データを抽出しようとしています。
抽出条件は、 ・「営業担当」(出荷データシートのI列) ・「締日」(出荷データシートのE列) ・「納品日」(出荷データシートのO列)
で、例えば ・「営業:田中」&「締日:末締」&「納品日:2013/1/31まで」 という条件でデータを絞り込み、「未計上_雛形」というシートをコピーし、コピーしたシートに 抜き出したデータを書き込みたいです。
それで、「営業担当」と「締日」で絞り込む方法は分かったのですが、「納品日」で絞り込む方法がわかりません。
ユーザーフォームに、ComboTanto(営業担当)、ComboSime(締日)、TextNohin(納品日)という コントロールを配置しました。
下記のコードは、「営業担当」と「締日」で絞り込むところまでのコードです。 (いずれかの条件が「指定なし」(納品日の場合はテキストボックスが空欄)の場合もあります)
Option Explicit Public lsh As Worksheet
Private Sub UserForm_Initialize()
With ComboTanto .AddItem "田中" .AddItem "鈴木" .AddItem "指定なし"
End With
With ComboSime .AddItem "15日" .AddItem "20日" .AddItem "末締" .AddItem "指定なし"
End With
End Sub
Private Sub CommandButton1_Click()
Dim ws1 As Worksheet Dim FCell As Range Dim z As Long
If ComboTanto.Value = "" Or ComboSime.Value = "" Then MsgBox "抽出条件を指定してください" Exit Sub End If
Set ws1 = ThisWorkbook.Worksheets("出荷データ")
z = ws1.Range("B" & ws1.Rows.Count).End(xlUp).Row
Set FCell = ws1.Range("L3:L" & z).Find(what:="")
If FCell Is Nothing Then MsgBox "未計上データはありません" Exit Sub End If
If ComboTanto.Value = "指定なし" And ComboSime.Value = "指定なし" Then Call 全件抽出 ElseIf ComboTanto.Value <> "指定なし" And ComboSime.Value = "指定なし" Then Call 担当指定抽出 ElseIf ComboTanto.Value = "指定なし" And ComboSime.Value <> "指定なし" Then Call 締日指定抽出 Else Call 全指定抽出 End If
End Sub
Private Sub 全指定抽出()
Dim cnt As Long Dim shName As String Dim bName As String Dim ws1 As Worksheet Dim ws2 As Worksheet Dim lRow As Long Dim z As Long Dim i As Long Dim j As Long Dim tanto As String Dim sime As String Dim DataCnt As Long
Set ws1 = ThisWorkbook.Worksheets("出荷データ")
z = ws1.Range("B" & ws1.Rows.Count).End(xlUp).Row
tanto = ComboTanto.Value sime = ComboSime.Value
DataCnt = 0 cnt = 1 bName = ws1.Range("C1").Text & "未売上リスト_" & tanto & "_" & sime ThisWorkbook.Sheets("未計上_雛形").Copy After:=Sheets(Sheets.Count)
shName = bName
Do If Not IsObject(Evaluate("'" & shName & "'!A1")) Then Exit Do cnt = cnt + 1 shName = bName & "(" & cnt & ")" Loop
ActiveSheet.Name = shName Set lsh = ThisWorkbook.Sheets(Sheets.Count)
'抽出条件を見出しに書き出し lsh.Range("C1").Value = Date lsh.Range("H1").Value = ComboTanto.Value lsh.Range("J1").Value = ComboSime.Value lsh.Range("K1").Value = TextNohin.Text & "迄に納品済"
For i = 3 To z
lRow = lsh.Range("B" & lsh.Rows.Count).End(xlUp).Row
j = lRow + 1
If ComboSime.Value = ws1.Cells(i, 5).Value And ComboTanto.Value = ws1.Cells(i, 9).Value And ws1.Cells(i, 12) = "" Then lsh.Cells(j, 1).Value = ws1.Cells(i, 1).Value lsh.Cells(j, 2).Value = ws1.Cells(i, 15).Value lsh.Cells(j, 3).Value = ws1.Cells(i, 2).Value lsh.Cells(j, 4).Value = ws1.Cells(i, 3).Value lsh.Cells(j, 5).Value = ws1.Cells(i, 4).Value lsh.Cells(j, 6).Value = ws1.Cells(i, 5).Value lsh.Cells(j, 7).Value = ws1.Cells(i, 6).Value lsh.Cells(j, 8).Value = ws1.Cells(i, 7).Value lsh.Cells(j, 9).Value = ws1.Cells(i, 8).Value lsh.Cells(j, 13).Value = ws1.Cells(i, 11).Value
DataCnt = DataCnt + 1
End If Next i
'該当データがなかったらコピーしたシートを削除してメッセージを表示 If DataCnt = 0 Then Application.DisplayAlerts = False lsh.Delete Application.DisplayAlerts = True Worksheets("操作メニュー").Activate MsgBox "該当データはありません" Exit Sub End If
End Sub
(その他の抽出プロシージャは省略します)
「営業担当」や「締日」は「条件に一致するもの」を指定すればよいのでできたのですが、 例えば「出荷データ」シートのO列に
〜 O 1 2 3 納品日 4 2013/1/10 5 2013/1/15 6 2013/2/1 7 2013/1/20 8 2013/1/25
のように日付が順不同で入っていて、「2013/1/20までのデータ(1/20も含む)」を指定する 方法がわかりません…
※上記の例だったら、4行目・5行目・7行目が該当データ
テキストボックスに日付を入れて「その日付まで」という指定の仕方をするにはどうしたらよいでしょうか。
Range("O4").Value <= CDate(TextNohin.Value) とか?
テキストボックスに日付データが入る前提で書かれていますが、 日付形式で入力されていることを判定する必要はありませんかね? アクセスが入っているのであれば、カレンダーコントロールも使えますよ。
(ROUGE)
(ROUGE)さまありがとうございます。
>日付形式で入力されていることを判定する必要はありませんかね? 稀に、「出荷(納品)されていないけど売上する必要がある」場合があり、その場合はダミーで「2013/1/1」 を入力することにしました。 (これまでは「-」とか「キャンセル」といった文字列を入れていましたが日付の判定が難しいかと思って…)
アクセスは正直言って私があまり使えません… 一応PCに入ってはいますが…
Range("O4").Value <= CDate(TextNohin.Value) これを今から試してみます。
(ゆき)
> アクセスは正直言って私があまり使えません… > 一応PCに入ってはいますが… 実際にアクセスを使うわけではなくて、アクセスがインストールされている環境であれば使えるということです。 VBEの画面で、[ツール]-->[その他のコントロール]とすすみ、[Microsoftカレンダーコントロール]にチェック を入れると、使うことができます。 カレンダーの日付を押すので、とっても使いやすいと思いますよ。 日付の判定はIsDateとか使えばよさそうですが。 (ROUGE)
(ROUGE)さまありがとうございます。
よく見たら会社のPCにアクセスが入っていませんでした…
(ゆき)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.