दिलचस्प पोस्ट
ब्लैकबेरी कर्व 8520 में "टनल असफल" अपवाद क्रोम: पृष्ठभूमि टैब में समय समाप्ति / अंतराल निलंबित? हम जावा रेगेक्स के साथ ^ nb ^ n कैसे मेल कर सकते हैं? java.lang.NoClassDefFound त्रुटि: com.google.firebase.FirebaseOptions सांबा जेसीआईएफएस के साथ जावा का उपयोग करने की सुविधा कैसे जावा से एक्सएमएल सुंदर मुद्रित करने के लिए? स्विस के काम में पार्स उपयोगकर्ता नामों के लिए स्मार्ट-सर्च काम नहीं कर रहा है CakePHP JOIN के साथ विधि का पता लगाएं सिंक्रनाइज़ SQL सर्वर 2008 डेटाबेस WCF और सिंक्रनाइज़ेशन फ्रेमवर्क का उपयोग करते हुए हैश टकराव और स्ट्रिंग के लिए प्रदर्शन के मामले में सर्वश्रेष्ठ हैशिंग एल्गोरिथ्म सी किसी भी मौजूदा सामग्री को अधिलेखित किए बिना एक बाइनरी फ़ाइल के बीच में लिखें सरणी में अंतिम कुंजी कैसे प्राप्त करें? मल्टीप्रोसेसिंग बनाम थ्रेडिंग पायथन मैं कोको के साथ एक अस्थायी फ़ाइल कैसे बनाऊं? स्थानीय डेट को जावा.उटील.डेट और इसके विपरीत सरल रूपांतरण?

एक्सेल मॅक्रो (VBA) एकाधिक कॉलमों को एकाधिक पंक्तियों में स्थानांतरित करने के लिए

इस प्रकार का परिवर्तन है कि मैं क्या करने की कोशिश कर रहा हूं। बस चित्रण के लिए मैंने इसे टेबल के रूप में बना दिया है। तो मूल रूप से पहले 3 कॉलम को दोहराना चाहिए कि कितने रंग उपलब्ध हैं। यहां छवि विवरण दर्ज करें

मैंने अन्य समान प्रकार के लिए खोज की थी, लेकिन जब मैं कई कॉलम दोहराएंगे तो मैं नहीं मिल सकता। मुझे यह कोड ऑनलाइन मिला है लेकिन यह नाम है धन्यवाद स्थान धन्यवाद स्थान धन्यवाद स्थान धन्यवाद और नीचे की तरह बनाता है नाम धन्यवाद धन्यवाद

Sub createData() Dim dSht As Worksheet Dim sSht As Worksheet Dim colCount As Long Dim endRow As Long Dim endRow2 As Long Set dSht = Sheets("Sheet1") 'Where the data sits Set sSht = Sheets("Sheet2") 'Where the transposed data goes sSht.Range("A2:C60000").ClearContents colCount = dSht.Range("A1").End(xlToRight).Column '// loops through all the columns extracting data where "Thank" isn't blank For i = 2 To colCount Step 2 endRow = dSht.Cells(1, i).End(xlDown).Row For j = 2 To endRow If dSht.Cells(j, i) <> "" Then endRow2 = sSht.Range("A50000").End(xlUp).Row + 1 sSht.Range("A" & endRow2) = dSht.Range("A" & j) sSht.Range("B" & endRow2) = dSht.Cells(j, i) sSht.Range("C" & endRow2) = dSht.Cells(j, i).Offset(0, 1) End If Next j Next i End Sub 

क्या कोई मुझे अपना प्रारूप बदलने में मदद कर सकता है, मैंने चरण 2 से 1 और जम्मू को 4 से शुरू करने की कोशिश की लेकिन यह उपयोगी नहीं था, उदाहरण के लिए, 2 विभिन्न सेटों के साथ: 2 अलग सेट

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

वेब के समाधान से एकत्रित समाधान "एक्सेल मॅक्रो (VBA) एकाधिक कॉलमों को एकाधिक पंक्तियों में स्थानांतरित करने के लिए"

यहां एक सामान्य "अनपिट" दृष्टिकोण है (इनपुट डेटा के बाईं ओर सभी "निश्चित" कॉलम दिखना चाहिए)

