VBA एक्सेल में दो मानदंड के आधार पर पंक्तियों को अद्यतन और अद्यतन करें


0

क्या कोई मुझे VBA में एक कोड लिखने में मदद कर सकता है जो तालिका को अद्यतन करता है, या दो कॉलमों में मानदंडों के आधार पर नए डेटा को जोड़ता है?

उदाहरण के लिए, एक नाम स्तंभ और एक परियोजना स्तंभ हो सकता है, और हम जांचना चाहते हैं कि क्या मार्क ने प्रोजेक्ट 1 पर काम किया। यदि मार्क ने प्रोजेक्ट 1 पर काम किया है, तो एक अलग स्प्रेडशीट से नए डेटा के साथ उसकी पंक्ति को अपडेट करें। यदि Mark ने अलग-अलग स्प्रेडशीट में प्रोजेक्ट 2 पर काम किया है, लेकिन वह मूल स्प्रेडशीट में प्रलेखित नहीं है, तो उस पंक्ति की जानकारी के साथ मार्क और प्रोजेक्ट 2 को जोड़ें। यदि बेटी ने प्रोजेक्ट 1 पर काम किया है, और मूल स्प्रेडशीट में यह जानकारी है, तो इस पंक्ति को अपडेट करें। यदि बेटी ने प्रोजेक्ट 2 पर काम किया, लेकिन मूल स्प्रेडशीट में यह जानकारी नहीं है, तो इसे एक नई पंक्ति के रूप में जोड़ें। इसलिए नाम और परियोजनाएं दोनों अलग-अलग संयोजनों के साथ, तालिका में कई बार दिखाई देंगे।

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

यहाँ अब मेरे पास दोषपूर्ण कोड है:

Dim filename As String
Dim ManagerLEs As Workbook
Dim ProjectLEs As Workbook
Set ProjectLEs = ThisWorkbook

filename = Application.GetOpenFilename("Word files (*.xlsx),*.xlsx", , "Browse for file containing table to be imported")

If filename = Empty Then
    Exit Sub
End If

Set ManagerLEs = Application.Workbooks.Open(filename)

Dim first_blank_row As Long
first_blank_row = Cells.SpecialCells(xlCellTypeLastCell).Offset(1, 0).Row
starting_row = 4

Dim r As Long

r = starting_row

Dim namefound As Range
Dim projectfound As Range

firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value

Do While firstname <> 0

Set namefound = Columns("a:a").Find(what:=firstname, LookIn:=xlValues, lookat:=xlWhole)
Set projectfound = Columns("d:d").Find(what:=projectname, LookIn:=xlValues, lookat:=xlWhole)

    'look for current ticket number in main file
    If (namefound Is Nothing And projectfound Is Nothing) Then

        'add info to end of main file
        For c = 1 To 57
        ProjectLEs.Worksheets("Template").Cells(first_blank_row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
        first_blank_row = first_blank_row + 1
        Next c
    Else

        'overwrite existing line of main file
        For c = 1 To 57
        ProjectLEs.Worksheets("Template").Cells(namefound.Row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
        Next c
    End If

        r = r + 1
        firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
        projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
Loop

धन्यवाद!


अब आपके द्वारा लिखे गए कोड को पोस्ट करने का प्रयास करें और जहां आप अटक रहे हैं। संपूर्ण समस्या की तुलना में किसी विशेष मुद्दे को संबोधित करना बहुत आसान है।
इंजीनियर टोस्ट

जवाबों:


0

मैं इस प्रकार की आवश्यकता के लिए पॉवर क्वेरी ऐड-इन का उपयोग करूंगा। इसमें डेटा बदलने के कई कार्य हैं, जिसमें मर्ज और एपेंड शामिल हैं। आप बटन (यह कोड उत्पन्न करता है) पर क्लिक करके एक दृश्य UI में अपना क्वेरी बनाते हैं और परिणामी डेटा को हर चरण पर देख सकते हैं।

https://support.office.com/en-us/article/Microsoft-Power-Query-for-Excel-Help-2b433a85-ddfb-420b-9cda-fe0e60b82a94?ui=en-US&rs=en-001&ad=US


0

इस कोड की कोशिश की, काम नहीं करता है।

Sub importLEs()

With Excel.Application
    .ScreenUpdating = False
    .Calculation = Excel.xlCalculationManual
    .EnableEvents = False
End With

Dim filename As String
Dim ManagerLEs As Workbook
Dim ProjectLEs As Workbook
Set ProjectLEs = ThisWorkbook

'open file that you are importing data from
filename = Application.GetOpenFilename("Word files (*.xlsx),*.xlsx", , "Browse for file containing table to be imported")

If filename = Empty Then
    Exit Sub
End If

Set ManagerLEs = Application.Workbooks.Open(filename)

Dim first_blank_row As Long

first_blank_row = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
starting_row = 4

Dim r As Long
Dim rr As Long

r = starting_row
rr = 4

firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
mastername = ProjectLEs.Worksheets("Template").Range("a" & rr).Value
masterproject = ProjectLEs.Worksheets("Template").Range("d" & rr).Value

Do While firstname <> 0

    'counter to check if a row is updated
    flag = False

    Do While mastername <> 0

        If mastername = firstname And masterproject = projectname Then

            'update existing line of main file
            For c = 10 To 57
            ProjectLEs.Worksheets("Template").Cells(rr, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
            Next c
            flag = True
            Exit Do

        End If

    Loop

        'if data does not exist, append data to the end of main file
        If flag = False Then

            For c = 1 To 57
            ProjectLEs.Worksheets("Template").Cells(first_blank_row, c) = ManagerLEs.Worksheets("LEs").Cells(r, c)
            Next c

        End If

        first_blank_row = first_blank_row + 1
        rr = rr + 1
        r = r + 1
        firstname = ManagerLEs.ActiveSheet.Range("a" & r).Value
        projectname = ManagerLEs.ActiveSheet.Range("d" & r).Value
        mastername = ProjectLEs.Worksheets("Template").Range("a" & rr).Value
        masterproject = ProjectLEs.Worksheets("Template").Range("d" & rr).Value

Loop

With Excel.Application
    .ScreenUpdating = True
    .Calculation = Excel.xlAutomatic
    .EnableEvents = True
End With

End Sub

थोड़ी और मदद चाहिए।

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