advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 8928 for リスト (0.006 sec.)
[[20171026200429]]
#score: 2746
@digest: d23ff28b444d09bdd2ee82d450c1e6ff
@id: 74705
@mdate: 2017-10-30T15:39:29Z
@size: 18195
@type: text/plain
#keywords: 産残 (221861), 産明 (159899), 約s (143198), 細s (134969), 約残 (130737), 細id (125474), 残リ (111575), 産重 (111293), 細リ (100352), 細te (74983), 生産 (73097), 幅色 (68588), ホワ (67622), 厚幅 (65413), 明細 (49525), 色月 (44285), 契約 (39320), 月生 (32434), ク, (31760), 重量 (29981), ク7 (29611), ク8 (29340), 残( (27727), 量( (27314), 残に (21881), ト, (20966), ワイ (17266), 明( (17082), details (12513), 次月 (12222), ブラ (11140), ラッ (8079)
『VBA 2つの表をある条件の元で統合したい』(むーみん)
VBAで簡単なコードくらいは作成できるのですが、ちょっと複雑なものになるとちんぷんかんぷんです。 今後勉強していきたいと思っていますが、急ぎで作成しなければならないものがありまして大変恐縮ですが、お助けいただけたら嬉しいです。 よろしくお願いします。 2つの表を統合した表を作成したい。 ○作業内容 生産残リストの生産残(kg)に対して、生産明細リストの生産重量(kg)を引き当てる。 厚、巾、色で明細を識別する。 生産残リストの各明細に対して、生産残の±10%の範囲(※生産残と生産量は必ず誤差が発生する為)で生産重量(kg)を積み上げていき、生産残に達したときは同じ厚、巾、色の次月の生産残に引き当てる。 生産残に達しない場合は次の明細に移る。 以上を繰り返し、すべての明細に対して表の統合を行う。 イメージとしては、生産残リスト、生産明細リストを統合し一番下の表を作成するのが目標です。 ■生産残(契約残)リスト 厚,幅,色,月,生産残(kg) 0.2,500,ブラック,7,3000 0.2,500,ブラック,8,5000 0.2,700,ホワイト,7,5000 0.2,700,ホワイト,8,7000 0.5,500,ブラック,7,6000 0.5,500,ブラック,8,5000 0.5,700,ホワイト,7,7000 0.5,700,ホワイト,8,4000 ■生産明細リスト 厚, 幅, 色 ,生産重量(kg) 0.2,500,ブラック,2000 0.2,500,ブラック,800 0.2,700,ホワイト,2000 0.2,700,ホワイト,2700 0.2,700,ホワイト,2500 0.5,500,ブラック,3000 0.5,700,ホワイト,3000 0.5,700,ホワイト,2000 ■統合データ 厚, 幅, 色, 月,生産残,生産重量 0.2,500,ブラック,7,3000,2000 , , , , ,800 0.2,500,ブラック,8,5000, 0.2,700,ホワイト,7,5000,2000 , , , , ,2700 0.2,700,ホワイト,8,7000,2500 0.5,500,ブラック,7,6000,3000 0.5,500,ブラック,8,5000, 0.5,700,ホワイト,7,7000,3000 , , , , ,2000 0.5,700,ホワイト,8,4000, < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- >厚、巾、色で明細を識別する。 生産残リストは、それらキー項目で、順に並べ替えられているんですか? 12月の次は1月ですけど、年情報が無ければ 次の1月なのか、ほぼ一年前の1月なのか分からなくないですか? >生産残に達したときは同じ厚、巾、色の次月の生産残に引き当てる。 提示されているデータを見る限り、次月に引き当てているとは見えないですけど? 0.2 500 ブラック 7 3000 に対して、 0.2 500 ブラック 2000 0.2 500 ブラック 800 が引き当てられたのなら、 残余の「200」が8月の生産残「5000」に加算されなかったら、話が合わないと思うんですけど? >生産残に達しない場合は次の明細に移る。 達しなければ平穏なんですけど、何かの間違いで、明細の方が大幅に多くて、 大きなマイナスになるってことはないですか? 以下のリストは、それぞれ何シートの何処(列番)に情報が書かれているんですか? またデータは何行目から始まっているんですか? ※レイアウトを明示できませんか? >■生産残(契約残)リスト >■生産明細リスト それらのリストのデータ量(行数)は、現在何行目くらいまでにあって、 今後、何行目くらいまで増加させる計画ですか?(永久には出来ないですよ?) (半平太) 2017/10/26(木) 22:40 ---- > 12月の次は1月ですけど、年情報が無ければ > 次の1月なのか、ほぼ一年前の1月なのか分からなくないですか? ・・と言う疑問を持ったのですが、 単に、上の行から順番に処理すればいいって事なんですね? なら、年情報は要らなかったです。 m(__)m (半平太) 2017/10/27(金) 14:47 ---- ご回答ありがとうございます。 説明不足で申し訳ありません。 詳細は以下のようになります。 何卒宜しくお願い致します。 生産残リストは、それらキー項目で、順に並べ替えられているんですか? >厚(昇順)、巾(昇順)、色(ユーザー設定の並び替え)で並べております。 12月の次は1月ですけど、年情報が無ければ 次の1月なのか、ほぼ一年前の1月なのか分からなくないですか? >省略して記載しておりました。契約残リストについては、201708のように入力されております。 提示されているデータを見る限り、次月に引き当てているとは見えないですけど? >契約残に対して完全に合致した生産はできないので、 契約残の±10%の範囲に達した時、その月の契約を打ち切る(契約量に達したと判断する)ようになっています。 達しなければ平穏なんですけど、何かの間違いで、明細の方が大幅に多くて、 大きなマイナスになるってことはないですか? >契約残に対して生産明細が大幅に多くなることはないです。その時点での生産明細を反映する為、少なくなることは多いです それらのリストのデータ量(行数)は、現在何行目くらいまでにあって、 今後、何行目くらいまで増加させる計画ですか?(永久には出来ないですよ?) >契約残リストは150程度、生産明細リストは50程度です。 レイアウトについては必要なところのみ、一旦抽出してから使おうと思っておりますので、 多少の増減はありますが、基本的には例示のとおりを考えております。 レイアウトのイメージとしては、契約残リストをベースとして契約残(kg)の横に その内訳として生産明細リストの生産重量が記載できればと考えております。 また、契約残リストには契約の残っているすべての明細が記載されていますが、 生産明細リストは生産の都度デイリーに作成されるものなので契約残リストにデータがあって 生産明細にデータがないものもあります。 作業としては、契約残リストと生産明細リストを同日にDLしてその日時点での データの内容をみれるようにすることを考えています。 データを都度更新することを組み込むのは難しいように思えるのでそのようなことを 考えております。 説明不足、お願いばかりで大変恐縮ですがよろしくお願いします。 (むーみん) 2017/10/27(金) 19:55 ---- >契約残リストは150程度、生産明細リストは50程度です。 意外に少ないのでほっとしております。 どんな仕掛けで作ろうとも、処理速度が問題になることはなさそう。 生産残と明細リストは、同じシート上にあるんですか? 別々のシートにあるんですか? >契約残リストについては、201708のように入力されております。 私としては「単に、上の行から順番に処理すればいい」と理解しています。 つまり、年月を見て判断するようなことは現実問題として存在しないとの理解です。 その方針で何か問題が生じますか? (半平太) 2017/10/27(金) 20:31 ---- >生産残に達したときは同じ厚、巾、色の次月の生産残に引き当てる。 「次月に引き当てる」がよく分からないです。 ■生産残(契約残)リスト 厚 幅 色 月 生産残(kg) 0.2 500 ブラック 7 3000 0.2 500 ブラック 8 5000 ■生産 厚 幅 色 生産重量(kg) 0.2 500 ブラック 2000 0.2 500 ブラック 4000 ←ーーーーーーーーーー 800じゃなく、4000だったらどうなるのですか? ■統合 厚 幅 色 月 生産残 生産重量 0.2 500 ブラック 7 3000 2000 ? ←不明(常識では1000) 0.2 500 ブラック 8 5000 ? ←不明(常識では3000) (半平太) 2017/10/27(金) 23:17 ---- 別件でばたばたしておりご返信遅くなりすみません。 ご返信ありがとうございます。 また、ご説明不足の点大変恐縮です。 >生産残と明細リストは、同じシート上にあるんですか? 別々のシートにあるんですか? 別々のシートにあります。 >私としては「単に、上の行から順番に処理すればいい」と理解しています。 つまり、年月を見て判断するようなことは現実問題として存在しないとの理解です。 その方針で何か問題が生じますか? うーん、初心者ゆえ明確に大丈夫だと確信をもってお答えすることはできませんが、 現時点を基準にし、完了していない契約に関しては古いものから順に生産されていくことになっています。 契約残リスト、生産明細リストの双方に日付は記載されてはいるのでその日付で予め昇順にソートを かけておこうと思っておりますので、頭からすべて順に処理できるのであれば、問題が発生しないのではないかと思っておりまます。 ※(補足)契約残リストには契約したときの日付、生産明細リストには生産された日付が記載されている為、日付そのものは共通していないもののそれぞれのリストは順にソートできる。 >「次月に引き当てる」がよく分からないです。 ■生産残(契約残)リスト 厚 幅 色 月 生産残(kg) 0.2 500 ブラック 7 3000 0.2 500 ブラック 8 5000 ■生産 厚 幅 色 生産重量(kg) 0.2 500 ブラック 2000 0.2 500 ブラック 4000 ←ーーーーーーーーーー 800じゃなく、4000だったらどうなるのですか? ■統合 厚 幅 色 月 生産残 生産重量 0.2 500 ブラック 7 3000 2000 ? ←不明(常識では1000) 0.2 500 ブラック 8 5000 ? ←不明(常識では3000) 契約に対して生産量がジャストにはなりにくい、製品状の特性がございます。 このような場合はおおげさな例ではあり、あまり発生しないケースではありますが場合によっては発生します。(月に複数回生産し、月内で調整をかけるのでほぼ発生しないが) 実務上は7月の生産に4000がつき8月あるいは9月(翌月、翌々月・・・)の生産で調整をかけることになります。これほど大きく乖離するようなことはないため誤差の範囲で無視しようと思っております。 例示頂いたものだと ←不明(常識では1000)・・・4000(あくまで古いものから順に考え7月生産とみなす。)にし、次月以降の生産残がマイナス(この場合は8月生産が5000-3000=2000)になるようなイメージですね。 そのように考えると契約残の±10%の範囲というよりは、契約残の-10%を超えた段階で次の生産明細は翌月契約の重量に対しての生産であるとみなすようにした方がいいかもしれませんね。 色々とご迷惑等おかけしますが、 何卒お願いします。 (むーみん) 2017/10/30(月) 19:47 ---- >昇順にソートを かけておこうと思っておりますので、 そうして頂ければ後顧の憂いがなくなりますが、 個人的な見解ですが、古い方が上の並び順しか考えられないです。 今月のデータを入れてから、先月の入力漏れデータをその下に書くなんて人は多分いないと思料。 >そのように考えると契約残の±10%の範囲というよりは、 >契約残の-10%を超えた段階で次の生産明細は >翌月契約の重量に対しての生産であるとみなすようにした方がいいかもしれませんね。 事の性格上、余り明確な基準は作れないということですね。 いずれにしても、一つの生産明細を分割して、 月の前後(2ヶ月)へ分割配分はしない、との理解でいいですね? <Sheet1 サンプル> <Sheet2 サンプル> 行 _A_ _B_ ____C____ _D_ _____E_____ 行 _A_ __B__ ____C____ ______D______ 1 厚 幅 色 月 生産残(kg) 1 厚 幅 色 生産重量(kg) 2 0.2 500 ブラック 7 3000 2 0.2 500 ブラック 2000 3 0.2 500 ブラック 8 5000 3 0.2 500 ブラック 800 4 0.2 700 ホワイト 7 5000 4 0.2 700 ホワイト 2000 5 0.2 700 ホワイト 8 7000 5 0.2 700 ホワイト 2700 6 0.5 500 ブラック 7 6000 6 0.2 700 ホワイト 2500 7 0.5 500 ブラック 8 5000 7 0.5 500 ブラック 3000 8 0.5 700 ホワイト 7 7000 8 0.5 700 ホワイト 3000 9 0.5 700 ホワイト 8 4000 9 0.5 700 ホワイト 2000 <Sheet3 結果図> 行 _A_ _B_ ____C____ _D_ ___E___ ____F____ 1 厚 幅 色 月 生産残 生産重量 2 0.2 500 ブラック 7 3000 2000 3 800 4 0.2 500 ブラック 8 5000 5 0.2 700 ホワイト 7 5000 2000 6 2700 7 0.2 700 ホワイト 8 7000 2500 8 0.5 500 ブラック 7 6000 3000 9 0.5 500 ブラック 8 5000 10 0.5 700 ホワイト 7 7000 3000 11 2000 12 0.5 700 ホワイト 8 4000 Private Type 明細 KY2Call As Variant '厚-幅-色 重量() As Variant Count As Long Bal As Variant End Type Sub OffsetMatching() Dim Wsh1 As Worksheet, Wsh2 As Worksheet Dim 明細Idx As Long Dim 明細s() As 明細 Dim 明細Temp As 明細 Dim 契約s As Variant Dim 契約Key Dim Idx As Long Dim aRW As Range Dim Details '引当てた生産重量の内訳 Dim dicT As Object, dicKey Dim SM As Double Dim COL As Long, RW As Long, NN As Long, KK As Long Set dicT = CreateObject("Scripting.Dictionary") Set Wsh1 = Sheets("Sheet1") '契約残リストシート Set Wsh2 = Sheets("Sheet2") '生産明細リストシート Rem 生産明細を明細s(配列)に格納 For Each aRW In Wsh2.Range("A2", Wsh2.Cells(Rows.Count, "A").End(xlUp)).Resize(, 5).Rows ReDim 明細Temp.重量(1 To 1) 明細Temp.重量(1) = aRW.Cells(1, 4) 明細Temp.Bal = 明細Temp.重量 With aRW 明細Temp.KY2Call = .Cells(1, 1) & "-" & .Cells(1, 2) & "-" & .Cells(1, 3) End With dicKey = 明細Temp.KY2Call If Not dicT.exists(dicKey) Then '新規 Idx = Idx + 1 dicT(dicKey) = Idx '配列のインデックスをdicTに登録 ReDim Preserve 明細s(1 To Idx) '明細s配列を拡大 明細Temp.Count = 1 明細s(Idx) = 明細Temp '配列に格納 Else 明細Idx = dicT(dicKey) 明細s(明細Idx).Count = 明細s(明細Idx).Count + 1 '同一識別キー内の明細数をカウントアップ ReDim Preserve 明細s(明細Idx).重量(1 To 明細s(明細Idx).Count) 明細s(明細Idx).重量(明細s(明細Idx).Count) = 明細Temp.重量(1) 明細s(明細Idx).Bal = 明細s(明細Idx).重量 '同じデータをBalにも格納 End If Next Rem 契約詳細を契約s配列へ格納。2列余分に取り込む(明細内訳データ管理用と明細数カウント用) 契約s = Wsh1.Range("A2", Wsh1.Cells(Wsh1.Rows.Count, "A").End(xlUp)).Resize(, 7).Value Rem 各契約に対応する生産明細を順次記録する For Idx = 1 To UBound(契約s) 契約Key = 契約s(Idx, 1) & "-" & 契約s(Idx, 2) & "-" & 契約s(Idx, 3) 明細Idx = dicT(契約Key) '契約sのキーと同じキーを持つ明細のインデックスを取得 If Not IsEmpty(明細Idx) Then '初期化 SM = 0 契約s(Idx, 7) = 0 ReDim Details(0 To 0) For COL = 1 To 明細s(明細Idx).Count '対応する明細があるか順次チェックする If 明細s(明細Idx).Bal(COL) > 0 Then '残があるものだけ考慮する SM = SM + 明細s(明細Idx).Bal(COL) 契約s(Idx, 7) = 契約s(Idx, 7) + 1 '明細をカウントアップ ReDim Preserve Details(1 To 契約s(Idx, 7)) Details(契約s(Idx, 7)) = 明細s(明細Idx).Bal(COL) '充当 明細s(明細Idx).Bal(COL) = 0 'バランスクリア If 契約s(Idx, 5) * 0.9 < SM Then '90%を超えたら当月分終了 Exit For End If End If Next COL 契約s(Idx, 6) = Details '引当てた生産重量の内訳をセット End If Next Rem 打ち出し With Sheets("Sheet3") Intersect(.UsedRange, .Columns("A:F")).ClearContents RW = 1 .Range("A1:F1").Value = [{"厚"," 幅"," 色"," 月","生産残","生産重量"}] For NN = 1 To UBound(契約s) 'ベースデータ打ち出し RW = RW + 1 For COL = 1 To 5 .Cells(RW, COL) = 契約s(NN, COL) Next COL '生産重量打ち出し If 契約s(NN, 7) > 0 Then RW = RW - 1 '初行はインクリメントしない For KK = 1 To 契約s(NN, 7) RW = RW + 1 .Cells(RW, "F") = 契約s(NN, 6)(KK) Next KK End If Next NN End With End Sub (半平太) 2017/10/30(月) 22:37 ---- 私の理解が正しければ、 シート名が夫々 生産残リスト, 生産明細リスト ということで Sub test() Dim a, e, s, i As Long, ii As Long, txt As String, w, n As Long Dim mySum As Double, dic As Object, dic2 As Object Set dic = CreateObject("Scripting.Dictionary") Set dic2 = CreateObject("Scripting.Dictionary") a = Sheets("生産残リスト").Cells(1).CurrentRegion.Value ReDim w(1 To UBound(a, 2) + 1, 1 To 1) For i = 2 To UBound(a, 1) For ii = 1 To 3 txt = txt & Chr(2) & a(i, ii) Next If Not dic.exists(txt) Then Set dic(txt) = CreateObject("Scripting.Dictionary") End If For ii = 1 To UBound(a, 2) w(ii, 1) = a(i, ii) Next dic(txt)(a(i, 4)) = w: txt = "" Next a = Sheets("生産明細リスト").Cells(1).CurrentRegion.Value For i = 2 To UBound(a, 1) For ii = 1 To 3 txt = txt & Chr(2) & a(i, ii) Next If Not dic2.exists(txt) Then Set dic2(txt) = CreateObject("System.Collections.ArrayList") dic2(txt).Add a(i, 4): txt = "" Next With Sheets.Add.Cells(1).Resize(, 6) .Rows(1).Value = Array("厚", "幅", "色", "月", "生産残", "生産重量"): i = 2 For Each e In dic For Each s In dic(e).keys w = dic(e)(s) If dic2.exists(e) Then Do While dic2(e).Count mySum = mySum + dic2(e)(0) If mySum < w(5, 1) Then n = n + 1 If UBound(w, 2) < n Then ReDim Preserve w(1 To UBound(w, 1), 1 To n) w(6, n) = dic2(e)(0): dic2(e).removeat 0 Else Exit Do End If Loop If n > 0 Then .Rows(i).Resize(n).Value = Application.Transpose(w): i = i + n Else .Rows(i).Value = Application.Transpose(w): i = i + 1 End If End If n = 0: mySum = 0 Next Next End With End Sub (seiya) 2017/10/31(火) 00:39 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201710/20171026200429.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97014 documents and 608133 words.

訪問者:カウンタValid HTML 4.01 Transitional