Quantcast
Channel: OKWAVE 最新質問(Visual Basic/257)【本日】
Viewing all articles
Browse latest Browse all 7264

VBA; ユーザーフォームからの処理 - 2

$
0
0
申し訳ございませんが、質問させてください。 eden3616さん、補足入力できなかったので再質問しています Excel 2007を使用しています。 下記のようなことを考えています。 1. テキストボックスにYYYY/M形式の日付データを入力 2. 実行ボタンを押下。 3. 日付データを確認 4. オリジナルシート、日付データ(A列)、商品番号(B列)、商品名(C列)、購入状況(D列)から条件に   該当した行をサマリーシートにコピー。   オリジナルの3行目のベッダー情報は先頭に置いて、その下に該当行を付ける。 オリジナル; 注文日付商品番号商品名購入状況 2010/9312000 ノコギリ 未着手 2011/12   542000ハンマー   購入済み ... ... 2014/5312000 ノコギリ   n/a サマリー; 注文日付商品番号商品名購入状況 2011/12   542000ハンマー   購入済み (1)前提条件 ・ブック名は「商品検索」。  シート名は「オリジナル」、「実行」、「サマリー」(出力先)があり、  ボタン操作は実行シートで行います。 ・オリジナル3行目に項目行が1行あり、4行目からデータが入力されています。 ・オリジナルの行数は常に変動しますのでサマリーシートは1行目に項目行(1行)、2行目から  行コピーして貼り付けます。 (2)ボタン処理 検索条件は入力されたYYYY/M形式の日付データ(A列)以前、購入状況(D列)で状況が"入荷済み"もしくは"手配中"以外の行をリストします。 質問; コンパイルエラー(型が一致しません)が解けません。 アドバイスとサンプルをいただけませんか? あと、シートが無い等のエラー処理はどのような処理になりますか? Private Sub CB1_Click() '変数を定義 Dim i As Long Dim maxRow As Long Dim cnt As Long Dim inSheet As Worksheet Dim outSheet As Worksheet '入出力先のシートをオブジェクト変数へ格納 Set inSheet = Worksheets("オリジナル") Set outSheet = Worksheets("サマリー") 'テキストボックスの内容を判定 If (Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value = "") Or _  (Not IsDate(Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value)) Then MsgBox "日付が正しく入力されていません" Exit Sub End If '最終行番号を取得 maxRow = inSheet.Cells(Rows.Count, "A").End(xlUp).Row 'オリジナルシートの最終行番号で分岐処理 If maxRow > 3 Then '出力先を削除してヘッダーをコピー outSheet.Cells.Delete inSheet.Range("A3").EntireRow.Copy outSheet.Range("A1") Application.CutCopyMode = False Else '4行目以降にデータが入力されていなければメッセージで終了 MsgBox "該当データがありません" Exit Sub End If '4行目から最終行まで繰り返し For i = 4 To maxRow 'J列が日付であれば処理 If IsDate(inSheet.Cells(i, "A").Value) Then 'テキストボックスの年/月以前とA列、オリジナルシートのD列(購入状況)が入荷済み、手配中以外で一致した行をコピー If Year(inSheet.Cells(i, "A").Value) <= Year(Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value) And _ Month(inSheet.Cells(i, "A").Value) <= Month(Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value) And _ inSheet.Cells(i, "D").Value <> "入荷済み" Or "手配中" Then'←ここでコンパイルエラーになります。 inSheet.Rows(i).Copy outSheet.Rows(cnt + 2, "A") cnt = cnt + 1 End If End If Next i '結果表示 If cnt > 0 Then MsgBox cnt & "件、該当しました" Else MsgBox "該当データがありません" End If End Sub

Viewing all articles
Browse latest Browse all 7264

Trending Articles