いつもお世話になっております。
タイトルの件で、質問させていただきます。
★前提
・1行目に、項目が入力されており、項目数・行数は毎回変わります。
・1行目と1列目に空白はありませんが、その他は空白セルもあります。
★やりたいこと
・1枚のシートで管理しているデータを、項目にフィルターをかけ、結果を別のシートに貼り付けたい(添付資料参照)。
・項目は、入力ボックスで自分で決めて、分割したいです。
・データの行数・列数に左右されないコードにしたい。
ネットで検索したサンプルを使って下記の様に作ってみましたが、オートフィルターの所でエラーが出てしまいます。
Dim wb As Workbook
Dim ws As Worksheet
Dim c, s As Variant, d As Variant
Dim rng As Range, i As Integer
Dim Lcol1 As Range, Lcol2 As Range
Dim Lrow As Long
Sub Bunkatu()
Set wb = ThisWorkbook
Set ws = wb.Worksheets("管理台帳検索")
Set Lcol1 = ws.Cells(1, Columns.Count).End(xlToLeft) '1行目最終セルの取得
'分割対象列が決まるか中止までループする
Do
s = InputBox("分割項目を入力してください。") '項目名取得
If s = "" Then Exit Sub '空白なら終了
Set rng = ws.Range(Cells(1, 1), Lcol1).Find(s, LookAt:=xlWhole) '項目名を1行目で探す
If Not rng Is Nothing Then Exit Do '見つけたら抜ける
MsgBox "項目名に[" & s & "]が見つかりません。"
Loop
If MsgBox("[" & rng.Value & "]で分割しますか?", vbYesNo) <> vbYes Then Exit Sub '最終確認
c = rng.Column '対象列
'指定列の重複しないデータの取得し、最終列の隣に追加する
Set Lcol2 = Lcol1.Offset(0, 1) '最終セルの隣
ws.Columns(c).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Lcol2, Unique:=True
d = ws.Range(Lcol2, Cells(Rows.Count, Lcol2.Column).End(xlUp)) '配列取得
For i = UBound(d) To 2 Step -1 'd配列の2行目から
Sheets.Add after:=ws
ActiveSheet.Name = d(i, 1)
ws.Range(Columns(1), Lcol1.EntireColumn).AutoFilter field:=c, Criteria1:=d(i, 1) '対象データをオートフィルタ
ws.AutoFilter.Range.Copy ActiveSheet.Range("A1") '抽出データを挿入
Next
ws.AutoFilterMode = False 'フィルター解除
End Sub
上のコードで、【ws.Range(Columns(1), Lcol1.EntireColumn).AutoFilter field:=c, Criteria1:=d(i, 1)】の部分で、エラーが出ます。
エラー内容は「実行時エラー’1004’:’Range’メソッドは失敗しました:'_Worsheet'オブジェクト」となっています。
いろいろ調べましたが、解決には至らず、こちらで質問させていただきました。
エラーの理由や修正方法を教えていただければ幸いです。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数で、範囲内の最後のセ...
-
更新前と更新後の差分をVBAを使...
-
エクセルVBAを使ってセルに日付...
-
あるexcel表からチェックボック...
-
値の入っているセルのうち、一...
-
エクセル 8ケタの数字から日数...
-
Excel関数:「0」を除いた標準...
-
エクセル セル内の重複する文...
-
複数の候補列から、検索値と一...
-
エクセルで何種類のデータがあ...
-
エクセル2000で〇×の並び替えを...
-
オートフィルのマクロを作りたい
-
【エクセル】区切り位置で分割...
-
EXCEL 階段状のグラフ
-
ピボットテーブル 0個の行を...
-
スプレッドシートでドロップダ...
-
Excelで順番を逆に
-
excel vba 複数項目の集計
-
VLOOKUPの検索で該当するものが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
Excel関数で、範囲内の最後のセ...
-
エクセルに入力された日付「S40...
-
値の入っているセルのうち、一...
-
ピボットテーブル 0個の行を...
-
SUMIFで数値が入力されているセ...
-
エクセルで何種類のデータがあ...
-
複数の候補列から、検索値と一...
-
【Excel】歯抜けデータの集約
-
更新前と更新後の差分をVBAを使...
-
SUMPRODUCT関数 行が増えても...
-
A and B or Cの合計の出し方
-
SUMIFとCOUNTIFの違いについて
-
エクセル 8ケタの数字から日数...
-
VLOOKUPの検索で該当するものが...
-
Excelのマクロでソートがうまく...
-
ピボットで複数の区切りでグル...
-
Excelで複数列かつ複数行分の一...
おすすめ情報