プロが教えるわが家の防犯対策術!

ある特定の期間を表示したセルを含む行を取り出したいと思います。
   A     B
1)2007/4 2007/9
2)2007/1 2007/12
3)2007/6 2007/8
としたら、1)、3)の行のみ取り出して別シートに表示させたい場合の手法を
探しています。
検索のしようもなく、お知恵を拝借したく、お願いいたします。

A 回答 (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列に当たる列を削除します。

如何でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます
こちらの手法はまだ手が回っていませんが、次にやってみたいと思います。

お礼日時:2007/11/26 21:15

ミスが有りました。


>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

です。
    • good
    • 0
この回答へのお礼

ご教示いただきありがとうございました。
>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 ()の中に分けるものなのでしょうか。

お礼日時:2007/11/26 21:15

私の方もよく質問事項を理解していなかったようです。

すみません

この場合、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へコピーしています
    • good
    • 0

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行まるまるをコピーペーストのように)場合はどうすればよいでしょうか。

補足日時:2007/11/22 20:04
    • good
    • 0

その特定の期間とは?


それが判らないと解答のしようが有りません。

この回答への補足

そうですね。申し訳ありません。
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  取り出さない

というふうにしたいのです。

補足日時:2007/11/22 10:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!