dポイントプレゼントキャンペーン実施中!

月別データを週別(月曜始まり。第1週、第2週、・・・・・)に振り分ける関数がありましたら教えてください!

A 回答 (4件)

ご質問の内容が大雑把だったので、勝手に解釈させていただきました(自分でも使えそうな形で)。


マクロです。「月別データ」が入力されているシートをアクティブにして実行してください。すると、「第n周目」シートが自動作成されます。
ちなみに「月別データ」は1行目は見出し行。2行目以降がデータ。A列に日付がシリアル値で入力されているものとします。
それから、「第n周目」のシートを自動作成する際に、すでに同名のシートが存在すると失敗します。同名のシートが存在する場合は事前に削除してから実行してください。

Sub sample()
Dim ws As Worksheet
Dim i As Long
Dim myRng As Range
Dim ymd As Date
Dim week As Long
Set ws = ActiveSheet
For week = 1 To 6
Set myRng = ws.Range("A1")
For i = 2 To ws.Cells(Rows.Count, "A").End(xlUp).Row
ymd = ws.Cells(i, "A").Value
If WorksheetFunction.WeekNum(ymd) - WorksheetFunction.WeekNum(DateSerial(Year(ymd), Month(ymd), 1)) + 1 = week Then
Set myRng = Union(myRng, ws.Cells(i, "A"))
End If
Next i
If myRng.Count > 1 Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "第" & week & "週目"
myRng.EntireRow.Copy Range("A1")
End If
Next week
End Sub
    • good
    • 0

こんにちは!



元データの配置がどのようになっているのか判らないので、
やり方だけ・・・

↓の画像のように元データはSheet2にあるとし、Sheet1に表示するとします。

まずSheet1に月曜始まりのカレンダーを作成します。

A1に「年」、C1に「月」を入力するとカレンダーが表示される方法です。
F1セルに
=DATE(A1,C1,1)
という数式を入れておきます。(セルの表示形式は好みで!)

A4セル(セルの表示形式はユーザー定義から d としておく)に
=IF(MONTH($F$1-WEEKDAY($F$1,2)+COLUMN(A1)+7*(ROW(A1)-1))=$C$1,$F$1-WEEKDAY($F$1,2)+COLUMN(A1)+7*(ROW(A1)-1),"")

という数式をフィルハンドルで入れ、列・行方向にコピー!
これで月曜始まりのカレンダーが出来ました。

J4セルに
=IF(COUNT(A4:G4),SUMIFS(Sheet2!B:B,Sheet2!A:A,">="&MIN(A4:G4),Sheet2!A:A,"<="&MAX(A4:G4)),"")

という数式を入れフィルハンドルで下へコピー!
これで画像のような感じになります。

※ Sheet2のA列は10月以外の日付があっても構いません。m(_ _)m
「エクセル:月別データを週別に振り分ける」の回答画像3
    • good
    • 0

> 月別データを週別(~)に振り分ける



ってのは例えば、
10月 500
11月 680
って月別データを、

10月1週目 10/01-10/01 1日間なので500×1/31= 16.129…
10月2週目 10/02-10/08 7日間なので500×7/31=112.903…
10月3週目 10/09-10/15 7日間なので500×7/31=112.903…
10月4週目 10/16-10/22 7日間なので500×7/31=112.903…
10月5週目 10/23-10/29 7日間なので500×7/31=112.903…
10月6週目 10/30-10/31 2日間なので500×2/31= 32.258…

11月1週目 11/01-11/05 5日間なので680×5/30=113.333…
10月2週目 11/06-11/12 7日間なので680×7/30=158.666…
10月3週目 11/13-11/19 7日間なので680×7/30=158.666…
10月4週目 11/20-11/26 7日間なので680×7/30=158.666…
10月5週目 11/27-11/30 4日間なので680×4/30= 90.666…

とかってこと?

1発でそういう事する関数?は無いです。
指定した年月日から日付のシリアル値を作るDATE関数。
その年月1日目の曜日を取得するWEEKDAY関数。
DATEDIFF関数で、対象年月1日目の日付と、対象年月+1の月の1日目の日付の差を取ると、その年月の日数が計算できます。
1日目が何曜日か?ってのと当月の日数で、何週まであるか計算できるハズ。
そういうの組み合わせて計算って事になると思います。
    • good
    • 0

それだけじゃ、月別データも、どのように振り分けるのかも、サッパリポンでしょ!


「振り分ける関数」自体は存在しません。
    • good
    • 0

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