কলাম মূল্য এবং সংরক্ষণকারী কলাম দ্বারা পৃথক ফাইলগুলিতে এক্সেল ডেটা ফিল্টার করা হচ্ছে


1

অনেক বছর আগে আমরা সমীক্ষার ফলাফলগুলির সমাধান নিয়ে এসেছি যে আমরা CSV এর মাধ্যমে পেয়েছিলাম। তারপরে আমরা সেই তথ্যটি পেয়ে যাব যেখানে প্রথম কলামটি ই-মেইল ছিল এবং পরবর্তী কলামগুলি কোনও সংস্থার আগ্রহের নির্দেশ দিতে 1 বা এর কম ছিল। আমরা ই-মেইল কলামের পরে প্রতিটি কলামে গিয়ে যে সমাধানটি নিয়ে আসার চেষ্টা করছিলাম, সেগুলির মধ্যে 1 টি কলামের জন্য প্রতিটি কলামের জন্য ইমেলের একটি তালিকা সংরক্ষণ করেছিলাম যাতে আমরা সেগুলি সংস্থায় পাঠাতে পারি।

আমাদের তথ্য (সরলীকৃত) এই মত লাগছিল:

enter image description here

শেষ ফলাফলটি 4 টি নতুন .xlsx ফাইল (club1.xlsx, club2.xlsx, club3.xlsx, ইত্যাদি) সরবরাহ করবে যেখানে প্রতিটি 'নিজেই' তাদের নিজ কলামের জন্য তাদের ইমেলগুলিতে 'ইমেল' থাকবে। (উপরের উদাহরণে Club1.xlsx এর মধ্যে ইমেল1, ইমেল 3, ইমেল 7 তালিকাভুক্ত থাকবে)

সেই সময়ে, স্ট্যাক এক্সচেঞ্জ সম্প্রদায় একটি ম্যাক্রো চালানোর জন্য নিম্নোক্ত VBA কোড প্রদান করে সমাধানটি উত্সাহিত করতে সহায়তা করার জন্য আমাদের সহায়ক ছিল:

Option Explicit

Sub FilterData()
    Dim Responses As Worksheet
    Dim Column As Long

    Set Responses = ThisWorkbook.Worksheets("Responses")
    Column = 2

    Do While Responses.Cells(1, Column).Value <> ""
        With Workbooks.Add(xlWBATWorksheet)
            With .Worksheets(1)
                Responses.Cells.Copy .Cells
                .Columns(Column).AutoFilter Field:=1, Criteria1:="<>1"
                .Rows(2).Resize(.Rows.Count - 1).Delete Shift:=xlUp
                .Columns(2).Resize(, .Columns.Count - 1).Delete Shift:=xlShiftToLeft
            End With

            .Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\" & Responses.Cells(1, Column).Value
        End With

        Column = Column + 1
    Loop
End Sub

কিন্তু আমাদের লেআউট পরিবর্তিত হয়েছে এবং আমাদের জীবনের জন্য আমরা কীভাবে কোডটি সংশোধন করতে পারি সেটি সংরক্ষণ করতে আরো কলাম অন্তর্ভুক্ত করতে। শুধু 'ইমেল' কলামের পরিবর্তে, এখন আমাদের পছন্দের নাম, প্রথম নাম, শেষ নাম এবং Pronouns এর জন্য অতিরিক্ত কলাম রয়েছে। উপরের কোডটি সংশোধন করার আমাদের প্রচেষ্টাগুলি কেবল ম্যাক্রোটিকে সম্পূর্ণভাবে ভাঙ্গাতে পারে, অথবা শুধুমাত্র একটি সারি সংরক্ষণ করতে পারে।

যে কেউ আমাদের নতুন কোড লিখতে পারে বা আমাদের রপ্তানিতে সমস্ত কলাম অন্তর্ভুক্ত করার জন্য বিদ্যমান কোডটি পরিবর্তন করতে পারে তার বিষয়ে পরামর্শ দেবে (তাই Club1.xlsx এখন নাম, প্রথম নাম, শেষ নাম, কলাম / সারির তথ্য থাকবে) Pronouns, এবং একটি "1" সঙ্গে প্রতিটি কলামের জন্য ইমেল)।

