Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6474 / 13644 ツリー ←次へ | 前へ→

【45006】日にちで抽出したいのですが・・・ 初心者 06/12/9(土) 21:03 質問[未読]
【45007】Re:日にちで抽出したいのですが・・・ 初心者 06/12/9(土) 21:09 質問[未読]
【45008】Re:日にちで抽出したいのですが・・・ Mariko 06/12/9(土) 21:59 発言[未読]
【45009】Re:日にちで抽出したいのですが・・・ ponpon 06/12/9(土) 22:45 発言[未読]
【45014】Re:日にちで抽出したいのですが・・・ DY 06/12/10(日) 0:34 発言[未読]
【45049】Re:日にちで抽出したいのですが・・・ 初心者 06/12/11(月) 9:20 お礼[未読]

【45006】日にちで抽出したいのですが・・・
質問  初心者 E-MAIL  - 06/12/9(土) 21:03 -

引用なし
パスワード
   御忙しい所、申し訳ございません。
新しいシートはちゃんとできるのですが、データが
抽出されてきません。どいしたらできるのか教えていただけますでしょうか。
宜しくお願いいたします。

sheet1
A1       B1    C1  D1
日付     社員番号  担当 ファイル
12月15日 ××    ×× ××
12月15日 ××    ×× ××
12月16日 ××    ×× ××
12月17日 ××    ×× ××

のシートをSheet2に12月15日分だけ抽出させたいのですが
下のマクロを組んだのですがデータがsheet2に抽出できません。
どうしてなのか教えていただけますでしょうか。

【45007】Re:日にちで抽出したいのですが・・・
質問  初心者 E-MAIL  - 06/12/9(土) 21:09 -

引用なし
パスワード
   ▼初心者 さん:
>御忙しい所、申し訳ございません。
>新しいシートはちゃんとできるのですが、データが
>抽出されてきません。どいしたらできるのか教えていただけますでしょうか。
>宜しくお願いいたします。
>
>sheet1
>A1       B1    C1  D1
>日付     社員番号  担当 ファイル
>12月15日 ××    ×× ××
>12月15日 ××    ×× ××
>12月16日 ××    ×× ××
>12月17日 ××    ×× ××
>
>のシートをSheet2に12月15日分だけ抽出させたいのですが
>下のマクロを組んだのですがデータがsheet2に抽出できません。
>どうしてなのか教えていただけますでしょうか。

すいません。
マクロは下のように組みました。
宜しくお願いいたします。

Sub 日付抽出()

'---------------------------宣言セクション(各項目 最大1000件まで格納する)---
Dim 日付(1000) As Date
Dim 社員番号(1000) As String
Dim 担当(1000) As String
Dim ファイル(1000) As String


Dim n As Integer
Dim i As Integer

Dim mstr As String

Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim TDate As Date
Dim SName As String

'-----------------------メッセージボックスの表示------------------------------
  mstr = InputBox("何日を抽出しますか?(数字のみ)", "抽出日指定")

'----------------------該当データを一旦メモリ上に格納する---------------------
  Set WS1 = ThisWorkbook.Worksheets("Sheet2")

  n = 0
  i = 1
 
  Do While WS1.Cells(i + 1, "A") <> "" '----------A列で空欄がくるまで繰り返す
 
    TDate = WS1.Cells(i + 1, "A")
 
    If Month(TDate) = Month(mstr) And Day(TDate) = Day(mstr) Then '----メッセージボックスで入力した月のデータを格納
   
      日付(n) = WS1.Cells(i + 1, "A").Value
      社員番号(n) = WS1.Cells(i + 1, "B").Value
      担当(n) = WS1.Cells(i + 1, "C").Value
      ファイル(n) = WS1.Cells(i + 1, "D").Value
      
      n = n + 1
 
    End If
    i = i + 1
  
  Loop

