- 締切済み
(Excel2000)特定の期間を表示したセルを含む行を取り出したい
ある特定の期間を表示したセルを含む行を取り出したいと思います。 A B 1)2007/4 2007/9 2)2007/1 2007/12 3)2007/6 2007/8 としたら、1)、3)の行のみ取り出して別シートに表示させたい場合の手法を 探しています。 検索のしようもなく、お知恵を拝借したく、お願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
このA列とB列の日付「らしき」ものが、どんな内容かによって微妙に変わってきます。 つまり、A列とB列がシリアル値なのか単なる文字列かということです。 でも、#2さんの提示されたVBAで出来たということは、シリアル値なのでしょうね。 VBAを使わないのであれば、 データの入っているシートにワーク列を作ります(仮にZ列とします) Z列に =AND(A1>=DATE(2007,4,1),B1<=DATE(2007,9,30)) として。下へコピー。 次に、Z1を選択し、「データ」-「オートフィルタ」でOKをクリック。 Z列の右に表示された「▼」をクリックして「TRUE」をクリック。 条件に合致した行だけが表示されるで、それらの行を全て選択してコピー。 別シートに移動して、A1を選択して貼り付ければOKです。 あとは、貼り付けた先のシートから、元シートのZ列に当たる列を削除します。 如何でしょう。
- S-Fuji
- ベストアンサー率36% (592/1624)
ミスが有りました。 >If Worksheets(1).Cells(i, 1) > DateValue("2007/3/31") _ >And Worksheets(2).Cells(i, 2) < DateValue("2007/10/1") Then ここが If Worksheets(1).Cells(i, 1) > DateValue("2007/3/31") _ And Worksheets(1).Cells(i, 2) < DateValue("2007/10/1") Then です。
お礼
ご教示いただきありがとうございました。 >If Worksheets(1).Cells(i, 1) > DateValue("2007/3/31") _ の「Cells(i,1)」が1つ目のセルを指していることがわかるまでちょっと悩みましたが、無事取り出せました。 これでやってみたところ、コピー先であるアクティブのシートに参照元のシートの該当行を取り出し、同じ場所に(2列目が該当すればコピー先も2行目へ)コピーする、という結果になりました。 今は、取り出した結果に対してC1の列をキーにしてソートをかけたくて考えています。 VBAのヘルプを(MSExcelのヘルプです)をみつつ追加してみています。 ここから質問の内容が最初とずれますが、ヘルプでは Worksheets("test1").Range("A1").Sort _ Key1:=Worksheets("test1").Range("C1") のように書くサンプルがありました。これをSubLineCP()の中に追加してもうまくいかない状態です。 違う動きは違うSub ()の中に分けるものなのでしょうか。
- S-Fuji
- ベストアンサー率36% (592/1624)
私の方もよく質問事項を理解していなかったようです。すみません この場合、VBAによる方法が良いかと思います。 VBエディタを起動し、標準モジュールを挿入、その中に以下の分を書いて下さい。 Sub LineCP() Dim i As Integer For i = 1 To 100 If Worksheets(1).Cells(i, 1) > DateValue("2007/3/31") _ And Worksheets(2).Cells(i, 2) < DateValue("2007/10/1") Then Worksheets(1).Rows(i & ":" & i).Copy Worksheets(2).Rows(i & ":" & i).Select ActiveSheet.Paste Application.CutCopyMode = False End If Next i End Sub -------------ここまで For文の「100」は、検索する行数です。 Sheet1から検索し、Sheet2へコピーしています
- S-Fuji
- ベストアンサー率36% (592/1624)
Sheet1のデータを別シートに取り出すとし「2007/4」等のデータは、日付データとして入力されているとしています。 表示したいシートのA1に =IF(Sheet1!$A1>DATE(2007,3,31),IF( Sheet1!$B1<DATE(2007,9,30),Sheet1!A1,""),"") を入力、A1のセルを選択し、セルの右下にマウスを持って行くとカーソルが「+」に変わるので、そのままB1に引っ張って行きましょう。 B1にも数式が入ったと思います。 次に、A1とB1を選択した状態でB1側の右下へマウスを持って行き、同じように、必要なセルまで下へ引っ張っていきましょう。
補足
ありがとうございます。 やってみたところ、なんとか該当セルを取り出すことができました。 言葉がさらに足りなかったようで、たとえば 1)の行をすべて取り出したい(つまり、1行まるまるをコピーペーストのように)場合はどうすればよいでしょうか。
- S-Fuji
- ベストアンサー率36% (592/1624)
その特定の期間とは? それが判らないと解答のしようが有りません。
補足
そうですね。申し訳ありません。 A列とB列を比較して、(A列)2007/4以上でかつ(B列)2007/9以下に該当する行を取り出したいと思っています。 ですので、たとえば A B 1)2007/4 2007/9 取り出す 2)2007/1 2007/12 取り出さない 3)2007/6 2007/8 取り出す 4)2007/5 2007/10 取り出さない 5)2007/3 2007/9 取り出さない というふうにしたいのです。
お礼
ありがとうございます こちらの手法はまだ手が回っていませんが、次にやってみたいと思います。