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

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

    • 2013/05/29
    • 111

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

    با عرض سلام
    چند کد رو میخواستیم بصورت هم زمان در یک شیت سرچ کنیم .
    مثلا در ستون a هزار کد داریم و در ستون b نیز پنجاه کد داریم و حال می خواستیم عبارتهای ستون b در a را بصورت هم زمان سرچ بکنیم و مثلا نتیجش بصورت مثلا عدد یک در ستون c درج بشه و یا نتیجش بصورت رنگی شدن سلولهای ستون a باشد
    فایل های پیوست شده
  • امين اسماعيلي
    مدير تالار ويژوال بيسيك

    • 2013/01/17
    • 1198
    • 84.00

    #2
    با درود
    من یه کد برای یه دکمه نوشتم این کد میاد هر چی تو ستون بی هست رو تو ستون A میگرده پیدا میکنه پیدا میکنه و بعد ادرسشو میزاره برات جلوش تو ستون C حالا اگر تکراری بود یعنی بیش از یه بار تکرار شده بود باز ادرس بعدی رو با یک واو جدا میکنه برات باز میاره . من داده هات یخورده برای تست این مورد قاطی پاتیش کردم. همیشه هم اول اون ستون جستجو رو خالی میکنه و دوبار شروع میکنه. اون مورد تکراری اگر نباشه که یه خورده میه سرعتشم زیاد تر بشه. در ضمن به جای for هم میشه از find استفاده کرد که سرعت بالاتر بره.(مورد تکراری تو ستون A بزار و خودتم بسنجش

    کد:
    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    Columns(3).ClearContents
    LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastRow1 = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For Each m In Sheet1.Range("B1:B" & LastRow)
    For Each c In Sheet1.Range("A1:A" & LastRow1)
    If m.Value = c.Value Then
    y = m.Offset(0, 1).Value
    m.Offset(0, 1).Value = c.Address & " , " & y
    End If
    Next c
    Next m
    Application.ScreenUpdating = True
    
    End Sub
    برای یه button بنام یک نوشته شده .
    Last edited by امين اسماعيلي; 2014/04/14, 22:10.
    در پناه خداوندگار ایران زمین باشید و پیروز

    کامنت

    • bnyamin

      • 2013/05/29
      • 111

      #3
      سلام
      با تشکر از لطفتون
      چند نکته :
      1- در بین اعداد ستون a و در بین اعداد ستون b اعداد تکراری نداریم (چون هر کدوم از سلولهای دو ستون ؛ حکم یک کد رو دارند ).
      2- ولی در بین کد های ستون a سلول خالی وجود داره (که کدی که شما نوشته اید کدهای خالی ستون bو a رو نیز باهم مورد سرچ قرار میده و در قبال سلول های خالی نیز اطلاعات نتیجه جستجو رو درج میکنه )
      3- و نکته خیلی مهم که من باید در سوالم دقیق تر اونو مطرح میکرم در اصل مربوط به نتیجه کاره که در اصل ما میخواهیم یکسری داده ها رو در ستون a پیدا کنیم و متعاقبا نتیجه خروجی در ستون c باید هم راستا باداده های پیدا شده در ستون a باشند .یعنی داده های یافت شده با یدمتناسب با سطر های ستون a باشند.
      4- و اینکه آدرس اصلا مهم نیست ؛ اگر برای تمامی نتایج یافته شده یک عدد مثلا یک ( هم راستا با سطر ستون a ) درج بشه کافیه .(بعد از طریق فیلتر کردن عدد یک نتیجه خالص بدست می آید )
      -- متناسب با دو مورد آخری که خدمتتون مطرح کردم یک فایل پیوست قرار میدهم که نتیجه مورد نظر در ستون c درج گردیده است .
      فایل های پیوست شده

      کامنت

      • امين اسماعيلي
        مدير تالار ويژوال بيسيك

        • 2013/01/17
        • 1198
        • 84.00

        #4
        با درود خب چرا اصلا ماکرو . چرا با فرمول انجام نمیدین. بعد اینجا شما A رو داری تو b میگردی درسته و اگر بود تو سطر متناظرش 1 بنویسه. این فرمول رو بنویس تو C2 ببین حله
        کد:
        =IF(COUNTIF($B$2:$B$20,A2)=0,"",COUNTIF($B$2:$B$20,A2))
        تو فایل بالا به من چیزه دیگه ای گفتی. من داشتم Bرو تو A میگشتم
        Last edited by امين اسماعيلي; 2014/04/14, 14:37.
        در پناه خداوندگار ایران زمین باشید و پیروز

        کامنت

        • حسام بحرانی

          • 2013/09/29
          • 2065
          • 72.00

          #5
          با سلام
          البته موضوعی رو که عنوان می کنم خیلی تکراریه ، ولی خب لازم شد باز هم تکرار کنم . در برخی از سیستم ها برای جداسازی آرگومان ها ، بجای کاما ( , ) از سمی کالن ( ; ) استفاده میشه .
          یعنی فرمول فوق بصورت زیر نوشته میشه :
          کد PHP:
          =IF(COUNTIF($B$2:$B$20;A2)=0;"";COUNTIF($B$2:$B$20;A2)) 
          با سپاس از آقای
          اسماعیلی
          ɦɛʂɑɱ ɓɑɦɾɑɳɨ

          [CENTER][B][SIZE=5][COLOR=#006600][FONT=georgia][COLOR=#800000]!With [/COLOR][/FONT][/COLOR][COLOR=#006600][FONT=georgia]God [/FONT][/COLOR][COLOR=#006600][FONT=georgia][COLOR=#800000]all [/COLOR][/FONT][/COLOR][COLOR=#800000][FONT=georgia]things are [/FONT][/COLOR][COLOR=#006600][FONT=georgia]possible[/FONT][/COLOR][/SIZE][/B][B][FONT=Tahoma]
          [/FONT][/B][/CENTER]
          [CENTER][B][FONT=Tahoma] [IMG]http://forum.exceliran.com/attachment.php?attachmentid=5334&d=1419428336[/IMG]
          [/FONT][/B][SIZE=1][FONT=Tahoma][B][FONT=Tahoma]
          [/FONT][/B][/FONT][/SIZE]
          [/CENTER]

          کامنت

          • bnyamin

            • 2013/05/29
            • 111

            #6
            نوشته اصلی توسط امين اسماعيلي
            با درود خب چرا اصلا ماکرو . چرا با فرمول انجام نمیدین. بعد اینجا شما A رو داری تو b میگردی درسته و اگر بود تو سطر متناظرش 1 بنویسه. این فرمول رو بنویس تو C2 ببین حله
            کد:
            =IF(COUNTIF($B$2:$B$20,A2)=0,"",COUNTIF($B$2:$B$20,A2))
            تو فایل بالا به من چیزه دیگه ای گفتی. من داشتم Bرو تو A میگشتم
            آقای اسماعیلی امکانش هست ماکرو شوقرار بدید ؟

            کامنت

            • امين اسماعيلي
              مدير تالار ويژوال بيسيك

              • 2013/01/17
              • 1198
              • 84.00

              #7
              ماکروش که راحته راحته
              فک کنم همین count if رو تالار جدیدا دوستمون صابر یه چیزایی مطرح کردم . یه خورده تلاش کن . تا ببینم چیکاره ای
              در پناه خداوندگار ایران زمین باشید و پیروز

              کامنت

              • امين اسماعيلي
                مدير تالار ويژوال بيسيك

                • 2013/01/17
                • 1198
                • 84.00

                #8
                با درود
                کد:
                Private Sub CommandButton1_Click()
                Application.ScreenUpdating = False
                lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
                Range("C2:C" & lastrow).Value = ""
                For Each c In Sheet1.Range("A2:A" & lastrow)
                If Application.WorksheetFunction.CountIf(Range("B2:B" & lastrow), c.Value) > 0 Then
                c.Offset(0, 2).Value = "1"
                End If
                Next c
                Application.ScreenUpdating = True
                
                
                End Sub
                فقط به دلیل توضیحی که دادین وگرنه دوست اشتم خودتون بیشتر تلاش کنین
                در پناه خداوندگار ایران زمین باشید و پیروز

                کامنت

                چند لحظه..