टेस्ट उप:

 Sub Tester() Dim p 'get the unpivoted data as a 2-D array p = UnPivotData(Sheets("Sheet1").Range("A1").CurrentRegion, _ 3, False, False) With Sheets("Sheet1").Range("H1") .CurrentRegion.ClearContents .Resize(UBound(p, 1), UBound(p, 2)).Value = p 'populate array to sheet End With 'EDIT: alternative (slower) method to populate the sheet ' from the pivoted dataset. Might need to use this ' if you have a large amount of data Dim r As Long, c As Long For r = 1 To Ubound(p, 1) For c = 1 To Ubound(p, 2) Sheets("Sheet2").Cells(r, c).Value = p(r, c) Next c Next r End Sub 

UnPivot फ़ंक्शन:

 Function UnPivotData(rngSrc As Range, fixedCols As Long, _ Optional AddCategoryColumn As Boolean = True, _ Optional IncludeBlanks As Boolean = True) Dim nR As Long, nC As Long, data, dOut() Dim r As Long, c As Long, rOut As Long, cOut As Long, cat As Long Dim outRows As Long, outCols As Long data = rngSrc.Value 'get the whole table as a 2-D array nR = UBound(data, 1) 'how many rows nC = UBound(data, 2) 'how many cols 'calculate the size of the final unpivoted table outRows = nR * (nC - fixedCols) outCols = fixedCols + IIf(AddCategoryColumn, 2, 1) 'resize the output array ReDim dOut(1 To outRows, 1 To outCols) 'populate the header row For c = 1 To fixedCols dOut(1, c) = data(1, c) Next c If AddCategoryColumn Then dOut(1, fixedCols + 1) = "Category" dOut(1, fixedCols + 2) = "Value" Else dOut(1, fixedCols + 1) = "Value" End If 'populate the data rOut = 1 For r = 2 To nR For cat = fixedCols + 1 To nC If IncludeBlanks Or Len(data(r, cat)) > 0 Then rOut = rOut + 1 'Fixed columns... For c = 1 To fixedCols dOut(rOut, c) = data(r, c) Next c 'populate unpivoted values If AddCategoryColumn Then dOut(rOut, fixedCols + 1) = data(1, cat) dOut(rOut, fixedCols + 2) = data(r, cat) Else dOut(rOut, fixedCols + 1) = data(r, cat) End If End If Next cat Next r UnPivotData = dOut End Function 

यहां एक तरीका है ( सबसे तेज़? ) एरे का उपयोग करना यह दृष्टिकोण बेहतर है कि लिंक्ड प्रश्न, क्योंकि यह लूप में रेंज ऑब्जेक्ट्स को / पढ़ने से नहीं लिखता है। मैंने कोड पर टिप्पणी की है ताकि आपको इसे समझने में समस्या न हो।

 Option Explicit Sub Sample() Dim wsThis As Worksheet, wsThat As Worksheet Dim ThisAr As Variant, ThatAr As Variant Dim Lrow As Long, Col As Long Dim i As Long, k As Long Set wsThis = Sheet1: Set wsThat = Sheet2 With wsThis '~~> Find Last Row in Col A Lrow = .Range("A" & .Rows.Count).End(xlUp).Row '~~> Find total value in D,E,F so that we can define output array Col = Application.WorksheetFunction.CountA(.Range("D2:F" & Lrow)) '~~> Store the values from the range in an array ThisAr = .Range("A2:F" & Lrow).Value '~~> Define your new array ReDim ThatAr(1 To Col, 1 To 4) '~~> Loop through the array and store values in new array For i = LBound(ThisAr) To UBound(ThisAr) k = k + 1 ThatAr(k, 1) = ThisAr(i, 1) ThatAr(k, 2) = ThisAr(i, 2) ThatAr(k, 3) = ThisAr(i, 3) '~~> Check for Color 1 If ThisAr(i, 4) <> "" Then ThatAr(k, 4) = ThisAr(i, 4) '~~> Check for Color 2 If ThisAr(i, 5) <> "" Then k = k + 1 ThatAr(k, 1) = ThisAr(i, 1) ThatAr(k, 2) = ThisAr(i, 2) ThatAr(k, 3) = ThisAr(i, 3) ThatAr(k, 4) = ThisAr(i, 5) End If '~~> Check for Color 3 If ThisAr(i, 6) <> "" Then k = k + 1 ThatAr(k, 1) = ThisAr(i, 1) ThatAr(k, 2) = ThisAr(i, 2) ThatAr(k, 3) = ThisAr(i, 3) ThatAr(k, 4) = ThisAr(i, 6) End If Next i End With '~~> Create headers in Sheet2 Sheet2.Range("A1:D1").Value = Sheet1.Range("A1:D1").Value '~~> Output the array wsThat.Range("A2").Resize(Col, 4).Value = ThatAr End Sub 

SHEET1

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

SHEET2

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