[[20160915220022]] 『集計表作成について』(新米) ページの最後に飛ぶ

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

 

『集計表作成について』(新米)

               1            2        異形

                 3.5      6.0      2.5      7.0  2.5  7.0
6K1234   45H      0        0        1        1   0   0
         50H      0        0        3        3      0   0
6K2345   45H      1        1        1        1      1   1
         50H      3        3        0        0      1   1

6K0000:8種類

45H,50H は、この2つのみ

1は、3.5、6.0
2は、2.5、7.0
異形

これ以外出てきません。

これを、集計したいと思ってます。
集計表の形はまだとくに決めてないのですが下記のような
形に組み替えていきたいと思ってます。

  型式          種別       数量     合計
NS-SP-50Hx7000    6K1234       3       3
NS-SP-50Hx6000    6K2345       3       3
NS-SP-45Hx2500    6K1234       1
               6K2345      1       2

一番上の表は、縦に書かれた表からCountifで一旦集計しています。
一番の理想は、最初から上記のような表の形に出来たらいいなと
思ってます。

もとの表がないと分けが分からないと思いますがこういう風に
すれば一発でいくんじゃないかとというアドバイスをよろしくお願い
いたします。

今、考えているのは
「NS-SP-」「50H」「7000」を、「」単位でセルで分けて集計していく
やり方です。

なので、マクロにするか関数にするかといったところも迷ってます。
マクロだったらこんなイメージというものがありましたらよろしく
お願いいたします。
また、明日詳しい元表を載せたいと思います。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


数式ならば、SUMIFS関数を調べてみてください。

マクロならば、まず元データのA列?、に、空欄があるのは好ましくないです。見た目には形式の境目が判りやすくて良いのですが、プログラム、特にデータベースは空欄だったら上の行と同じ、とは自動認識できないのです。ここを予め、全て埋めておくことは可能でしょうか? 埋まっていないと、かなり面倒なコードになります。

後は、データ例を挙げる場合、元と出力が矛盾しないものでお願いします。2つ目の表で6K1234が数量3との事ですが、どうして3になるのか、さっぱり判りませんから。これでは何もアドバイスできませんよ。

(???) 2016/09/16(金) 09:03


アドバイスありがとうございます。
6K1234は、「数量:3」です!            ↓
                 3.5      6.0      2.5      7.0  2.5  7.0
6K1234   45H      0        0        1        1   0   0
         50H      0        0        3        3      0   0
6K1234の7.0が「数量3」です

                         数量     合計
NS-SP-50Hx7000    6K1234       3       3

NS-SP-45Hx2500    6K1234       1 ⇒は、型式が違います。

(新米) 2016/09/16(金) 12:58


NS-SP-50Hx7000 という文字列が、50H、7.0 という意味ですか。 そこまで砕いて説明して頂かないと…。
あと、この桁数は14文字固定ですか?

それと、一番大事な点が、元の表の空欄を埋められるかどうかです。空欄のままだと、かなり面倒。
回答者が大変なだけで、新米さんは待ってるだけ〜、とか考えないように。作るのは貴方自身ですよ?
(???) 2016/09/16(金) 13:08


もひとつ不明な点。
2.5と7.0の場合、2と異形との区別が付きませんが、これも何か法則があるのでしょうか?
(???) 2016/09/16(金) 13:10

NS-SP-50Hx7000 →14桁固定

異形は、F-IKEIx7000,F-IKEIx2500 となります。

空白は、埋めるの可能です。

引き続き、アドバイス宜しくお願い致します。

(新米) 2016/09/18(日) 07:50


まだ異形の元データ例が無いので、良く判りませんし、レイアウトも不明瞭です。
とりあえず、元データはSheet1に。出力はSheet2の2行目以降と仮定します。

Sheet2のE〜H列を作業列に使用し、C列を得る数式例なぞ。

C2: =IF(F2<>"",SUMIFS(INDIRECT("Sheet1!"&$H2&":"&$H2),Sheet1!$A:$A,$B2,Sheet1!$B:$B,$F2),SUM(INDIRECT("Sheet1!"&$H2&"3:"&$H2&"999")))
E2: =LEFT(A2,6)
F2: =IF(LEFT(E2,2)="NS",MID(A2,7,3),"")
G2: =RIGHT(A2,4)
H2: =IF(F2<>"",INDEX({"C","D","E","F"},MATCH($G2,{"3500","6000","2500","7000"},0)),INDEX({"G","H"},MATCH($G2,{"2500","7000"},0)))
(???) 2016/09/20(火) 11:45


Sub main() 'Sheet1をSheet2に集計
    Dim dt(2) As Variant, c As Range, sr As Long, sc As Long, i As Long, strshubetu As String
    For Each c In Sheets("Sheet1").UsedRange
    If c.Offset(, 1).Value = "3.5" And c.Offset(1).Value = "45H" Then sr = c.Row: sc = c.Column: Exit For
    Next c
    With Sheets("Sheet2")
        .Cells.ClearContents
         For Each c In Range(Sheets("Sheet1").Cells(sr + 1, sc + 1), Sheets("Sheet1").Cells.SpecialCells(xlLastCell)).Cells
            If Val(c.Value) > 0 Then
                If Sheets("Sheet1").Cells(c.Row, sc - 1) <> "" Then strshubetu = Sheets("Sheet1").Cells(c.Row, sc - 1)
                Select Case c.Column - sr
                    Case Is < 6
                    dt(0) = "NS-SP-"
                    Case Else
                    dt(0) = "F-IKEI-"
                End Select
                dt(0) = dt(0) & Sheets("Sheet1").Cells(c.Row, sc) & "x" & Sheets("Sheet1").Cells(sr, c.Column) * 1000
                dt(1) = strshubetu: dt(2) = c.Value
                .Range("A" & Rows.Count).End(xlUp).Offset(1, 3).FormulaR1C1 = "=SUMIF(C[-3],RC[-3],C[-1])"
                .Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 3) = dt
            End If
         Next c
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("A2:A" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending
        .Sort.SortFields.Add Key:=Range("B2:B" & Rows.Count), SortOn:=xlSortOnValues, Order:=xlAscending
        .Sort.SetRange Range("A2:C" & Rows.Count)
        .Sort.Header = xlNo
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
        .UsedRange.Columns("D:D").Value = .UsedRange.Columns("D:D").Value
         Application.CutCopyMode = False
        For i = .Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
            If .Range("A" & i).Value = .Range("A" & i - 1).Value Then
            .Range("A" & i).Value = ""
            End If
        Next i
        For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row - 1
            If .Range("A" & i + 1).Value = "" Then
            .Range("D" & i).Value = ""
            End If
        Next i
    .Range("B1").Resize(, 3).Value = Array("種別", "数量", "合計")
    End With
End Sub
(mm) 2016/09/20(火) 15:07

コメント返信:

[ 一覧(最新更新順) ]


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