এখানে আমাদের নতুন তথ্য সেট আছে: enter image description here

কোন চিন্তা? আমি stumped করছি।

উত্তর:


1

উৎস ডাটা দিয়ে চেষ্টা করার জন্য, এটি আমার অতিথিবৃন্দ হবে

আমি একটি পদ্ধতি তৈরি করেছি যা উৎস ফাইলের জন্য প্রম্পট করা উচিত, তারপরে একটি আউটপুট ওয়ার্কবুক তৈরি করুন এবং সেই ক্লাবটির জন্য আগ্রহযুক্ত পার্টি বিশদ তালিকাভুক্ত প্রতিটি ক্লাবের জন্য একটি শীট যোগ করুন।

এটি অনুমান করে যে উৎস ফাইলটি এক্সেল এক্সেল এক্সেল "xlsx" এছাড়াও এটি অনুমান করে যে উৎস ডেটা "প্রতিক্রিয়া" নামক একটি শিটে রয়েছে।

এটি উৎস ফাইলটি বন্ধ করে দেয় তবে উত্পন্ন কার্যপুস্তিকা নয়।

আমি কিভাবে কাজ করে ব্যাখ্যা করার জন্য কোড মন্তব্য করেছেন।

   Sub FilterData()

    '------------- Define the Variables -----------------
    'Define workbooks and worksheets
    Dim wbkSource As Workbook, shtSource As Worksheet '. Source Date
    Dim wbkList As Workbook, shtList As Worksheet '..... Final workbook with separate sheets

    'Define Index looping variables  and last positions
    Dim idxRows As Double, idxCols As Double
    Dim lastRow As Double, lastCol As Double

    'Define the identifier holders
    Dim fileName As String '................... Holds the selected source file name
    Dim clubName As String '................... Holds the current Club name
    Dim cntRows As Double '.................... Flags is there is a club entry or not and tracks the club entry position

    '----------------- Assign the startup values
    'Open the source file  and assign it as  wbkSource, when the user has not cancelled
    fileName = Application.GetOpenFilename("Excel File (*.xlsx),*.xlsx, All Files (*.*), (*.*)", , "Please select the source file")
    If fileName <> "False" Then

            'Assign the workbook source to the opened file
            Set wbkSource = Workbooks.Open(fileName)

            'Assign the source worksheet
            Set shtSource = wbkSource.Worksheets("Responses")

            'Create the output workbook and assign it to the wbkList
            Workbooks.Add
            Set wbkList = Workbooks(Workbooks.Count)

            'Define the last row and column positions
            lastRow = shtSource.Cells.SpecialCells(xlCellTypeLastCell).Row
            lastCol = shtSource.Cells.SpecialCells(xlCellTypeLastCell).Column

            '-------------------------------------- Loop through each possible club
            For idxCols = 6 To lastCol
                'Get the next club name and reset the flag
                clubName = shtSource.Cells(1, idxCols)
                cntRows = 0

                '----------------------------------- Loop for each row
                For idxRows = 2 To lastRow

                    'When we have an interest for this contact for this club
                    If shtSource.Cells(idxRows, idxCols) = 1 Then
                        'Increment the row count
                        cntRows = cntRows + 1

                            'If this is the first time create the worksheet for this club
                            If cntRows = 1 Then
                                wbkList.Worksheets.Add
                                Set shtList = wbkList.Worksheets.Add
                                shtList.Name = clubName

                                'Create the Title row
                                shtList.Cells(1, 1) = "Preferred"
                                shtList.Cells(1, 2) = "First"
                                shtList.Cells(1, 3) = "Last"
                                shtList.Cells(1, 4) = "Pronouns"
                                shtList.Cells(1, 5) = "Emails"

                                'Increment the row count to allow for the title
                                cntRows = cntRows + 1

                            End If

                            'Add the data to the club sheet
                            shtList.Cells(cntRows, 1) = shtSource.Cells(idxRows, 1)
                            shtList.Cells(cntRows, 2) = shtSource.Cells(idxRows, 2)
                            shtList.Cells(cntRows, 3) = shtSource.Cells(idxRows, 3)
                            shtList.Cells(cntRows, 4) = shtSource.Cells(idxRows, 4)
                            shtList.Cells(cntRows, 5) = shtSource.Cells(idxRows, 5)


                    End If 'Interested for this club

                Next idxRows
                '----------------------------------- each row

            Next idxCols
            '------------------------------------ Each Club

            'Turn off warning termporarily and close the source file
            Application.DisplayAlerts = False
            wbkSource.Close
            Application.DisplayAlerts = True


    Else
        'Notify the user of the cancelling of the macro
        MsgBox "Error: Canncelled by user, closing marco.", vbCritical, "User cancelled!"
    End If


    End Sub

