Excel VBA質問箱 IV

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

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


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

【45888】データ抽出のやり方 初心者です 07/1/17(水) 1:42 質問[未読]
【45892】Re:データ抽出のやり方 Jaka 07/1/17(水) 9:59 回答[未読]

【45888】データ抽出のやり方
質問  初心者です E-MAIL  - 07/1/17(水) 1:42 -

引用なし
パスワード
   いつもいつもすいません。
月別の売上表があります。
1ヶ月だけの抽出のマクロはできたのですが
例えば1月〜3月まで抽出したいときは
どうしたらいいでしょうか。

また、集計のマクロがあるのですが、
1/12,1/13,1/14,2/12,2/14と日付中心に集計をすると
1/12の集計、1/13の集計と1日づつでてきてしまいます。
1月の合計、2月の合計、とでてくる集計のやり方は、ありますでしょうか。
申し訳ないのですが教えていただけますでしょうか。

売上表
   A  B  C  D   E   F   G 
1 売上 NO コード 品名 単価 数量 計
2 1/12 1  1111 スカート  10   1  10
3 1/12 1  1111 スカート  10   1  10
4 1/13 1  1111 スカート  10   1  10
5 2/12 1  1111 スカート  10   1  10
6 2/14 1  1111 スカート  10   1  10
7 3/12 1  1111 スカート  10   1  10

   A   B  C  D   E   F   G 
1 売上  NO コード 品名 単価 数量 計
2 1/12  1  1111 スカート  10   1  10
3 1/12  1  1111 スカート  10   1  10
41/12集計 2  1111 スカート  10   2  20
5 1/13  1  1111 スカート  10   1  10
61/13集計 2  1111 スカート  10   1  10


抽出・集計マクロ
Sheets("仕入日計").Select
 
'----------------宣言セクション(各項目 最大1000件まで格納する)---
Dim 仕入(1000) As Date
Dim No(1000) As Single
Dim コード(1000) As Single
Dim 品名(1000) As String
Dim 単価(1000) As Single
Dim 数量(1000) As Single
Dim 計(1000) As Single

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("仕入日計")

  n = 0
  i = 1
 
  Do While WS1.Cells(i + 1, "A") <> "" '----A列で空欄がくるまで繰り返す
 
    TDate = WS1.Cells(i + 1, "A")
 
     If Year(TDate) = Year(mstr) And Month(TDate) = Month(mstr) Then '----メッセージボックスで入力した月のデータを格納
   
      仕入(n) = WS1.Cells(i + 1, "A").Value
      No(n) = WS1.Cells(i + 1, "B").Value
      コード(n) = WS1.Cells(i + 1, "C").Value
      品名(n) = WS1.Cells(i + 1, "D").Value
      単価(n) = WS1.Cells(i + 1, "E").Value
      数量(n) = WS1.Cells(i + 1, "F").Value
      計(n) = WS1.Cells(i + 1, "G").Value
      
        n = n + 1
      End If
    i = i + 1
   Loop

Sheets("仕入月別").Select
  Columns("A:G").Select
  Selection.ClearContents
  Range("A1").Select
 
  Set WS2 = ThisWorkbook.Worksheets("仕入月別")
  WS2.Range("A1").Value = "仕入"     '----------項目名
  WS2.Range("B1").Value = "No"
  WS2.Range("C1").Value = "コード"
  WS2.Range("D1").Value = "品名"
  WS2.Range("E1").Value = "単価"
  WS2.Range("F1").Value = "数量"
  WS2.Range("G1").Value = "計"
  
  For i = 0 To n - 1   '-----------メモリ上に格納していたデータを代入
    WS2.Cells(i + 2, "A").Value = 仕入(i)
    WS2.Cells(i + 2, "B").Value = No(i)
    WS2.Cells(i + 2, "C").Value = コード(i)
    WS2.Cells(i + 2, "D").Value = 品名(i)
    WS2.Cells(i + 2, "E").Value = 単価(i)
    WS2.Cells(i + 2, "F").Value = 数量(i)
    WS2.Cells(i + 2, "G").Value = 計(i)
    
  Next i

 Sheets("仕入月別").Select
   Range("A1").Select
  
  Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(6, 7), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
  
     ↑
   集計のマクロ  
  
  Set WS1 = Nothing
  Set WS2 = Nothing
  
End Sub

【45892】Re:データ抽出のやり方
回答  Jaka  - 07/1/17(水) 9:59 -

引用なし
パスワード
   インプットボックスを使わないで、フォームを使った方がいいと思いますけど、
いちいち文字を分解しなくてすむし...。
インプットボックスだとこんな感じで面倒です。
97でも使えるようにSplit関数使ってません。
ろくなエラー処理を施してません。

Do
  mstr = InputBox("何年/何月分を抽出しますか?" & vbLf & "記入例" & vbLf & _
          "2007/1〜2007/8", "抽出月指定")
  If mstr = Empty Then
    Exit Sub
  ElseIf InStr(1, mstr, "〜") > 1 Then
    Stt = InStr(1, mstr, "〜")
    If IsDate(Left(mstr, Stt - 1) & "/1") And IsDate(Mid(mstr, Stt + 1) & "/1") Then
     左辺 = Left(mstr, Stt - 1)
     初年 = Left(左辺, InStr(1, 左辺, "/") - 1)
     初月 = Mid(左辺, InStr(1, 左辺, "/") + 1)
     右辺 = Mid(mstr, Stt + 1)
     終年 = Left(右辺, InStr(1, 右辺, "/") - 1)
     終月 = Mid(右辺, InStr(1, 右辺, "/") + 1)
     Exit Do
    Else
     MsgBox "記入方式" & vbLf & "2007/1〜2007/8" & vbLf & "これ以外受け付けません。"
    End If
  Else
    MsgBox "記入方式" & vbLf & "2007/1〜2007/8" & vbLf & "これ以外受け付けません。"
  End If
Loop
MsgBox "初年 " & 初年 & "  " & "初月 " & 初月 & vbLf & _
    "終年 " & 終年 & "  " & "終月 " & 終月

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