मैं एक्सेल के साथ एक पंक्ति को कई पंक्तियों में कैसे विभाजित करूं?


9

मेरे पास एक्सेल में कई सौ प्रविष्टियों के साथ एक उत्पाद डेटाबेस है, जिनमें से प्रत्येक में मूल्य निर्धारण के 1 से 3 "टियर" हैं: मानक, डिलक्स और प्रीमियम। प्रत्येक स्तरीय का अपना SKU (A, B, या C है, जो आधार SKU के अंत में जोड़ा गया है) और मूल्य। मेरा डेटा इस तरह है:

Name, Description, Price A, Price B, Price C, SKU A, SKU B, SKU C
name1,      desc1,   14.95,   19.95,        , sku1A, sku1B, 
name2,      desc2,    4.95,    9.95,   12.95, sku2A, sku2B, sku2C
name3,      desc3,   49.95,        ,        , sku3A,      ,

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

Name, Description,   SKU, Price
name1,      desc1, sku1A, 14.95
name1,      desc1, sku1B, 19.95
name2,      desc2, sku2A,  4.95
name2,      desc2, sku2B,  9.95
name2,      desc2, sku2C, 12.95
name3,      desc3, sku3A, 49.95

यदि यह मदद करता है, तो मैं इन उत्पादों को Magento की स्थापना में आयात करने जा रहा हूं।

अग्रिम धन्यवाद।


क्या एक संभावना है कि कई समान नाम और विवरण हैं? उदाहरण के लिए दो लाइनें है name1और desc1मूल्य एक, कीमत बी, मूल्य सी आदि के लिए अलग मूल्य के साथ लेकिन
जेरी

मूल डेटा में? नहीं, मुझे यकीन है कि वे अद्वितीय हैं। लेकिन, नए डेटा में निश्चित रूप से दोहराए जाएंगे।
ग्रीनसनड

ठीक है, मेरे मन में कुछ था, लेकिन पता चला कि यह तब तक काम नहीं करेगा जब तक कि कुछ परिणामों को सही करने के लिए अधिक हेरफेर न हो। यदि आप उत्सुक हैं, तो मैं एक समेकित PivotTable की कोशिश कर रहा था, लेकिन विवरण फ़ील्ड और SKU फ़ील्ड्स को इंडेक्स / मैच / विज़ुडेअप का उपयोग करके अलग से खींचना होगा, जो अंत में काफी लंबा बनाता है।
जेरी

जवाबों:


8

वे कार्य आमतौर पर VBA के साथ तेज होते हैं। वास्तव में, इसे स्थापित करने में मुझे ~ 10 मिनट का समय लगा।
मैं मान रहा हूं कि आपका डेटा कॉलम A से कॉलम H तक है।

Excel » Developer » Visual Basic»बाएं फलक पर जाएं sheet1(या) वह शीट जहां आपका डेटा रहता है» दाएं विंडो पर कोड डालें »कोड चलाएँ

VBA कोड

1 |Sub NewLayout()
2 |    For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
3 |        For j = 0 To 2
4 |        If Cells(i, 3 + j) <> vbNullString Then
5 |            intCount = intCount + 1
6 |            Cells(i, 1).Copy Destination:=Cells(intCount, 10)
7 |            Cells(i, 2).Copy Destination:=Cells(intCount, 11)
8 |            Cells(i, 3 + j).Copy Destination:=Cells(intCount, 12)
9 |            Cells(i, 6 + j).Copy Destination:=Cells(intCount, 13)
10|        End If
11|        Next j
12|    Next i
13|End Sub

व्याख्या

बेहतर तरीके से समझाने के लिए कोड को यथासंभव छोटा रखना मेरा उद्देश्य था। मूल रूप से हम दो छोरों का उपयोग करते हैं। बाहरी लूप ( i) jमूल्य स्तंभों के लिए पंक्तियों और आंतरिक लूप ( ) के लिए है।

हम cells(rowNumber,columnNumber)कोशिकाओं को पढ़ने / लिखने के लिए उपयोग करते हैं।

  • पंक्ति 2 | पंक्ति 2 से अपनी अंतिम पंक्ति तक एक लूप प्रारंभ करें। हम हर प्रयुक्त पंक्ति के माध्यम से पुनरावृति करते हैं

  • पंक्ति 3 | 0 से 2 तक दूसरा लूप शुरू करें (जो कि वास्तव में 3 लूप हैं, हर प्राइस कॉलम के लिए एक)

  • पंक्ति 4 | हम इस आंतरिक लूप का उपयोग अपनी वर्तमान पंक्ति और स्तंभ मूल्य A में मानों की जांच करने के लिए करते हैं, फिर मूल्य B और अंतिम लूप मूल्य C में। यदि हम एक मूल्य कॉलम में मान पाते हैं, तो हम कोशिकाओं पर जाते हैं और कॉपी करते हैं। यदि कोई मूल्य नहीं डाला जाता है, तो हम कुछ भी नहीं करते हैं और अगले मूल्य कॉलम पर जाते हैं

  • पंक्ति 5 | यह जानने के लिए कि हमने पहले से ही कितनी पंक्तियों की प्रतिलिपि बनाई है, यह जानने के लिए एक काउंटर की गिनती करें कि हम
    अपनी वर्तमान पंक्ति को किस पंक्ति में कॉपी कर सकते हैं

  • लाइन 6 | नाम कॉलम कॉपी करें

  • लाइन 7 | वर्णन कॉलम कॉपी करें

  • पंक्ति 8 | वर्तमान में हम जो आंतरिक लूप हैं, उसके आधार पर मूल्य ए या बी या सी कॉलम की प्रतिलिपि बनाएँ

  • लाइन 9 | वर्तमान में हम जो आंतरिक लूप हैं, उसके आधार पर SKU A या B या C कॉलम की प्रतिलिपि बनाएँ

