مشکل در کار با Instr

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

    • 2015/11/24
    • 37
    • 40.00

    مشکل در کار با Instr

    سلام

    من یک کد وی.بی نوشتم که در یک سری از داده های رشته ای، به دنبال نام شهر بگرده و اسم شهر رو در یک سلول دیگه در جلوی هر رشته بنویسه. این برنامه رو با Instr نوشتم. بطور مثال:
    شرکت پرشین شیراز ---> شیراز

    مشکل مال زمانی هست که اسم یک شرکت یا شخص شامل حروفی باشه که اون حروف به تنهایی اسم یک شهر باشه. مثلاً:
    شرکت گلاره شریفی کرمانشاه ، چون کلمه "گلاره" شامل لار هست، اسم شهر لار میخوره در جلوی این لیست.

    چطوری میتونم از بروز این خطا جلوگیری کنم؟ یه جور جستجوی حساس به حروف مثل حالت Match Case در جستجوی ساده وقتی Ctrl+F رو میزنیم.
  • Amir Ghasemiyan

    • 2013/09/20
    • 4598
    • 100.00

    #2
    نوشته اصلی توسط Masih60
    سلام

    من یک کد وی.بی نوشتم که در یک سری از داده های رشته ای، به دنبال نام شهر بگرده و اسم شهر رو در یک سلول دیگه در جلوی هر رشته بنویسه. این برنامه رو با Instr نوشتم. بطور مثال:
    شرکت پرشین شیراز ---> شیراز

    مشکل مال زمانی هست که اسم یک شرکت یا شخص شامل حروفی باشه که اون حروف به تنهایی اسم یک شهر باشه. مثلاً:
    شرکت گلاره شریفی کرمانشاه ، چون کلمه "گلاره" شامل لار هست، اسم شهر لار میخوره در جلوی این لیست.

    چطوری میتونم از بروز این خطا جلوگیری کنم؟ یه جور جستجوی حساس به حروف مثل حالت Match Case در جستجوی ساده وقتی Ctrl+F رو میزنیم.
    سلام
    باید کدتون رو ببینم ولی فکر کنم اگه قبل و بعد اسم شهرهاتون فاصله بذارین مشکل حل بشه

    کامنت

    • Masih60

      • 2015/11/24
      • 37
      • 40.00

      #3
      کد PHP:

          Sub  assign
      ()

          For 
      2 To 10000

                               provience 
      ""    

                  
      checkingcell Cells(i2).Value

                              
      If InStr(1checkingcell,  "شيراز") > Or InStr(1checkingcell"آباده") > 0  Or InStr(1checkingcell"فارس") > Or InStr(1checkingcell,  "لار") > 0 Then

                      provience 
      "فارس"


                                  
      End If

                              If 
      InStr(1checkingcell,  "اروميه") > Or InStr(1checkingcell"مياندوآب")  > Or InStr(1checkingcell"بوکان") > Or InStr(1,  checkingcell"خوي") > Or InStr(1checkingcell,  "مهاباد") > 0 Then

                      provience 
      "آذربايجان  غربي"    
                              
      End If 

      کامنت

      • Masih60

        • 2015/11/24
        • 37
        • 40.00

        #4
        این بخشیش هست. بقیه اش هم به همین صورت هست. چون فارسیش به هم میریخت، اسم شهرها رو انگلیسی نوشتم.

        کد PHP:
        If InStr(1checkingcell"shiraz") > Or InStr(1checkingcell"abade") > Or InStr(1checkingcell"fars") > Or InStr(1checkingcell"lar") > 0 Then 

        کامنت

        • Amir Ghasemiyan

          • 2013/09/20
          • 4598
          • 100.00

          #5
          لطفا چک کنید ببینین این کد مشکلتون رو حل میکنه یا نه
          کد:
          If InStr(checkingcell, "shiraz") = 1 Or InStr(checkingcell, "abade") = 1 Or InStr(checkingcell, "fars") = 1 Or InStr(checkingcell, "lar") = 1 Then  provience = "Fars"

          کامنت

          • Masih60

            • 2015/11/24
            • 37
            • 40.00

            #6
            نوشته اصلی توسط Amir Ghasemiyan
            لطفا چک کنید ببینین این کد مشکلتون رو حل میکنه یا نه
            کد:
            If InStr(checkingcell, "shiraz") = 1 Or InStr(checkingcell, "abade") = 1 Or InStr(checkingcell, "fars") = 1 Or InStr(checkingcell, "lar") = 1 Then  provience = "Fars"
            از این کد نمیتونم استفاده کنم چون همونطور که گفتم داده های رشته ای که جستجو میکنم فقط اسم شهر نیست. اسم شرکت به همراه اسم شهر هست. مثلاً "شرکت پرشین شیراز". این کدی که شما دادی فقط اگر اسم شهر خالی باشه عمل میکنه.

            کامنت

            • Amir Ghasemiyan

              • 2013/09/20
              • 4598
              • 100.00

              #7
              نوشته اصلی توسط Masih60
              از این کد نمیتونم استفاده کنم چون همونطور که گفتم داده های رشته ای که جستجو میکنم فقط اسم شهر نیست. اسم شرکت به همراه اسم شهر هست. مثلاً "شرکت پرشین شیراز". این کدی که شما دادی فقط اگر اسم شهر خالی باشه عمل میکنه.
              بله حق با شماست
              خب پس همون روش اولی که گفتم تست کنید. قبل و بعد اسم شهر ها فاصله بذارین.

              کامنت

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

                • 2013/01/17
                • 1198
                • 84.00

                #8
                نمیشد یه دیتا بیس از اسم شرکتت با اسم شهرش تو یه شیت داشته باشی
                در پناه خداوندگار ایران زمین باشید و پیروز

                کامنت

                • Masih60

                  • 2015/11/24
                  • 37
                  • 40.00

                  #9
                  نوشته اصلی توسط Amir Ghasemiyan
                  بله حق با شماست
                  خب پس همون روش اولی که گفتم تست کنید. قبل و بعد اسم شهر ها فاصله بذارین.
                  اونوقت اگر اسم شهر در انتهای عبارت باشه، نشون داده نمیشه. مثلاً همون "پرشین شیراز". آخر "شیراز" که فاصله نیست. پس قاعدتاً نباید توی جواب بیاره. درست میگم؟

                  کامنت

                  • Masih60

                    • 2015/11/24
                    • 37
                    • 40.00

                    #10
                    نوشته اصلی توسط امين اسماعيلي
                    نمیشد یه دیتا بیس از اسم شرکتت با اسم شهرش تو یه شیت داشته باشی
                    اگر منظورتون اسم تمام شرکتها هست که باهاشون کار میکنم که روی کاغذ بله، امکان پذیر هست ولی منطقی نیست چون هر سری باید من مراقب باشم که شرکت های جدیدی که اضافه میشن رو به این لیست اضافه کنم.

                    کامنت

                    • iranweld

                      • 2015/03/29
                      • 3341

                      #11
                      آیا اسامی شهرها در آخر جمله های شما قرار دارد؟

                      اگر اسم شهرها در آخر باشد از کد ذیل استفاده کنید

                      کد PHP:
                      Sub test()

                      Sheet1.Cells(Sheet1.Rows.Count"A").End(xlUp).Row

                      For 1 To Z
                      0
                      For 1 To Len(Range("A" J))
                      If 
                      Mid(Range("A" J), i1) = " " Then
                      i
                      End 
                      If
                      Next
                      Range
                      ("b" J) = Right(Range("A" J), Len(Range("A" J)) - x)

                      Next

                      End Sub 
                      فایل های پیوست شده
                      Last edited by iranweld; 2016/04/12, 12:19.

                      کامنت

                      • Masih60

                        • 2015/11/24
                        • 37
                        • 40.00

                        #12
                        نوشته اصلی توسط iranweld
                        آیا اسامی شهرها در آخر جمله های شما قرار دارد؟

                        اگر اسمی شهرها در آخر باشد از کد ذیل استفاده کنید

                        کد PHP:
                        Sub test()

                        Sheet1.Cells(Sheet1.Rows.Count"A").End(xlUp).Row

                        For 1 To Z
                        0
                        For 1 To Len(Range("A" J))
                        If 
                        Mid(Range("A" J), i1) = " " Then
                        i
                        End 
                        If
                        Next
                        Range
                        ("b" J) = Right(Range("A" J), Len(Range("A" J)) - x)

                        Next

                        End Sub 
                        ممنون استاد ولی اسم شهرها الزاماً در انتهای عبارت نیست.

                        کامنت

                        • iranweld

                          • 2015/03/29
                          • 3341

                          #13
                          نمونه فایل قرار بدید بهتر میشه تصمیم گیری کرد

                          کامنت

                          • Amir Ghasemiyan

                            • 2013/09/20
                            • 4598
                            • 100.00

                            #14
                            نوشته اصلی توسط Masih60
                            اونوقت اگر اسم شهر در انتهای عبارت باشه، نشون داده نمیشه. مثلاً همون "پرشین شیراز". آخر "شیراز" که فاصله نیست. پس قاعدتاً نباید توی جواب بیاره. درست میگم؟

                            بله دوست عزیز حق با شماست
                            من بررسی کردم و یک کد براتون نوشتم. این کد رو میشه کوتاه تر هم نوشت اما یکم پیچیده میشه. بنابراین همینطوری بهتون میدم که بتونین راحت تر متوجه شید
                            کد:
                            Sub CityFinder()
                            Dim farscity(3) As Variant
                            Dim azarbayjancity(4) As Variant
                            fars = Array("shiraz", "abade", "fars", "lar")
                            azarbayjan = Array("orumie", "miandoab", "boukan", "khoy", "mahabad")
                            For i = 2 To 1000
                                provience = ""
                                With Range("B" & i)
                                    ' search for fars cities
                                    For j = LBound(fars) To UBound(fars)
                                        Set farscity(j) = .Find(fars(j), , , xlWhole)
                                        If Not farscity(j) Is Nothing Then
                                            provience = "Fars"
                                            GoTo continuefor
                                        End If
                                    Next j
                                    ' search for azarbayjan cities
                                    For j = LBound(azarbayjan) To UBound(azarbayjan)
                                        Set azarbayjancity(j) = .Find(azarbayjan(j), , , xlWhole)
                                        If Not azarbayjancity(j) Is Nothing Then
                                            provience = "Azarbayjan"
                                            GoTo continuefor
                                        End If
                                    Next j
                                End With
                            continuefor:
                            Next i
                            End Sub

                            کامنت

                            • Amir Ghasemiyan

                              • 2013/09/20
                              • 4598
                              • 100.00

                              #15
                              پستی که گذاشتم جواب شما رو نمیده متاسفانه
                              این کد رو امتحان کنید

                              کد:
                              Sub CityFinder()
                              fars = Array("shiraz", "abade", "fars", "lar")
                              azarbayjan = Array("orumie", "miandoab", "boukan", "khoy", "mahabad")
                              For i = 2 To 1000
                                  provience = ""
                                  If checkcity(fars, Range("B" & i)) Then provience = "Fars"
                              Next i
                              End Sub
                              
                              Function checkcity(cities As Variant, rng As Range) As Boolean
                              checkcity = False
                              cel = Split(rng.Value, " ")
                              For i = LBound(cel) To UBound(cel)
                                  For j = LBound(cities) To UBound(cities)
                                      If cel(i) = cities(j) Then
                                          checkcity = True
                                          Exit Function
                                      End If
                                  Next j
                              Next i
                              End Function

                              کامنت

                              چند لحظه..