আশা করি এটা সাহায্য করবে, ভি


এই জন্য ধন্যবাদ - আপনি একটি সুপার গভীর ডুব না। আমি একটি ম্যাক (যদিও একটি পিসিতে চলে যেতে পারি), তাই এক্সএলএক্সএক্স ফাইল ফিল্টারের বৈশিষ্ট্যগুলি মুছে ফেললাম কারণ তারা একটি ডায়ালগ বক্স খোলার সময় ম্যাক্রো ভেঙ্গেছিল। যতদূর কার্যকারিতা এটি কাজ করে। কি ধরনের! এটি প্রতিটি 'ক্লাব' (এছাড়াও তাদের মধ্যে কিছু ফাঁকা শীট) জন্য ওয়ার্কবুক সহ একটি একক নথি তৈরি করেছে। আমরা প্রতি প্রতিষ্ঠানের জন্য একটি ফাইল সন্ধান করছি (বরং এক কাজের বই) যাতে আমরা পৃথকভাবে তালিকাগুলি পাঠাতে পারি - তবে আমি প্রতিটি ফাইল পৃথকভাবে কীভাবে সংরক্ষণ করতে পারি তা মনে করতে পারছি না (club1.xlsx, club2.xlsx , ইত্যাদি)
Cody S.

1
আপনাকে যা করতে হবে তা হল "ওয়ার্ক wbklist.worksheets.add" এবং "wbklist.saveas" এর মধ্যে স্যান্ডউইচ করা "আপনি আউটপুট ওয়ার্কবুক তৈরি করুন এবং এটি wbklist এ নিযুক্ত করুন" সরান। অনুসরণ করে একটি \ "& amp; clubname & amp; "xls" এবং এটি আপনার জন্য কাজ করা উচিত। আপনি তখন একটি নতুন ওয়ার্কবুক তৈরি করবেন এবং শুধুমাত্র একটি নতুন ওয়ার্কশীট তৈরি করবেন না
VHalpenny

0

সেই সময়ে, স্ট্যাক এক্সচেঞ্জ সম্প্রদায় একটি ম্যাক্রো চালানোর জন্য নিম্নোক্ত VBA কোড প্রদান করে সমাধানটি উত্সাহিত করতে সহায়তা করার জন্য আমাদের সহায়ক ছিল:

এই একটি স্বয়ংক্রিয় প্রক্রিয়ার মধ্যে সম্পন্ন করা আছে? যদি না হয় তবে আপনি কলামের মানগুলির উপর ভিত্তি করে সমগ্র টেবিলটি ফিল্টার করতে পারেন ক্লাব 1, ক্লাব 2, ক্লাব 3 , এবং ফলাফল পৃথক ফাইল অনুলিপি। আপনি শুধুমাত্র 10 এর কম আছে 'ক্লাব' , এই VBA লিখতে সংগ্রাম চেয়ে দ্রুত হতে পারে।


আমাদের মোট ডেটা সেটটিতে 200+ 'সংগঠন' / কলাম এবং প্রায় 2000 টি সারি রয়েছে, তাই ম্যানুয়াল প্রক্রিয়া করতে দীর্ঘ সময় লাগবে - এইজন্য আমরা একটি স্বয়ংক্রিয় প্রক্রিয়া খুঁজছেন।
Cody S.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.