[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『集計表作成について』(新米)
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 >
マクロならば、まず元データのA列?、に、空欄があるのは好ましくないです。見た目には形式の境目が判りやすくて良いのですが、プログラム、特にデータベースは空欄だったら上の行と同じ、とは自動認識できないのです。ここを予め、全て埋めておくことは可能でしょうか? 埋まっていないと、かなり面倒なコードになります。
後は、データ例を挙げる場合、元と出力が矛盾しないものでお願いします。2つ目の表で6K1234が数量3との事ですが、どうして3になるのか、さっぱり判りませんから。これでは何もアドバイスできませんよ。
(???) 2016/09/16(金) 09:03
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
それと、一番大事な点が、元の表の空欄を埋められるかどうかです。空欄のままだと、かなり面倒。
回答者が大変なだけで、新米さんは待ってるだけ〜、とか考えないように。作るのは貴方自身ですよ?
(???) 2016/09/16(金) 13:08
異形は、F-IKEIx7000,F-IKEIx2500 となります。
空白は、埋めるの可能です。
引き続き、アドバイス宜しくお願い致します。
(新米) 2016/09/18(日) 07:50
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
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.