'----------------------抽出シート作成----------------------------------------

  Sheets.Add After:=Worksheets(Worksheets.Count) '----------シート挿入
  SName = Day(mstr) & "日分"  '----------シート名(シート名に『/』は使えない)
  ActiveSheet.Name = SName
 
  Set WS2 = ThisWorkbook.Worksheets(SName)

  WS2.Range("A1").Value = "日付"     '----------項目名
  WS2.Range("B1").Value = "社員番号"
  WS2.Range("C1").Value = "担当"
  WS2.Range("D1").Value = "ファイル"
  
  For i = 0 To n - 1              '-----------メモリ上に格納していたデータを代入
  
    WS2.Cells(i + 2, "A").Value = 日付(i)
    WS2.Cells(i + 2, "B").Value = 社員番号(i)
    WS2.Cells(i + 2, "C").Value = 担当(i)
    WS2.Cells(i + 2, "D").Value = ファイル(i)
    
  Next i

  WS2.Range("A1").Select
  
  
  Range("A2").Select
  ActiveWindow.FreezePanes = True
  Range("A1").Select

  Set WS1 = Nothing
  Set WS2 = Nothing
  
End Sub

【45008】Re:日にちで抽出したいのですが・・・
発言  Mariko  - 06/12/9(土) 21:59 -

引用なし
パスワード
   ▼初心者 さん:
こんな感じで出来ませんでしょうか
Sub test ()
Set MyR = Range("A2", Range("A65536").End(xlUp))
  For Each R In MyR
  If R.Text = "12月15日" Then
    Range(R, R.End(xlToRight)).Copy
    With Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1)
    .PasteSpecial 1
    End With
   End If
  Next
  Application.CutCopyMode = False
End Sub

【45009】Re:日にちで抽出したいのですが・・・
発言  ponpon  - 06/12/9(土) 22:45 -

引用なし
パスワード
   よくは見ていませんが、多分
>mstr = InputBox("何日を抽出しますか?(数字のみ)", "抽出日指定")

>If Month(TDate) = Month(mstr) And Day(TDate) = Day(mstr) Then 

mystrには数字(何桁かはわかりませんが・・)
その数字から、月と日を抜き出せないのだと思います。

入力から日付の取得は怪しいですが、
4桁の数字(mmdd)で判断して、オートフィルターで抽出しています。
最近は、失敗が多いのであぶないですが、試してみてください。


Sub test()
  Dim myDay1 As String
  Dim myday2 As String
  Dim newSH As Worksheet
    
  Do
    myDay1 = Application.InputBox("何日を抽出しますか?(数字のみ:mmdd)", Title:="抽出日指定", Type:=2)
    If Len(myDay1) = 4 Then
      Exit Do
    End If
  Loop
  myday2 = Left(myDay1, 2) & "月" & Right(myDay1, 2) & "日"
  With Sheets("Sheet1")
     .Range("A1").AutoFilter Field:=1, Criteria1:="<=" & myday2, Criteria2:=">=" & myday2
     If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then
      MsgBox "その日付のデータはありません"
      .AutoFilterMode = False
     Else
      Set newSH = Sheets.Add(after:=Sheets(Sheets.Count))
      newSH.Name = myday2
      .AutoFilter.Range.Copy newSH.Range("A1")
      .AutoFilterMode = False
     End If
  End With
End Sub

【45014】Re:日にちで抽出したいのですが・・・
発言  DY  - 06/12/10(日) 0:34 -

引用なし
パスワード
   まず、
>新しいシートはちゃんとできるのですが、

>のシートをSheet2に12月15日分だけ抽出させたいのですが
で、出力先が矛盾しています。


次にコードですが、
>Sub 日付抽出()
>
>'---------------------------宣言セクション(各項目 最大1000件まで格納する)---
>Dim 日付(1000) As Date
>Dim 社員番号(1000) As String
>Dim 担当(1000) As String
>Dim ファイル(1000) As String
>
>
>Dim n As Integer
>Dim i As Integer
>
>Dim mstr As String
>
>Dim WS1 As Worksheet
>Dim WS2 As Worksheet
>Dim TDate As Date
>Dim SName As String
>
>'-----------------------メッセージボックスの表示------------------------------
>  mstr = InputBox("何日を抽出しますか?(数字のみ)", "抽出日指定")
ここで「mstr」の値は InputBox に入力された文字で、
”1”とか”43”などの数字(文字列型ですが)になりますよね?
日付にしてやる必要があるのでは?
>
>'----------------------該当データを一旦メモリ上に格納する---------------------
>  Set WS1 = ThisWorkbook.Worksheets("Sheet2")
WS1は抽出元のデータになるはずなので"Sheet2"ではなく"Sheet1"ですよね?
>
中略
>'----------------------抽出シート作成----------------------------------------
>
>  Sheets.Add After:=Worksheets(Worksheets.Count) '----------シート挿入
>  SName = Day(mstr) & "日分"  '----------シート名(シート名に『/』は使えない)
>  ActiveSheet.Name = SName
> 
>  Set WS2 = ThisWorkbook.Worksheets(SName)
WS2 が追加シートならこれでいいでしょう。
しかし、WS2 が"Sheet2"なら・・・、わかりますね?

