شمارش شرطی

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • sohrabahmadi

    • 2012/05/03
    • 142
    • 35.00

    شمارش شرطی

    با سلام به اساتید گرامی .توضیحات رو تو فایل پیوست نوشتم ممنون میشم راهنمایی بفرمایید.شمارش بطوری که اسامی تکراری را 1 حساب کند.اگه کد وی بی هم لطف بفرمایین
    فایل های پیوست شده
    [b][color=#6B8E23]تو خشنود باشی و ما رستگار[/color][/b]
  • iranweld

    • 2015/03/29
    • 3341

    #2
    با سلام


    کدهای ذیل تکراری ها را یکی در نظر میگیرد و عمل شمارش را انجام میدهد.

    کد PHP:
    Sub test()

    Dim list1 As New Collection

    Set list1 
    Nothing

    Dim rng
    cell As Range

    Range
    ("e1") = ""

    Z1 Cells(Rows.Count"B").End(xlUp).Row

    Set rng 
    Range("B1:B" Z1)

    On Error Resume Next

    For Each cell In rng

    if cell<>"" then

    list1
    .Add cellCStr(cell)

    end if

    Next

    Range
    ("e1") = list1.Count


    End Sub 
    فایل های پیوست شده

    کامنت

    • amir_ts

      • 2015/03/17
      • 1247

      #3
      با سلام
      برای شمارش بدون تکرار میشه از فرمول آرایه ای زیر استفاده کرد:
      کد PHP:
      =SUM(IFERROR(1/COUNTIF(B1:B20;B1:B20);0)) 
      یا از تابع قدرتمند FREQUENCY استفاده کرد:
      کد PHP:
      =SUM(IF(FREQUENCY(MATCH(B1:B20;B1:B20;0);MATCH(B1:B20;B1:B20;0))>0;1)) 
      حالا چنانچه بخواهید از کد های vba استفاده کنید میتونید از روش Evaluate استفاده کنید.
      کد:
      [LEFT]
      Sub CountUnique()
      Dim result1, result2 As Integer
      result1 = Application.Evaluate("=SUM(IFERROR(1/COUNTIF(b1:b20,b1:b20),0))")
      result2 = Application.Evaluate("=SUM(IF(FREQUENCY(MATCH(B1:B20,B1:B20,0),MATCH(B1:B20,B1:B20,0))>0,1))")
      Range("f4").Value = result1
      Range("f5").Value = result2
      End Sub
      [/LEFT]
      [SIZE=7][B][COLOR=navy][FONT=IranNastaliq]ای برادر تو همه اندیشه ای[/FONT][/COLOR][/B][/SIZE]

      کامنت

      • sohrabahmadi

        • 2012/05/03
        • 142
        • 35.00

        #4
        ممنون از راهنمایی بسیار عالی تون.اگه یه شرط به این اضافه کنیم چه باید کرد ؟مثلا به اضافه شرایط بالا شرط شنارش این باشه که ستون قبلی حتماً برابر با 1 باشه .البته با وی بی لطف میکنید اگه راهنمایی بفرمایید
        فایل های پیوست شده
        [b][color=#6B8E23]تو خشنود باشی و ما رستگار[/color][/b]

        کامنت

        • iranweld

          • 2015/03/29
          • 3341

          #5
          با سلام

          فقط کد خط

          کد PHP:
          If cell <> "" And cell.Offset(0, -1).Value 
          تغییر مینماید.

          چنانچه خواستید بر حسب درجه اولویت نیز افراد را مشخص کنید فایل دوم را دانلود کنید

          کد PHP:
          Sub test()

          Dim list1 As New Collection

          Set list1 
          Nothing

          Dim rng
          cell As Range

          z1 
          Cells(Rows.Count"B").End(xlUp).Row

          Range
          ("e1:e" z1) = ""

          Set rng Range("B1:B" z1)

          On Error Resume Next

          For Each cell In rng

          If cell <> "" And cell.Offset(0, -1).Value 1 Then

          list1
          .Add LCase(cell), CStr(LCase(cell))

          End If

          Next

          Range
          ("e1") = list1.Count

          For 1 To list1.Count

          Range
          ("e" 1) = list1.Item(i)

          Next


          End Sub 
          فایل های پیوست شده
          Last edited by iranweld; 2016/07/01, 17:50.

          کامنت

          چند لحظه..