किसी अन्य स्तंभ में उनके मिलान मान के साथ कॉलम मानों को कैसे संरेखित करें?


1

मेरे पास डेटा के कई कॉलम हैं जिन्हें मुझे मास्टर कॉलम के साथ संरेखित करने की आवश्यकता है।

निम्नलिखित एक उदाहरण है जिसे मैं प्राप्त करने की उम्मीद करता हूं, लेकिन एक मेज के साथ जिसमें अधिक बड़े तार और अधिक पंक्तियां हैं। प्रत्येक पंक्ति में डेटा अद्वितीय है, केवल एक बार दिखाई दे रहा है। इसलिए मैं सिर्फ उन बी, सी और डी के उन अद्वितीय मूल्यों को ए के साथ संरेखित करने का लक्ष्य रखता हूं जिनमें ए की पूरी सूची सम्‍मिलित है। इसके अलावा, प्रत्येक कॉलम के मानों को क्रमबद्ध किया जाता है, इसलिए जब तक वे कॉलम A के साथ संरेखित नहीं करते हैं, तब तक यह कोशिकाओं को टक्कर देने का मामला है, जो कि मैं अब तक मैन्युअल रूप से करता रहा हूं, लेकिन स्वचालित करना चाहता हूं:

Example screenshot

मुझे एक्सेल के साथ सीमित अनुभव है, लेकिन सभी शोधों ने मुझे इस कोड को एक मॉड्यूल में उपयोग करने के लिए प्रेरित किया है। दुर्भाग्य से जब इसे चलाया जाता है, तो यह मेरे लिए बहुत कुछ नहीं करता है। दूसरे प्रयास में, अपनी क्षमताओं के सर्वश्रेष्ठ करने के लिए मैंने अपनी शीट में मूल्यों की श्रेणी के अनुरूप कोड को समायोजित करने का प्रयास किया, लेकिन मैं इसे चलाने के लिए नहीं कर सकता। इसलिए मुझे उम्मीद है कि अगर अधिक अनुभवी सदस्यों ने मुझे सूचित किया कि क्या मुझे वास्तव में कोड को अपना डेटा सूट करने की आवश्यकता है या यह सिर्फ काम करना चाहिए? किसी भी मदद के लिए धन्यवाद आप दे सकते हैं या बस पढ़ने के लिए समय ले रहे हैं!

Option Explicit
Sub AlignCustNbr()
' hiker95, 01/10/2011
' http://www.mrexcel.com/forum/showthread.php?t=520077
'
' The macro was modified from code by:
' Krishnakumar, 12/12/2010
' http://www.ozgrid.com/forum/showthread.php?t=148881
'
Dim ws As Worksheet
Dim LR As Long, a As Long
Dim CustNbr As Range
Application.ScreenUpdating = False
Set ws = Worksheets("Sheet1")
LR = ws.Range("E" & ws.Rows.Count).End(xlUp).Row
    ws.Range("E3:G" & LR).Sort Key1:=ws.Range("E3"), Order1:=xlAscending, Header:=xlNo, _
   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
ws.Range("A3:C" & LR).Sort Key1:=ws.Range("A3"), Order1:=xlAscending, Header:=xlNo, _
   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    Set CustNbr = ws.Range("A2:C" & LR)
    a = 2
    Do While CustNbr.Cells(a, 1) <> ""
    If CustNbr.Cells(a, 1).Offset(, 4) <> "" Then
    If CustNbr.Cells(a, 1) < CustNbr.Cells(a, 1).Offset(, 4) Then
      CustNbr.Cells(a, 1).Offset(, 4).Resize(, 3).Insert -4121
    ElseIf CustNbr.Cells(a, 1) > CustNbr.Cells(a, 1).Offset(, 4) Then
      CustNbr.Cells(a, 1).Resize(, 3).Insert -4121
      LR = LR + 1
      Set CustNbr = ws.Range("A3:C" & LR)
    End If
   End If
  a = a + 1
Loop
Application.ScreenUpdating = 1
End Sub!

