
入力した日付から1週間分データ処理する作業をしているのですが、いつも同じところでエラーが出てしまいます。For文を使用せず1日分の処理であればうまくいくのですがオートフィルの解除方法が間違えているのでしょうか・・・どなたか詳しい方教えていただきたいです。
Private Sub cmd実行_Click()
If IsDate(txt日付.Value) = False Then
MsgBox "日付を「2019/10/01」のように入力してください"
txt日付.Value = ""
Exit Sub
End If
Dim Date_select As Date
Date_select = txt日付.Value '入力した日付をDate_select に格納
MsgBox Date_select
Dim fName As String
fName = Application.GetOpenFilename(FileFilter:="Excelブック,*.xlsx*", MultiSelect:=False)
If fName = "False" Then
MsgBox "キャンセルしました。"
Exit Sub '終了
End If
Dim wb As Workbook
Set wb = Workbooks.Open(fName)
'-------- ここ以降に、wbに対する処理を書く --------
Unload Me 'フォームを閉じる
wb.Sheets(1).Range("A2:CD2").AutoFilter '全体にフィルターをかける
Dim MaxGyou As Long '全体の行数をカウント H3から数える←空白がない列だから
MaxGyou = wb.Sheets(1).Range("H3").End(xlDown).Row
'MsgBox "行数は、" & MaxGyou & "件です。", vbInformation
Dim FoundCell As Range '入力した日付と一致する日付があるかどうか判断する
Set FoundCell = wb.Sheets(1).Range("I2:I" & MaxGyou). _
CurrentRegion.Find(What:=Date_select)
If FoundCell Is Nothing Then
MsgBox "入力したデータはありません"
Else
Dim X As Integer
For X = 0 To 6 '1週間分データ処理
Select Case X
Case 1, 2, 3, 4, 5, 6
'2回目以降オートフィルター一旦解除
wb.Sheets(1).Range("A2:CD2").AutoFilter '全体のフィルターを一旦解除
Case Else
'何もしない
End Select
'取得した日付で絞込
wb.Sheets(1).Range("I2").AutoFilter 9, Format(Date_select + X, wb.Sheets(1).Range("I3").NumberFormatLocal)
Dim Input_date_count As Long '入力された日付で絞られた行数をとりあえずカウント
Input_date_count = WorksheetFunction.CountIf(Range("I3:I" & MaxGyou), Date_select + X)
'MsgBox "入力された日付の行数は、" & Input_date_count & "件です。", vbInformation
Select Case X
Case 0 '列の非表示は最初のみ
'連続しない(隣接しない)列の選択と非表示
'列番号A~H、S、AP~AR、BE~CDを非表示
Application.Union(wb.Sheets(1).Range("A:H"), wb.Sheets(1).Range("S:S"), wb.Sheets(1).Range("AP:AR"), _
wb.Sheets(1).Range("BE:CD")).EntireColumn.Hidden = True
Case Else
'何もしない
End Select
With wb.Sheets(1)
.Sort.SortFields.Clear
'優先列1 日付 昇順
.Sort.SortFields.Add _
Key:=wb.Sheets(1).Cells(2, 9), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'優先列2 名称 昇順
.Sort.SortFields.Add _
Key:=wb.Sheets(1).Cells(2, 13), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'優先列3 時刻 昇順
.Sort.SortFields.Add _
Key:=wb.Sheets(1).Cells(2, 10), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange wb.Sheets(1).Range(Cells(2, 1), Cells(MaxGyou, 82)) '全件数と82列までが範囲 ← いつもここでエラー
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
・
・
・
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
読んだだけで、あっているかどうかはわかりませんが、気になる点があります。
With wb.Sheets(1)
With .Sort '←ここは取らない
'浮いている部分がある
.SetRange wb.Sheets(1).Range(Cells(2, 1), Cells(MaxGyou, 82)) '全件数と82列までが範囲
End With
End With
エラーがでるかでないかよりも、その部分は、
Cells(2, 1), Cells(MaxGyou, 82)
ここが浮いています。
With wb.Sheets(1) 'こんな書き方になる
.Sort.SetRange wb.Sheets(1).Range(.Cells(2, 1), .Cells(MaxGyou, 82))
End With
とすると、上のWith wb.Sheets(1)と繋がります。
-------------
MaxGyou = wb.Sheets(1).Range("H3").End(xlDown).Row
ふつうは、ここも、 Cells(Rows.Count, "H").End(xlUp).Row で最後尾を取ります。
No.3
- 回答日時:
No.1~2です。
>.SetRange wb.Sheets(1).Range(Cells(2, 1), Cells(MaxGyou, 82))'全件数と82列までが範囲 ← いつもここでエラー
ここで良いのかな?
Rangeに対しては wb.Sheets(1)のセルである事を示せてますが、中の Cellsに対してはActiveになっているシートのセルを指してます。
なので明確にしてあげるため、
.SetRange wb.Sheets(1).Range(wb.Sheets(1).Cells(2, 1), wb.Sheets(1).Cells(MaxGyou, 82))
とするべきと思いますよ。
・・・・
Input_date_count = WorksheetFunction.CountIf(Range("I3:I" & MaxGyou), Date_select + X)
ここのRangeはActiveなのかwb.Sheets(1)なのか・・・?
他も注意して見直してみて下さい。
No.2
- 回答日時:
No.1です。
ついでに SELECT CASE で CASE が連続するある範囲の場合なら、
https://excel-ubara.com/excelvba1/EXCELVBA322.html
Case 1 To 6
でもいけるかと。
No.1
- 回答日時:
スマホでチラって見ただけですのでまだ見落としがあるかもですが。
Case 1, 2, 3, 4, 5, 6
'2回目以降オートフィルター一旦解除
wb.Sheets(1).Range("A2:CD2").AutoFilter '全体のフィルターを一旦解除
これがコピペで貼り付けたコードであるなら、
Case 1, 2, 3, 4, 5, 6
'2回目以降オートフィルター一旦解除
wb.Sheets(1).Range("A2:CD2").AutoFilter '全体のフィルターを一旦解除
とセル範囲を示す":"が全角文字の":"になってた点ですかね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報