ここから先はあまり見てませんが、
ざっと見た限りではそんなに問題はないように思います・・・


ここまでコードが書けるのであれば

>  Set WS1 = ThisWorkbook.Worksheets("Sheet2")
の後に
  MsgBox WS1.Name

  Debug.Print WS1.Name
とか

>    TDate = WS1.Cells(i + 1, "A")
の後に
      MsgBox Month(TDate) & " " & Month(mstr) & " " & Day(TDate) & " " & Day(mstr)

        Debug.Print Month(TDate), Month(mstr), Day(TDate), Day(mstr)

のように変数の中身を確認するデバッグ方法を身に付けるといいと思いますよ。
(ブレークポイントを設定するなども良く使われますね)

【45049】Re:日にちで抽出したいのですが・・・
お礼  初心者 E-MAIL  - 06/12/11(月) 9:20 -

引用なし
パスワード
   皆様、有難うございました。

たくさんの御意見とても勉強になりました。
これからもいろいろ勉強して、がんばりたいと思います。

本当に皆様有難うございました。


▼DY さん:
>まず、
>>新しいシートはちゃんとできるのですが、
>と
>>のシートをSheet2に12月15日分だけ抽出させたいのですが
>で、出力先が矛盾しています。
>
>
>次にコードですが、
>>Sub 日付抽出()
>>
>>'---------------------------宣言セクション(各項目 最大1000件まで格納する)---
>>Dim 日付(1000) As Date
>>Dim 社員番号(1000) As String
>>Dim 担当(1000) As String
>>Dim ファイル(1000) As String
>>
>>
>>Dim n As Integer
>>Dim i As Integer
>>
>>Dim mstr As String
>>
>>Dim WS1 As Worksheet
>>Dim WS2 As Worksheet
>>Dim TDate As Date
>>Dim SName As String
>>
>>'-----------------------メッセージボックスの表示------------------------------
>>  mstr = InputBox("何日を抽出しますか?(数字のみ)", "抽出日指定")
>ここで「mstr」の値は InputBox に入力された文字で、
>”1”とか”43”などの数字(文字列型ですが)になりますよね?
>日付にしてやる必要があるのでは?
>>
>>'----------------------該当データを一旦メモリ上に格納する---------------------
>>  Set WS1 = ThisWorkbook.Worksheets("Sheet2")
>WS1は抽出元のデータになるはずなので"Sheet2"ではなく"Sheet1"ですよね?
>>
>中略
>>'----------------------抽出シート作成----------------------------------------
>>
>>  Sheets.Add After:=Worksheets(Worksheets.Count) '----------シート挿入
>>  SName = Day(mstr) & "日分"  '----------シート名(シート名に『/』は使えない)
>>  ActiveSheet.Name = SName
>> 
>>  Set WS2 = ThisWorkbook.Worksheets(SName)
> WS2 が追加シートならこれでいいでしょう。
>しかし、WS2 が"Sheet2"なら・・・、わかりますね?
>
>ここから先はあまり見てませんが、
>ざっと見た限りではそんなに問題はないように思います・・・
>
>
>ここまでコードが書けるのであれば
>
>>  Set WS1 = ThisWorkbook.Worksheets("Sheet2")
>の後に
>  MsgBox WS1.Name
>や
>  Debug.Print WS1.Name
>とか
>
>>    TDate = WS1.Cells(i + 1, "A")
>の後に
>      MsgBox Month(TDate) & " " & Month(mstr) & " " & Day(TDate) & " " & Day(mstr)
>や
>        Debug.Print Month(TDate), Month(mstr), Day(TDate), Day(mstr)
>
>のように変数の中身を確認するデバッグ方法を身に付けるといいと思いますよ。
>(ブレークポイントを設定するなども良く使われますね)

6474 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free