है स्क्रीनशॉट इनपुट और उसके अपेक्षित आउटपुट का उदाहरण, या आपके कोड का परिणाम? यदि यह अपेक्षित परिणामों का एक उदाहरण नहीं है, तो कृपया इसे जोड़ें (किन मामलों सहित, जैसे: इनपुट में मान अद्वितीय हैं, और क्रमबद्ध?), यह समझाने के लिए कि आपका क्या "डेटा के कई कॉलम जिन्हें मुझे एक मास्टर कॉलम के साथ संरेखित करने की आवश्यकता है" माध्यम।
Arjan

@ अर्जन हाय, क्षमायाचना। मैं आगे स्पष्ट करूँगा। उदाहरण केवल एक उदाहरण है। यह कोड का परिणाम नहीं है। बस मैं क्या हासिल करने की उम्मीद करता हूं, लेकिन एक मेज के साथ जिसमें अधिक बड़े तार और अधिक पंक्तियां हैं। आगे की जानकारी यह है कि प्रत्येक पंक्ति में डेटा अद्वितीय है, केवल एक बार प्रदर्शित हो रहा है। इसलिए मैं सिर्फ उन बी, सी और डी के उन अद्वितीय मूल्यों को ए के साथ संरेखित करने का लक्ष्य रखता हूं जिनमें ए की पूरी सूची सम्‍मिलित है। इसके अलावा, प्रत्येक कॉलम के मानों को क्रमबद्ध किया गया है, इसलिए जब तक वे कॉलम A के साथ संरेखित नहीं करते हैं, तब तक यह कोशिकाओं से टकराता है।
OreoRyan

जब तक आप वास्तव में अतिरिक्त कॉलम नहीं चाहते, तब तक किसी भी मैक्रो की आवश्यकता नहीं है में देखूंगा VLOOKUP सूत्र और परिणाम के लिए अतिरिक्त कॉलम (या एक अलग वर्कशीट) का उपयोग करें।
Arjan

से संबंधित "इसके अलावा प्रत्येक कॉलम के मानों को क्रमबद्ध किया गया है" : यह आपके उदाहरण में सच नहीं है ...? (लेकिन के लिए एक समस्या नहीं है VLOOKUP, जब इसका 4 वा पैरामीटर है FALSE।)
Arjan

जवाबों:


0

मैं VBA में इतना अच्छा नहीं हूँ लेकिन यह कोड ऐसा कर सकता है:

Option Explicit

Public Sub AlignCustNbr()
    Dim ws As Worksheet
    Dim i As Long

    Application.ScreenUpdating = False
    Set ws = ActiveSheet
    For i = 2 To ws.Columns.Count
        If (Trim(ws.Cells(1, i).Value & "") = "") Then
            Exit For
        End If
        '
        Call Align2Columns(ws, 1, i)
    Next i
End Sub

Private Sub Align2Columns(ws As Worksheet, mainCol As Long, dataCol As Long)
    Dim colData() As String
    Dim strTemp As String, strTemp2 As String
    Dim i As Long, j As Long
    Dim lastDataRow As Integer

    ReDim colData(1 To ws.Rows.Count)
    lastDataRow = 1
    '
    'Findeing aligned datas to colData()
    For i = 1 To ws.Rows.Count
        strTemp = Trim(ws.Cells(i, dataCol).Value & "")
        If (strTemp = "") Then
            Exit For
        End If
        '
        For j = 1 To ws.Rows.Count
            strTemp2 = Trim(ws.Cells(j, mainCol).Value & "")
            If (strTemp2 = "") Then
                lastDataRow = lastDataRow + 1
                colData(j + lastDataRow) = strTemp2
                Exit For

            ' to avoid cese sensetive use commented line
            'ElseIf (UCase(strTemp) = UCase(strTemp2)) Then
            ElseIf (strTemp = strTemp2) Then
                colData(j) = strTemp2
                Exit For

            End If
        Next j
    Next i
    '
    'Update dataCol
    i = 0
    Do
        i = i + 1
        ws.Cells(i, dataCol).Value = colData(i)
        If (Trim(ws.Cells(i, mainCol).Value & "") = "") Then
            lastDataRow = lastDataRow - 1
        End If
    Loop While lastDataRow > 0
End Sub
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.