• ベストアンサー

エクセルVBA年月日からその年&月の合計

いつもお世話になっています。 下記の質問をお分かりの方ご教示ください Range("A2")Range("B2").........................Range("L2")とそれぞれA~LまでありA2にはNo.、B2には年月日、....................L2には金額という項目があります。それぞれのその入力数は現在7年分入力されていますが進行中です。この入力された年月日からinputBoxを使って何年何月と検索したらその答えを新規ブックに何年何月分の合計を出力できるようにしたいのですが何方か宜しくお願いします、ちなみにオフィースは2003です。宜しくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

対象年月の初日と最終日を求め、ワークシート関数のSUMIFでその期間の金額合計値を出します。 #Excel2003と言う事でSUMIF関数を2つ使っていますが、2007以降ならSUMIFS関数1つで求まります。 以下はエラー処理等一切ないサンプルです。 Sub Sample()   sYear = InputBox("年:")     sMonth = InputBox("月:")      dStartDate = DateSerial(sYear, sMonth, 1)   dLastDate = DateSerial(sYear, sMonth + 1, 1) - 1      nData = Application.WorksheetFunction.SumIf(Range("B:B"), ">=" & dStartDate, Range("L:L"))   nData = nData - Application.WorksheetFunction.SumIf(Range("B:B"), ">" & dLastDate, Range("L:L"))   Workbooks.Add   ActiveCell.FormulaR1C1 = nData End Sub

nebikitorikai
質問者

お礼

できました有難うございます。他の方のご教示も見てみたいと思いますので、もう少し回答を待ってみたいと思います。感謝です

