[[20190316030550]] 『日付を数量分日付を振り分ける方法』(ニシポン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日付を数量分日付を振り分ける方法』(ニシポン)

みなさん、再び教えて頂きたいです。

下記のように、A列には日付、B列に数量が入力されており、C列に日付に対応する数量分の日付を自動に振り分けていく方法を教えて頂きたいです。
C列は日付が変わると1からスタートし、セルA7のように0の場合は次の日付に
移るという形になってほしいです。
分かる方宜しくお願い致します。

プレビューで列を揃えれなく見にくいですが、申し訳ございません。

  A  B  C   D
5 3/1  2 3/1  1
6 3/2  4 3/1  2
7 3/3  0   3/2   1
8 3/4  5 3/2   2

              3/2    3
              3/2    4
              3/4    1

< 使用 Excel:Excel2010、使用 OS:unknown >


 恐らくお呼びではないとは思いますが、
 マクロで「配列で作っちゃえ!」的な考え方の例です (なんて安易な orz...)

    Function ReptedArray(ListOrg As Range) As Variant
        Dim r As Range, rs As Long, vWrite() As Variant, i As Long, j As Long
        If ListOrg.Columns.Count < 2 Then Exit Function
        rs = WorksheetFunction.SumIf(ListOrg.Columns(2), ">0", ListOrg.Columns(2))
        If rs <= 0 Then Exit Function
        ReDim vWrite(1 To rs, 1 To 2)
        For Each r In ListOrg.Rows
            If r.Columns(2) > 0 Then
                For j = 1 To r.Columns(2)
                    i = i + 1
                    vWrite(i, 1) = r.Columns(1)
                    vWrite(i, 2) = j
                Next
            End If
        Next
        ReptedArray = vWrite
    End Function

    Sub たとえば()
        Dim v As Variant
        v = ReptedArray([A1:B4])
        [C1].Resize(UBound(v), 2) = v
    End Sub

 こうゆうのを数式だけでパッと組めちゃう人って、ホント凄いですよね。
 私には無理です・・・^^;

(白茶) 2019/03/16(土) 10:21


白茶様

答えではないのですね。。。
(ニシポン) 2019/03/16(土) 11:01


>答えではないのですね。。。

いいえ。数式ではなく、マクロでもできますが、それでもよいですかという意味です。

 Option Explicit

 Sub test()
    Dim 転記元行 As Long, 転記先行 As Long
    Dim 繰り返し数 As Long

    coulumns("C;D").ClearContents

    For 転記元行 = 1 To 4

        For 繰り返し数 = 1 To Cells(転記元行, "B").Value

            転記先行 = 転記先行 + 1
            Cells(転記先行, "C").Value = Cells(転記元行, "A").Value
            Cells(転記先行, "D").Value = 繰り返し数

        Next
    Next

 End Sub

(マナ) 2019/03/16(土) 11:54


 作業列を使います(C列)

	A	B	C	D	E
5	3/1	2	1	3/1	1
6	3/2	4	3	3/1	2
7	3/3	0	7	3/2	1
8	3/4	5	7	3/2	2
9				3/2	3
10				3/2	4
11				3/4	1
12				3/4	2
13				3/4	3
14				3/4	4
15				3/4	5

 C5 =SUM($B$4:B4)+1  A列のデータ最終行まで下にコピー

 最終行が50行目だとして

 D5 =IF(SUM($B$5:$B$50)<ROW(A1),"",LOOKUP(ROW(A1),$C$5:$C$50,$A$5:$A$50))

 表示形式を「日付」にして、下にコピー

 E5 =IF(D5="","",IF(D5<>D4,1,E4+1))
 または
 E5 =IF(D5="","",COUNTIF($D$5:D5,D5))

 表示形式「標準」で下にコピー

 以上です
(笑) 2019/03/16(土) 12:00

マクロについては、ほとんど理解できないため、数式を利用させて頂きました。
希望通りの結果を得る事が出来ました。
ありがとうございました。

(ニシポン) 2019/03/16(土) 13:34


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.