परिणाम स्क्रीनशॉट

यहां छवि विवरण दर्ज करें


1
यह शानदार है! वास्तव में मुझे क्या चाहिए। मेरा डेटा वास्तव में मेरे उदाहरण से थोड़ा अधिक जटिल है, और मैं वीबीए के लिए नया हूं, इसलिए आपकी व्याख्या में काफी मदद मिलती है। धन्यवाद!
GreysonD

2

यहाँ एक वर्कशीट फ़ंक्शन सॉल्यूशन है। सूत्र थोड़े घने हैं, इसलिए चेतावनी दी जाए, लेकिन इससे आपको वही मिलेगा जो आप चाहते हैं।

कदम:

  1. अपनी नई तालिका की पहली पंक्ति में, अपने डेटा में Nameपहली बार एक सीधा संदर्भ दर्ज Nameकरें। आपके उदाहरण में, आप दर्ज करेंगे =A2जहां A2 आपके डेटा में सूचीबद्ध पहला नाम है। नीचे दिए गए उदाहरण स्क्रीनशॉट में, यह सूत्र अंदर जाता है A8। सभी निम्नलिखित सूत्र स्क्रीनशॉट में उपयोग किए गए लेआउट का पालन करेंगे। आपको अपनी शीट से मिलान करने के लिए निश्चित रूप से सभी रेंज संदर्भों को अपडेट करना होगा।
  2. इसके नीचे की सेल में, निम्न सूत्र दर्ज करें:
    = IF (COUNTIF ($ A $ 9: ए 9, ए 9) = COUNTA (OFFSET ($ सी $ 1: $ ई $ 1, मैच (ए 9, $ A $ 2: $ A $ 5,0), 0)), सूचकांक ($ A $ 2 : $ एक $ 5, मैच (ए 9, $ A $ 2: $ A $ 5,0) +1), ए 9)
    
    यह मूल रूप से जाँच करता है कि ऊपर (में A9) सूचीबद्ध नाम के लिए कितनी पंक्तियाँ होनी चाहिए , और यदि आपकी नई तालिका में पहले से मौजूद पंक्तियों की संख्या इससे मेल खाती है, तो यह अगले नाम पर जाती है। यदि नहीं, तो उपरोक्त नाम के लिए एक और पंक्ति जोड़ी जाएगी।
    इस फॉर्मूले को नीचे तक भरें जहाँ तक आपको ज़रूरत है (जब तक कि यह एक नाम के बजाय 0 लौटाता है)।
  3. पहली पंक्ति Descriptionमें निम्न सूत्र दर्ज करें और नीचे भरें।
    = INDEX ($ B $ 2: $ B $ 5, मैच (ए 9, $ A $ 2: $ A $ 5,0))
  4. पहली पंक्ति के तहत SKU, निम्न सूत्र को सूत्र पट्टी में चिपकाएँ और Ctrl+ Shift+ दबाएँ Enter
    = INDEX (ऑफसेट ($ A $ 1: $ एच $ 1, मैच (ए 9, $ A $ 2: $ A $ 5,0), 0), छोटे (IF (OFFSET ($ एफ $ 1: $ एच $ 1, मैच (ए 9, $ एक $ 2: $ A $ 5,0), 0) <> "", स्तंभ ($ एफ $ 1: $ एच $ 1)), COUNTIF ($ A $ 9: $ ए 9, $ ए 9)))
    यह एक सरणी सूत्र है; यदि सही ढंग से दर्ज किया गया है तो सूत्र घुंघराले कोष्ठक में संलग्न सूत्र पट्टी में दिखाई देगा। अपनी तालिका में इस सूत्र को भरें (प्रत्येक उदाहरण इसी तरह घुंघराले कोष्ठक में प्रकट होना चाहिए)।
  5. इसी तरह, पहली पंक्ति के नीचे में Price, सूत्र पट्टी में निम्न सूत्र पेस्ट और एक सरणी सूत्र के रूप में यह दर्ज करें (दबाकर Ctrl+ Shift+ Enter)।
    = INDEX (ऑफसेट ($ A $ 1: $ एच $ 1, मैच ($ ए 9, $ A $ 2: $ A $ 5,0), 0), छोटे (IF (OFFSET ($ सी $ 1: $ ई $ 1, मैच ($ ए 9 , $ A $ 2: $ A $ 5,0), 0) <> "", स्तंभ ($ सी $ 1: $ ई $ 1)), COUNTIF ($ A $ 9: $ ए 9, $ ए 9)))
    नीचे भरें, और यह आपकी तालिका को पूरा करना चाहिए।

टेबल का स्क्रीनशॉट


प्रभावशाली सूत्र! इस और VBA उत्तर के बीच, मैं हर चीज के लिए तैयार हूं। धन्यवाद!
GreysonD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.