कस्टम सूची के बिना एक्सेल का उपयोग करके कस्टम सॉर्ट करें


3

मैं एक्सेल पंक्तियों को छाँटना चाहता हूँ जहाँ डेटा दिखता है

Column - 1                 Other Columns

701-GBL-1843-MLMK          blah
566-JJB-2785-MYJW
254-WYD-3220-NAND
884-GLE-2843-FRYA

और मैं तीसरे पैरामीटर द्वारा डेटा को सॉर्ट करने में सक्षम होना चाहता हूं, ताकि स्ट्रिंग के बीच में संख्याओं की तुलना की जा सके, ताकि यह समाप्त हो जाए

701-GBL-1843-MLMK
566-JJB-2785-MYJW
884-GLE-2843-FRYA
254-WYD-3220-NAND

क्या ऐसा करने का एक तरीका है, एक कस्टम सूची बनाने के बजाय जो 100000000000000 आइटम लंबे होंगे

मूल रूप से मैं जानना चाहता हूं कि एक्सेल के लिए कोड कैसे लिखना है जहां मैं एक कस्टम तुलना कर सकता हूं जो इस तरह होगा

छद्म:

mycompare(cell1, cell2):
    if(cell1's third param > cell2's third param):
        return GREATER
    if(cell1's third param < cell2's third param):
        return LESS
    return EQUAL

sort(myWorksheet, mycompare)

कहने की जरूरत नहीं है, मुझे नहीं पता कि वीबी को कैसे प्रोग्राम या उपयोग करना है। माफ़ करना।

जवाबों:


1

एक सहायक कॉलम बनाएं। उस कॉलम की पंक्ति 2 में (यह मानकर कि पंक्ति 1 में हेडर हैं) सूत्र में प्रवेश करें

=MID(A2,9,4)

यह पहले कॉलम में मूल्य से "तीसरा पैरामीटर" निकालेगा। फिर सहायक स्तंभ पर छाँटें:

सहायक कॉलम पर छँटाई


1

मेरे द्वारा लिया जाने वाला दृष्टिकोण डेटा का एक अतिरिक्त स्तंभ उत्पन्न करना है। कॉलम एक में आपके मूल्यों के प्रारूप को मानकर हमेशा आपके उदाहरण के अनुसार लंबाई तय की जाती है, मैं =MID(A2,9,4)तीसरे तत्व को एक अलग सेल में निकालने के लिए उपयोग करूंगा , ताकि आप उस कॉलम पर छांट सकें। मेरा सूत्र उदाहरण 9 वें चरित्र की स्थिति में शुरू होने वाले 4 चरित्र को चुनता है, जो दिखाए गए डेटा के उदाहरणों के लिए काम करता है।

अगर आपको 2 और 3 डैश खोजने के आधार पर तीसरे तत्व को निकालने वाले सूत्र की आवश्यकता है और उनके बीच की संख्या भी हो सकती है, तो मुझे वास्तव में सबसे कम दृष्टिकोण खोजने के लिए उस एक के साथ खेलना होगा, लेकिन यह आसानी से किया जा सकता है ।


0

मुझे पता है कि आपके पास एक उत्तर है, लेकिन चूंकि आपने पूछा कि इसे वीबीए के साथ कैसे करना है

Option Explicit

Sub Testing()

Start (False) ' large to small
Start (True) ' small to big

End Sub

Sub Start(fromSmallToBig As Boolean)

Dim myRow As Integer
myRow = 1

Do While (Range("A" & myRow).Value <> "")

    Dim currentValue As String
    currentValue = Range("A" & myRow).Value

    Dim nextValue As String
    nextValue = Range("A" & myRow + 1).Value

    If (nextValue = "") Then
    Exit Do
    End If

    Dim first() As String
    first = Split(currentValue, "-")

    Dim second() As String
    second = Split(nextValue, "-")


    If (fromSmallToBig) Then
        Call Sorting(first(2), second(2), myRow, nextValue, currentValue)
    Else
        Call Sorting(second(2), first(2), myRow, nextValue, currentValue)
    End If

    myRow = myRow + 1

Loop

End Sub

Sub Sorting(first As String, second As String, myRow As Integer, nextValue As String, currentValue As String)

      If first > second Then

        Dim rowOne() As Variant
        rowOne = Rows(myRow).Value

        Dim rowTwo() As Variant
        rowTwo = Rows(myRow + 1).Value

        Rows(myRow).Value = rowTwo
        Rows(myRow + 1).Value = rowOne

        myRow = 0 ' start all over again, not efficient but, simpler code

    End If

End Sub

इसका मतलब यह भी है कि आपको केवल छँटाई के लिए कोई अतिरिक्त कॉलम रखने की आवश्यकता नहीं है, हालाँकि यह वास्तव में एक अच्छी बात नहीं हो सकती है (स्कॉट का जवाब आपको एक्सेल की शक्ति का उपयोग करने की अनुमति देता है, जबकि मेरा VBa उत्तर कोई घंटी नहीं है और नहीं हो सकता है बहुत बड़े डेटा के साथ बहुत कुशल)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.