0

Excelワークシートに、製品、価格、間隔(3つの日付:製品のアクティブ化、製品の非アクティブ化、オファーの有効性)などのデータがあります。

価格の分析のために、週ごとにデータを細分化する必要があります。

例えば:

Prod1 | Prices1 | 2012/08/01 | 2012/09/08
Prod2 | Prices2 | 2012/08/14 | 2012/10/16

の:

week 2012/07/30-2012/08/05 | Prod1 | Prices1
week 2012/08/06-2012/08/12 | Prod1 | Prices1
week 2012/08/13-2012/08/19 | Prod1 | Prices1
week 2012/08/13-2012/08/19 | Prod2 | Prices2
week 2012/08/20-2012/08/26 | Prod1 | Prices1
week 2012/08/20-2012/08/26 | Prod2 | Prices2
week 2012/08/27-2012/09/02 | Prod1 | Prices1
week 2012/08/27-2012/09/02 | Prod2 | Prices2
week 2012/09/03-2012/09/09 | Prod1 | Prices1
week 2012/09/03-2012/09/09 | Prod2 | Prices2
week 2012/09/10-2012/09/16 | Prod2 | Prices2

どうすれば続行できますか?

編集

日付が重なる可能性があるので、週単位ではなく日単位で推論する方が良いのではないかと考えていました。次に、新しいデータにピボットテーブルを作成できます。

4

2 に答える 2

1

これを行う最も直感的な方法は、VBAを使用することだと思います。

データを次のように整理する場合: DataPicture1

次に、このマクロを実行すると、週番号が分割されます。

Sub QuestionMacro()

Dim wbk As Workbook
Set wbk = ThisWorkbook

Dim ws As Worksheet
Set ws = wbk.Sheets(1)

Dim cell As Range
Dim DataRange As Range

Dim RowIndex As Range

Set DataRange = ws.Range("A1:D10000")

    For Each RowIndex In DataRange.Rows

        If RowIndex.Cells(1, 5).Value < RowIndex.Cells(1, 6).Value Then
            RowIndex.EntireRow.Copy
            RowIndex.EntireRow.Insert
            RowIndex.Cells(1, 5).Value = RowIndex.Cells(1, 5).Value + 1
        End If

    Next RowIndex

End Sub

次のようなものを取得する必要があります。 マクロ結果後

次に、分割された週番号、vlookup、および次のようなテーブルを使用して、適切な実際の日付を取得できます。

DateVlookupTable

Jookの応答で言及されている週番号の式は次のとおりです。

=WEEKNUM(C2,2)

ヘッダー付きの開始データは次のとおりです(マクロが正しく機能するために削除する必要があります: ヘッダーでデータを開始

それはおそらくあなたの問題を解決するための過度に複雑で厄介な方法ですが、それはあなたの問題を解決します。

次のようなものに簡単にたどり着くことができるはずです。 最終結果

VLookupの使用方法についてさらに情報が必要な場合は、お知らせください。幸運を。

編集:

1日あたりの価格と製品を取得したい場合(私は個人的に好みます)、上記のマクロを次のように調整します(日付が実際の数値であると仮定します)。

Sub QuestionMacroPerDayBasis()

Dim wbk As Workbook
Set wbk = ThisWorkbook

Dim ws As Worksheet
Set ws = wbk.Sheets(1)

Dim cell As Range
Dim DataRange As Range

Dim RowIndex As Range

Set DataRange = ws.Range("A1:D10000")

For Each RowIndex In DataRange.Rows

    If RowIndex.Cells(1, 3).Value < RowIndex.Cells(1, 4).Value Then
        RowIndex.EntireRow.Copy
        RowIndex.EntireRow.Insert
        RowIndex.Cells(1, 3).Value = RowIndex.Cells(1, 3).Value + 1
    End If

Next RowIndex


End Sub
于 2012-09-18T15:56:22.060 に答える
0

データに新しい列を追加します。

WEEKNUM(A1,2)

またはドイツ語:

KALENDERWOCHE(A1;2)

A1は日付、2は月曜日から始まる1週間です。

これで、VLOOKUPまたはフィルターを使用してデータを選択できます。

これもここで尋ねられました:

日付を週番号に変換する方法

編集:

少し誤解がありました-私は改善に取り組んでいます...

わかりました。もう一度調べてみましょう。小さなデータセットから大きなデータセットに派生したいので、もう少し複雑です。1つの製品に複数の行が表示され、1週間に複数の行が表示されることになります。

私はまだWEEKNUMがここで役立つと思います...もっと見つけたら、再編集します。

編集

これにより、特定の日付から始まる週の範囲をダウンペーストできます。

C21=Date

G21=C$21+(ROW($G21)-ROW(G$21))*14

H21=G21+7

これで残りは完了しますが、条件セクションの正しいフォーマットを把握する必要があります。条件付きフォーマットのように、 ">=D1"などを使用できます。

F21=SUMIFS(B:B,C:C,G21)

ここで、価格は列Bになり、開始日はCになり、G21からの指定された日付と比較されます。私の最初のアイデアは次のようなものでした。

F21=SUMIFS(B:B,C:C,">=G21",D:D,"<=H21",A:A,"="Product1"")

しかし、私が言ったように、基準にはいくつかのバグがあります。あなたがあなたの考えを理解することを願っています。

于 2012-09-18T14:49:12.880 に答える