एक्सेल - चयनित पंक्तियों को संयोजित करने के लिए एक मैक्रो

मुद्दा

मेरे पास एक्सेल में स्रोत डेटा इस तरह दिख रहा है:

CustomerID SalesMonth SalesAmount

 12345 Jan 150 12345 Mar 100 12345 Apr 200 56789 Jan 800 56789 मई 10 78945 Nov 20 44444 जनवरी 2016 .... 

CustomerID और SalesMonth का संयोजन अद्वितीय है।

और मैं एक अलग एक्सेल टैब में स्रोत डेटा को इस तरह से संयोजित करना चाहूंगा:

CustomerID 1Month 1stAmount 2ndMonth 2ndAmount 3rdMonth 3rdAmount

 12345 जन 150 Mar 100 अप्रैल 200 56789 जनवरी 800 मई 10 78945 Nov 20 44444 जनवरी 1000 

कुल में एक ग्राहक के लिए 10 अलग-अलग महीने हो सकते हैं (कुछ में केवल 1 या 2 हैं)। महत्वपूर्ण यह है कि किसी भी आउटपुट पंक्तियों में कोई 'अंतराल' नहीं है, उदाहरण के लिए यदि किसी ग्राहक की बिक्री केवल नोव में है, तो उस ग्राहक के लिए '1 महीने' सेल को 'नोव' पढ़ना चाहिए।

उपाय

इस मैक्रो को देखें और शीट 2 देखें (शीट 1 से शीट 3 में डेटा की सुरक्षा के रूप में कॉपी करें)

 सब टेस्ट () मंद ग्राहक के रूप में रेंज, ddata () के रूप में रेंज, कस्टुन के रूप में रेंज, क्यूक के रूप में रेंज, filt के रूप में रेंज डिम के रूप में रेंज, जम्मू के रूप में लंबे, कश्मीर के रूप में लंबे समय के साथ कार्यपत्रक ("sheet1") सेट = सीमा ( .Range ("A1"), .Range ("A1")। अंत (xlDown)) सेट करें सेट करें .unange = .Range ("A1")। End (xlDown) .Offset (5, 0) customer.AdvancedFilter xlFilterCopy, custunq।, ट्रू सेट कस्टुनक = रेंज (कस्टुनक.ऑफसेट (१, ०), कस्टुनक.इंड (xlDown)) प्रत्येक कस्टुनक इन कर्टनक के लिए ।Range ("A1")। CurrentRegion -utoFilter फ़ील्ड: = 1, Criteria1: = custunq.Value फ़िल्ट सेट करें। .Range ("A1")। CurrentRegion.Offset (1, 0) ।Resize (Rows.Count - 1, Columns.Count)। _ SpecialCells (xlCellTypeV अदृश्य) j = WorksheetFunction.CountA (filt.Columns (1)) 'MsgBox j ReDim ddata (1 to j) वर्क्सशीट ("sheet2") के साथ सेट करें dest = .Cells (Rows.Count, "A")। End (xlUp) .Offset (1, 0) dest = filt (1, 1) End with k = 1 to j Set ddata (k) = .Range (kt, 2), filt (k, 3))। ddata (k)। वर्कशीट्स ("शीट 2") के साथ .Cells (dest.Row, Columns.Count) .End (xlToLeft) .Offset (0, 1) .PhSpSpecial End With Next k .Range ("A1")। CurrentRegion.AutoFilter Next custunq Range (.Range ("a1")। End (xDDown) .Offset (1, 0), .Cells (Rows.Count, "A")। End (xlUp)) EntireRow.Delete End के साथ समाप्त होता है। एंड सब सब को पूर्ववत करें () वर्कशीट ("शीट 2") 

इस टिप के लिए वेंकट 1926 को धन्यवाद।

पिछला लेख अगला लेख

शीर्ष युक्तियाँ