[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定のセルに入力されたら、その行のデータを別シートに抽出する』(まっさん)
Windows 7 Excel2013
下記のような名簿みたいな一覧表作成しました。
A4 B4 C4 D4 E4 F4
No. 名前 コース 担当 入日 卒日
1 Aさん Aコース Bさん 2012/5/1 2013/5/1
2 Cさん Bコース Dさん 2012/6/10
F4列の5〜以下に日付が入力されているか、空白な状態で
日付が入力されてる列だけを抽出して、別のシートに
同じように表示させたいのですがどうしたらいいでしょうか?
よろしくお願いします。
4行目がタイトル行ということだね?
で、『5〜以下に日付が入力されているか』この意味はよくわかるけど 『空白な状態で 日付が入力されてる列』 この意味がわからない。
F列の日付は入力されているけど、A列からE列が空白のもの ということ? でも、それだと、『5〜以下に日付が入力されているか』という条件からは A〜Eに値があろうがなかろうが抽出するんだろうから ちょっと矛盾してくるね。
あっ、もしかしたら日付が入っているもののみ、あるいは日付が入っていないもののみ抽出ということ?
(ぶらっと)
ご指摘のように、4行目には、Noや名前などのタイトルが入っており
以下のセルに各タイトルのデータが入力されている状態です。
抽出の条件として、卒日の列のセルに日付が入力されている行のみを
A4からF4の項目ごと、別シートに抽出したいと思っています。
(まっさん)
ActiveSheet.Range("$A$4:$F$1005").AutoFilter Field:=6, Criteria1:="<>"
ActiveWindow.SmallScroll Down:=-12
Range("A5:F9").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A5").Select
ActiveSheet.Paste
このような感じで、マクロ実行出来たのですが
オートフィルタで抽出しているので
抽出元のSheet1の一覧表がフィルタ掛かった状態になってしまうので
実行しても、Sheet1の表は元のままに(フィルタ解除した状態)できないでしょうか?
よろしくお願いします。
(まっさん)
設定したオートフィルターを解除する方法はいろいろあるけど、手っ取り早いのは そのシート.AutoFIlterMode = False
以下、コード案。
Sub Sample()
With Sheets("Sheet1")
.AutoFilterMode = False '念のためいったん解除
.Range("A4", .Range("A" & .Rows.Count).End(xlUp)).Resize(, 6).AutoFilter Field:=6, Criteria1:="<>"
.AutoFilter.Range.Copy Sheets("Sheet2").Range("A4")
.AutoFilterMode = False '処理後解除
End With
End Sub
(ぶらっと)
数日、試行錯誤して
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveSheet.Range("$A$4:$F$1005").AutoFilter Field:=6, Criteria1:="<>"
Range("A5:$F$1005").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A5").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Add Key:=Range _
("F4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveCell.Select
Sheets("Sheet1").Select
ActiveSheet.Range("$A$4:$F$1005").AutoFilter Field:=6
ActiveCell.Select
End Sub
上記のような感じで出来ました。
ただ、これだと、sheet1でアクティブな状態でしかマクロが実行しないので
Sheet2を開いている状態でも、マクロが実行するように変更したいです。
ご教授よろしくお願いします。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.