2011-12-19 9 views
13

मैं वर्तमान में एक पत्रक में इस डेटा के लिए प्रविष्टियों अलगस्प्लिट अल्पविराम नई पंक्तियाँ

Col A Col B 
1  angry birds, gaming 
2  nirvana,rock,band 

मुझे क्या करना, दूसरे कॉलम में अल्पविराम से अलग प्रविष्टियों विभाजित है और नीचे की तरह नई पंक्तियों में सम्मिलित किया जाता है चाहता हूँ क्या:

Col A Col B 
1 angry birds 
1 gaming 
2 nirvana 
2 rock 
2 band 

मुझे यकीन है कि यह वीबीए के साथ किया जा सकता है लेकिन इसे स्वयं नहीं समझ सका।

+0

आप कर रहे हैं [, यानी के बाद किसी भी रिक्त स्थान को दूर करने के लिए regexp साथ अपडेट किया गया ", बैंड" "बैंड" हो जाता है] से अधिक डंप करने के लिए इस जगह को करने की कोशिश कर रहे हैं या आप नई शीट का उपयोग करने के साथ ठीक हैं? –

+0

यह ठीक है किसी भी तरह से। – redGREENblue

+3

और आपने अभी तक कोशिश की है? क्या काम किया? क्या नहीं हुआ –

उत्तर

22

आप सेल छोरों के बजाय संस्करण सरणियों का उपयोग कर बेहतर होगा में परिणाम होता है - वे बहुत जल्दी कोड बुद्धिमान एक बार डेटा सेट सार्थक कर रहे हैं। यहां तक ​​कि कोड भी लंबा है :)

नीचे यह नमूना स्तंभ सी और डी पर डंप करता है ताकि आप मूल डेटा देख सकें। बदलें [c1].Resize(lngCnt, 2).Value2 = Application.Transpose(Y)[a1].Resize(lngCnt, 2).Value2 = Application.Transpose(Y) करने के लिए अपने मूल डेटा

Sub SliceNDice() 
Dim objRegex As Object 
Dim X 
Dim Y 
Dim lngRow As Long 
Dim lngCnt As Long 
Dim tempArr() As String 
Dim strArr 
Set objRegex = CreateObject("vbscript.regexp") 
objRegex.Pattern = "^\s+(.+?)$" 
'Define the range to be analysed 
X = Range([a1], Cells(Rows.Count, "b").End(xlUp)).Value2 
Redim Y(1 To 2, 1 To 1000) 
For lngRow = 1 To UBound(X, 1) 
    'Split each string by "," 
    tempArr = Split(X(lngRow, 2), ",") 
    For Each strArr In tempArr 
     lngCnt = lngCnt + 1 
     'Add another 1000 records to resorted array every 1000 records 
     If lngCnt Mod 1000 = 0 Then Redim Preserve Y(1 To 2, 1 To lngCnt + 1000) 
     Y(1, lngCnt) = X(lngRow, 1) 
     Y(2, lngCnt) = objRegex.Replace(strArr, "$1") 
    Next 
Next lngRow 
'Dump the re-ordered range to columns C:D 
[c1].Resize(lngCnt, 2).Value2 = Application.Transpose(Y) 
End Sub 

enter image description here

+1

+1 कूल कोड। अच्छा एक आदमी यदि संभव हो तो उन जगहों को हटा दें जो अल्पविराम के बाद आते हैं। एक बार फिर, अच्छा काम आदमी। – Ian

+0

@ कन्नान thx और अच्छा सुझाव, क्योंकि पूछने वाले ने डेटा लेआउट पर उठाए गए प्रश्न पर उत्तर नहीं दिया है, मैं आपके सुझाए गए सुधार – brettdj

+0

को रेगेक्स – brettdj

4

स्तंभ एक में अपने डेटा को ले जाता है और स्तंभ सी

Sub SplitAll() 
    Dim src As Range 
    Dim result As Variant 
    For Each src In Range("A:A").SpecialCells(xlCellTypeConstants) 
     result = Split(src, ",") 
     'last cell in column C 
     With Cells(Rows.Count, 3).End(xlUp) 
      Range(.Offset(1, 0), .Offset(1 + UBound(result, 1), 0)) = Application.WorksheetFunction.Transpose(result) 
     End With 
    Next src 
End Sub 
+0

ओउप्स, मैंने अभी कन्नन एस द्वारा प्रदान किया गया लिंक देखा है जैसे मैंने कुछ भी नहीं किया। वैसे भी मेरा कोड छोटा है :-)) –

+0

हाँ - और आपका कोड केवल कॉलम ए को विभाजित करता है ..... लेकिन डेटा पर काम करने वाला डेटा कॉलम बी था (ए मार्कर के रूप में) यह दो कॉलम आउटपुट था। :) – brettdj

+0

कम से कम यह RedGREENblue के लिए एक अच्छा छोटा अभ्यास होगा ;-) –

संबंधित मुद्दे