関連するQ&A

  • エクセルで合計した年月日を換算するには?

    どなたかお助けいただけますと幸いです。 エクセルでふたつの期間の年・月・日の合計を算出しました。 その合計が 列A・B・Cに 0(年)・18(月)・59(日) と出ているものを、 月と日を切り上げて、正しい年月日にしたいです。 どのようにすれば算出できますでしょうか?

  • エクセルVBA Range3か所に合致する合計額

    お世話になります。エクセルRange("A")からRange("L") & LastRowまで入力してあります。 Range("B3")列以下には会社名Range("D3")列以下には班名Range("J3")列以下には品名がありRange("L3")列以下に合計額が入力されています。 この入力された中から(A,D,Jに合致する合計額)これをWorkBooks.Add  sheets("sheet1").Range("A2")に出力したいのです.どなたか宜しくお願いします。

  • マクロ:エクセルVBAでのワークシート関数の参照について

    VBA内でワークシート関数を使用する際の、引数の参照について困っています。 満たしたい条件は、 (1)マクロ実行後のシート上においても、セル選択状態で数式「=B1*sum(A1:A3)」 といったように、「値」ではなく、「数式」が入力されているようにしたい。 ↑ Application.WorksheetFunction.Sum(・・・は使えない? (2)上記例のB1およびA1:A3については、マクロ内のユーザ入力によって位置が変わり、C1にもD1にもなり得るので、 cells(1,1)="=B1*sum(A1:A3)" といった「B1」[A1:A3]的な参照を使いたくない。 イメージとしては、 sub sample() number = inputbox("数字を入力してください") cell_a = inputbox("セル1") cell_b = inputbox("セル2") yourrange = range(cells(cell_a,1),cells(cell_b,1) cells(1,1)="=number*sum(yourrange)"・・・※ end sub みたいなことをしたいのですが、※のようなことを する方法はありますでしょうか? 説明が下手なもので、補足等あれば随時いたします。 使用環境はWindows2000、Office2000です。 よろしくお願いします。

  • エクセルVBAで教えて下さい。

    エクセルVBAで以下の方法のマクロが分からず、教えて頂きたいです。 まず、ブックAのシートAがあり、シートAのセルD3には号機No.を入力します(999などの数値のみ) 次にブックBのシートBがあり、このシートのD列にも号機No.が入力されています。 やりたい事はブックAのシートAのD3に号機No.を入力したら、ブックBのシートBのD列から同じ号機No.を 探し、当てはまる号機の行のI列、J列、K列、L列、M列をコピーし ブックAのシートAのF13、F14、F15、F16、F17、に貼り付けたいです。 それぞれの貼り付け先は K列⇒F13 L列⇒F14 M列⇒F15 I列⇒F16 J列⇒F17のようになります。 それとブックBのシートBのD列に入力されている号機No.は同じ数値が入力されている時があります。 この場合は必ず下にある号機No.のが最新ですので、そちらを読み取るようにしたいです。 例えば、4行目と8行目に同じ号機No.がある場合は8行目の方を読み取る。 現在は GYOU = Application.InputBox でターゲットの行番号を入力して その行の列をコピー・ペーストしている感じです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim tmp() As String If Intersect(Target, Range("D3")) Is Nothing Then Exit Sub Else End If Dim buf As String Dim j As Integer Dim GYOU As String Set xCur = Selection Dim OpenFileName As String Workbooks.Open Filename:="業務都合の為載せれません" GYOU = Application.InputBox("行を選択してください", "行指定") '<キャンセルの場合、処理を終わりにします。> If GYOU = "False" Then Exit Sub For j = 11 To 11 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(13, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 12 To 12 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(14, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 13 To 13 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(15, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 9 To 9 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(16, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 10 To 10 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(17, 6).PasteSpecial Paste:=xlPasteValues Next j ActiveWorkbook.Close SaveChanges:=False With xCur .Parent.Parent.Activate '元のブックへもどる .Parent.Activate '元のシートへもどる End With End Sub ど素人の為、めちゃくちゃな並びだとは思いますが一応現在の状態のマクロを載せておきます。 御指導の程、宜しくお願いします。

  • エクセルのVBAで教えて下さい。

    エクセルVBAで以下の方法のマクロが分からず、教えて頂きたいです。 まず、ブックAのシートAがあり、シートAのセルD3には号機No.を入力します(999などの数値のみ) 次にブックBのシートBがあり、このシートのD列にも号機No.が入力されています。 やりたい事はブックAのシートAのD3に号機No.を入力したら、ブックBのシートBのD列から同じ号機No.を 探し、当てはまる号機の行のI列、J列、K列、L列、M列をコピーし ブックAのシートAのF13、F14、F15、F16、F17、に貼り付けたいです。 それぞれの貼り付け先は K列⇒F13 L列⇒F14 M列⇒F15 I列⇒F16 J列⇒F17のようになります。 それとブックBのシートBのD列に入力されている号機No.は同じ数値が入力されている時があります。 この場合は必ず下にある号機No.のが最新ですので、そちらを読み取るようにしたいです。 例えば、4行目と8行目に同じ号機No.がある場合は8行目の方を読み取る。 現在は GYOU = Application.InputBox でターゲットの行番号を入力して その行の列をコピー・ペーストしている感じです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim tmp() As String If Intersect(Target, Range("D3")) Is Nothing Then Exit Sub Else End If Dim buf As String Dim j As Integer Dim GYOU As String Set xCur = Selection Dim OpenFileName As String Workbooks.Open Filename:="業務都合の為載せれません" GYOU = Application.InputBox("行を選択してください", "行指定") '<キャンセルの場合、処理を終わりにします。> If GYOU = "False" Then Exit Sub For j = 11 To 11 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(13, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 12 To 12 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(14, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 13 To 13 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(15, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 9 To 9 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(16, 6).PasteSpecial Paste:=xlPasteValues Next j For j = 10 To 10 ActiveSheet.Cells(GYOU, j).Copy ThisWorkbook.ActiveSheet.Cells(17, 6).PasteSpecial Paste:=xlPasteValues Next j ActiveWorkbook.Close SaveChanges:=False With xCur .Parent.Parent.Activate '元のブックへもどる .Parent.Activate '元のシートへもどる End With End Sub ど素人の為、めちゃくちゃな並びだとは思いますが一応現在の状態のマクロを載せておきます。 御指導の程、宜しくお願いします。

  • エクセルで生年月日を入力しいろいろ検索する方法

    いつもお世話になっています。 今回も判らないので、教えてください。 まず、シート1のH1にTODAY関数をいれ、本日の日付を表示させてます。(例:2008/12/13) A5に、ナンバー(例:NO.1)、 B5に名前(例:山田花子)、 C5に生年月日(例:2001/12/4)、 G5に年齢を出すために=DAY360(C5/360,$H$1/360,FALSE)を入力しています。 シート2にA5にナンバー(例:NO.1)、 B5に名前が=VLOOKUP(A5,'Sheet1 (2)'!A5:B200,2,FALSE) C5に生年月日の年(例:2001) D5に生年月日の月(例:12) E5に生年月日の日(例:4) G6に年齢=VLOOKUP(A5,'Sheet1 (2)'!A5:G200,6,FALSE)を入力し、4行目のA~Eには見出しをつけています。(例:A4には“ナンバー”、B4には“名前”)。 4行目にオートフィルタを付け、○月生まれの人は、誰がいるのか?を見れるようにしてます。 シート1はデーターの入力画面とて、シート2では検索画面と使用してますが、生年月日はこの様に2度打ちしないとできないので、とても面倒です。 生年月日を一度入力するだけで、年齢表示と、○月生まれの人が誰なのかを調べるのもできる方法はありますか? ちなみに、シート2にオートフィルタを付けることにより、名前の順(あ行~)の並び替えに役立っています。 もし、今回の質問でオートフィルを使用しない方法であれば、大変恐縮ですが、名前の順での表示もできるようにお願いします。 どうぞよろしくお願いします。

  • エクセルVBAで困っています。

    Excell2003でマクロを作成したのですが、思うような結果が出なくて困っています。 どなたかお力をお貸しください。 お願いします。 【作成したマクロ】 Sub テスト()   myPath = ThisWorkbook.Path   buf = Dir(myPath & "¥データ¥" & "*.xls")   Do While buf <> ""     Target = "'" & myPath & "[" & buf & "]Sheet1'!R1C1"     i = i + 1     Cells(i, 1) = buf     Cells(i, 2) = ExecuteExcel4Macro(Target)     buf = Dir()   Loop End Sub 【設定状況】 ・デスクトップ上に "サンプル.xls" があり、ThisWorkBookに上記マクロを書きました。 ・デスクトップ上に "データ" というフォルダがあり、その中に、"Book1.xls" と "Book2.xls" があります。 ・"Book1.xls" のSheet1のRange("A1")には "あいうえお" が入力されています。 ・"Book2.xls" のSheet1のRange("A1")には "かきくけこ" が入力されています。 【マクロ実行結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ #REF! ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ #REF! となってしまいます。 【求めたい結果】 ・Range("A1") ・・・ Book1.xls ・Range("B1") ・・・ あいうえお ・Range("A2") ・・・ Book2.xls ・Range("B2") ・・・ かきくけこ よろしくお願いします。

  • エクセルの合計と平均

    すみません、エクセルの合計/平均に関する質問です。 例えば、1月から12月までの売り上げの平均値をA2からL2に入力し、M2に1月から12月までの合計の平均を出したいと思います。 ですが、M2に=AVERAGE(A2:L2)と入力すると平均値の平均が出てしまいます。 1月~12月の合計÷365をM2に出したい場合どのようにしたら良いでしょうか。 また、例えば、7月まで入力されている場合、8月、9月の平均を入力していったら、自動的にM2に9月までの平均を出すにはどのようにしたら良いでしょうか。 (例:2月まで入力されている場合。A1、B1には1月の平均、2月の平均が入力されている。M2には、1月の平均×31+2月の平均×28÷59の計算が出るようににしたい) 分かりにくくて申し訳ございませんが、宜しくお願い致します。

  • エクセル 生年月日 誕生月

    A列に生年月日のデータが入っていて、B列に誕生月を表示させるために =MONTH(A1) と入力して、オートフィルをやったのですが、単位がつきません B列に4ではなく4月と入れたいです セルの書式設定で単位をつけることが出来たのですが、COUNTIFで4月の数を数えても0になってしまいます 何か良い方法はありませんか?

  • エクセルの関数でその年のその月の合計日数を自動で求めることはできますか

    エクセルの関数でその年のその月の合計日数を自動で求めることはできますか? 例えばA1に  2010/10/4(日にちは適当な日数です)  等と入力されていたら B1に自動的に  31と表示される。 A1に2010/9/7 等と入力されていたら B1に自動的に  30と表示される。 また2月の28日やうるう年の29日も考慮してくれるようにしたいのですが・・・。