エクセルデーターベースで、職員の勤務表管理をしています。
ある条件によってF列に”○”、”△”、”×”などの記号が入力されています。
この中で”○”だけを抜出、抜き出したものをすべて別シートに貼り付けたいのです。
Selection.AutoFilter Field:=6, Criteria1:="○"
Range("a1").CurrentRegion.Copy Destination:=Range("maru!a4")
本を見て、以上のようなマクロを書いてみたのですが、”maru”シートはずっと空白のままです。
どうすれば良いのでしょうか?
データーを抽出する日によって、”○”の数は変わるので、セル数字を入れずにその時の最後の○表示のセルまでを、コピーするようにしたいのです。
いつもこちらに頼ってすみません。
どうぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
おはようございます。
> Range("maru!a4")
これはこれで大丈夫です。ただし、推奨できる書き方ではありません。
AutoFilter は使う前に、一度初期化した方が良さそうですね。ときおり、
不安定です。また、このマクロは、
「元データがあるシートをアクティブにしてから実行」
する必要があります。理由は、Selection が使われているからです。
Selection というのは、酷く曖昧です。Selection とは、マクロの実行時に
・選択していたセル(単一とは限らず複数のセル範囲であることも)
・選択していたシェープなどのオブジェクト
などの様にユーザーがその時選択していたモノを表しますから、不定です。
したがって、例えば、元データのシート以外を選択中にこのマクロを実行
した場合、意図しない場所にオートフィルターが設定されてしまう可能性
があります。
これを回避するなら、オートフィルターを設定するセルを明示的に指定した
コードを書くようにして下さい。こんな感じです。
Sub Sample()
With ThisWorkbook.Sheets("元データのシート名").Range("A1")
.AutoFilter 'オートフィルターの初期化
.AutoFilter Field:=6, Criteria1:="○"
.CurrentRegion.Copy Destination:= _
ThisWorkbook.Sheets("maru").Range("A4")
End With
End Sub
No.4
- 回答日時:
VBAをマクロというような初心者は、なぜかコピーに拘るようだが、初めは代入のコードを使うう方が良い(書式等が移らないが、移す手もある)。
技量があがってからコピーを使う方法を検討すると良い。下記は別の課題でも応用が広いはず。
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
'---
d = sh1.Range("A65536").End(xlUp).Row
k = 1
For i = 1 To d
If sh1.Cells(i, "F") = "○" Then
sh2.Cells(k, "A") = sh1.Cells(i, "A")
sh2.Cells(k, "B") = sh1.Cells(i, "B")
sh2.Cells(k, "C") = sh1.Cells(i, "C")
sh2.Cells(k, "D") = sh1.Cells(i, "D")
sh2.Cells(k, "E") = sh1.Cells(i, "E")
sh2.Cells(k, "F") = sh1.Cells(i, "F")
k = k + 1
End If
Next i
End Sub
ーーーー
解説
Set sh1 = Worksheets("Sheet1")
()内を今の基データシートのシート名に変えること
Set sh2 = Worksheets("Sheet2")
()内を抜き出し後のシート名に替えること。manu?
d = sh1.Range("A65536").End(xlUp).Row
A列の最終行番号数を捉えている
抜き出し後シートの、抜き出しデータの記入スタート行番号
For i = 1 To d
第1行目からd行まで繰り返し。
見出し行があって、デー行が3行目から始まっていると、
For i = 3 To d
If sh1.Cells(i, "F") = "○" Then
基シートのF列が○だったら
sh2.Cells(k, "A") = sh1.Cells(i, "A")
基シートのA列データを抜き出しシートのA列に代入
以下同じ。列数だけ繰り返し
For j = 1 To 6
sh2.Cells(k, j) = sh1.Cells(i, j)
Next j
とすると多列の場合コード行数が少なくて済む。
k = k + 1
抜き出し表ですぐ下の行に次に書き込む準備
No.2
- 回答日時:
最後のRange("maru!a4")のところが問題じゃないかと思います。
Destination:=Worksheets("maru").Range("A4")に書き換えて実行してみて下さい。
それでもダメなら、私が使っているコードを利用してみて下さい。
シート名と抽出条件は変えて下さいね。
Worksheets("sheet1").Range("A1").AutoFilter field:=1, Criteria1:="東京都"
Worksheets("sheet1").Range("A2").CurrentRegion.Copy _
Destination:=Worksheets("sheet2").Range("A2")
No.1
- 回答日時:
オートフィルタを使ったほうが簡単に思います。
○データのある一番上のひとつ上のセルを選択して,
メニューのデータ→オートフィルタ
でドロップダウンボックスがでますから,
そこで○なら○を選択すると○の入力されている行だけの表になります。
その状態で選択して,別のシートに貼り付ければOKです。
ちょっと目的と違いますかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 前回質問の続きになりますが、下記マクロでシート1からシート2の抽出項目セルB3「りんご」とセルC2「 2 2022/12/02 17:37
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
エクセルのブック分割マクロを...
-
VBAで繰り返しコピーしながら下...
-
エクセルの保護で、列の表示や...
-
エクセルの列の限界は255列以上...
-
エクセルで横並びの複数データ...
-
【VBA】複数のシートの指定した...
-
Excelで全てのシートに一気に列...
-
【条件付き書式】countifsで複...
-
エクセルのグラフのマクロでエ...
-
EXCEL 関数を教えてください。...
-
SUMPRODUCTにて別シートのデー...
-
エクセルVBA 行追加時に自...
-
エクセルでIPマッピング表を作る
-
エクセルVBAで、ある文字を含ん...
-
シートをまたぐ条件付き書式に...
-
【Excel】ある文字列からはじま...
-
ある数値に対して、値を返す数...
-
エクセルVBA データを別シート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
excel 複数のシートの同じ場所...
おすすめ情報