エクセル2007について教えてください。


B列のデーター(データー形式はランダムな日付)を検索対象として、月曜日のデーター行だけを別シートに抽出する方法(関数orマクロ)を教えてください。

回答の条件
  • 1人3回まで
  • 登録:2010/02/11 17:43:37
  • 終了:2010/02/11 22:30:44

ベストアンサー

id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692010/02/11 18:13:28

ポイント100pt

3通りどうぞ


① Excelの機能+weekday関数

C列の数式を

=WEEKDAY(B1)

のようにして、C列で並べ替えてB列の2の行の選択してコピー


② 関数だけで

B列のデータがSheet1の場合は、別シートのセルの数式を

=INDEX(Sheet1!$B$1:$B$100,SMALL(IF(WEEKDAY(Sheet1!$B$1:$B$100)=2,ROW(Sheet1!$B$1:$B$100),100),ROW()))

と入れて、Ctrl+Shift+Enterで配列数式にして下にコピー


③ マクロでSheet1のB列のデータをSheet2のA列に抽出

Sub Macro()
    Dim i As Long
    Dim lastRow As Long
    Dim r As Long
    
    With Worksheets("Sheet1")
    lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
    
    r = 1
    For i = 1 To lastRow
        If Weekday(.Cells(i, "B").Value) = 2 Then
            Worksheets("Sheet2").Cells(r, "A").Value = .Cells(i, "B").Value
            r = r + 1
        End If
    Next i
    End With
End Sub
id:dongwu

SALINGERさん

詳細なご回答いただきありがとうございました。

凄いですね。自分でも出来るようになりたいのですが難しいです。。。

2010/02/11 22:28:18

その他の回答(1件)

id:ana_log No.1

ana_log回答回数114ベストアンサー獲得回数222010/02/11 18:05:59

ポイント60pt

たとえば項目は下記のように並んでいたとします

No 	年月日 	項目名 	収入 	支出 	適用
3	1	2007/4/1	繰越 	12,345	
4	2	2007/4/10	税金 	5,000

G2に「=WEEKDAY(C2,2)」と入力して全ての行にドラッグして数値を表示します

関数ヘルプを見たらわかると思いますが、1と表示されているものが月曜日になります

これをオートフィルタをかけて1の値だけを抽出し、全ての行をコピー、対象のシートにペースト

というのはどうでしょうか

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-filter....


一度でやりたいのであれば他の方法のほうがいいかもしれません

id:dongwu

ana logさん

ご回答いただきありがとうございました。

助かりました。

2010/02/11 22:26:32
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692010/02/11 18:13:28ここでベストアンサー

ポイント100pt

3通りどうぞ


① Excelの機能+weekday関数

C列の数式を

=WEEKDAY(B1)

のようにして、C列で並べ替えてB列の2の行の選択してコピー


② 関数だけで

B列のデータがSheet1の場合は、別シートのセルの数式を

=INDEX(Sheet1!$B$1:$B$100,SMALL(IF(WEEKDAY(Sheet1!$B$1:$B$100)=2,ROW(Sheet1!$B$1:$B$100),100),ROW()))

と入れて、Ctrl+Shift+Enterで配列数式にして下にコピー


③ マクロでSheet1のB列のデータをSheet2のA列に抽出

Sub Macro()
    Dim i As Long
    Dim lastRow As Long
    Dim r As Long
    
    With Worksheets("Sheet1")
    lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
    
    r = 1
    For i = 1 To lastRow
        If Weekday(.Cells(i, "B").Value) = 2 Then
            Worksheets("Sheet2").Cells(r, "A").Value = .Cells(i, "B").Value
            r = r + 1
        End If
    Next i
    End With
End Sub
id:dongwu

SALINGERさん

詳細なご回答いただきありがとうございました。

凄いですね。自分でも出来るようになりたいのですが難しいです。。。

2010/02/11 22:28:18
  • id:SALINGER
    失礼。マクロは行ごとなので次のように変更しておいてください。
    Worksheets("Sheet2").Cells(r, "A").Value = .Cells(i, "B").Value

    .Rows(i).Copy Worksheets("Sheet2").Rows(r)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません