বিভিন্ন পরামিতিগুলির ভিত্তিতে স্বতন্ত্র গণনা পান


0

কয়েকটি প্যারামিটারের ভিত্তিতে আমার স্বতন্ত্র গণনা (এক অনন্য মানের কতবার ঘটে) পাওয়া দরকার। টেবিলটি দেখতে এটির অনুরূপ:

http://i.imgur.com/kXNSyvH.png

পরিমাণ পাওয়া কোনও সমস্যা নয়, আমি কয়েকটি পরামিতি সহ সুমিফ () ব্যবহার করি। আমার সমস্যাটি আলাদা আলাদা গণনা নিয়ে।

ইউজার-আইডি কোনও সংখ্যা নয়, তবে একটি পাঠ্য।
আইটেম-আইডি একটি নম্বর।
পরিমাণ হল একটি সংখ্যা।
তারিখ একটি তারিখ।



0hmu, উপরের মন্তব্যে উল্লিখিত লিঙ্কটি কী সহায়তা করেছিল?
জ্রিচল

@ জরিচাল সত্যই নয়, তারিখগুলির সাথে কাজ করার জন্য এটি পাইনি। একটি ভিবিএ সমাধানও গ্রহণযোগ্য হবে।
0hm

@ জরিচাল আমি ভিবিএতে একটি সমাধান পেয়েছি, আমার পোস্ট উত্তর দেখুন।
0hm

উত্তর:


0

আমি ভিবিএ ব্যবহার করে একটি সমাধান পেয়েছি। আগ্রহী প্রত্যেকের জন্য কোডটি এখানে:

দ্রষ্টব্য: আমি বছরগুলিতে ভিবিএ ব্যবহার করি নি, তাই আমার কোডটি খুব ভাল নাও লাগতে পারে। পরিবর্তনগুলির জন্য যে কোনও পরামর্শই স্বাগতের চেয়ে বেশি।

প্রথমে আমি নামকরণকৃত সেলগুলি থেকে স্টার্টেট এবং এন্ডডেট পাব

Dim MAnfang     As Long
MAnfang = Range("Monatsanfang").Value2

Dim MEnde       As Long
MEnde = Range("Monatsende").Value2

তারপরে আমি একটি নামকৃত সেল থেকে আইটেম-আইডিও পেয়েছি এবং এটিকে একটি স্ট্রিংয়ে রূপান্তর করি

Dim ItemID     As String
ItemID = CStr(Range("ItemID").Value)

তারপরে আমি শীটটি সেট করেছি, শেষ সারিটি পেয়েছি, ফিল্টেরিয়া এবং অনন্য সারিটি সংজ্ঞায়িত করব

Dim FSheet      As Worksheet
Set FSheet = Sheets("Faktura")

Dim k           As Integer
k = FSheet.Range("M1").End(xlDown).Row

Dim FBereich    As Range
Set FBereich = FSheet.Range("A1:X" & k)

Dim UniqueColRange As Range
Set UniqueColRange = FSheet.Range("T2:T" & k)

তারপরে আমি আমার যুক্তিগুলির ভিত্তিতে এটি ফিল্টার করতে নীচের ফাংশনটি কল করি এবং অনন্য গণনাটি ফিরিয়ে এনে অন্য একটি নামক সেলে লিখি

Range("Endresult").Value = FilterAndGetCount(FSheet, FBereich, 12, MAnfang, MEnde, 6, Array(ItemID), UniqueColRange )

End Sub

Private Function FilterAndGetCount(FilterSheet As Worksheet, FilterBereich As Range, DFeld As Integer, DStart As Long, DEnde As Long, LNFeld As Integer, LNArray As Variant, UniqueColumnRange As Range)

    FilterBereich.AutoFilter _
    Field:=DFeld, _
        Operator:=xlAnd, _
        Criteria1:=">=" & DStart, _
        Criteria2:="<=" & DEnde

    FilterBereich.AutoFilter _
        Field:=LNFeld, _
        Operator:=xlFilterValues, _
        Criteria1:=LNArray

    Total = getVisibleArray(UniqueColumnRange)
    FilterAndGetCount = getUniqueCount(Total) - 1
    If FilterSheet.AutoFilterMode Then FilterSheet.ShowAllData

End Function

Private Function getUniqueCount(varray As Variant) As Integer

    Dim dict As Object
    Set dict = CreateObject("scripting.dictionary")
    Dim element As Variant

    For Each element In varray
        If dict.exists(element) Then
            dict.Item(element) = dict.Item(element) + 1
        Else
            dict.Add element, 1
        End If
    Next

    getUniqueCount = dict.Count

End Function

Private Function getVisibleArray(vrange As Range) As Variant

    Dim i As Integer
    i = 0

    Dim VisibleArray() As Variant
    Dim VisibleArrayLength As Integer
    VisibleArrayLength = vrange.SpecialCells(xlCellTypeVisible).Count
    ReDim VisibleArray(VisibleArrayLength)

    For Each c In vrange.SpecialCells(xlCellTypeVisible)
        VisibleArray(i) = c.Value
        i = i + 1
    Next c

    getVisibleArray = VisibleArray

End Function
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.