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

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

    • 2014/04/15
    • 8

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

    سلام و درود
    من یک فایلی دارم که قصد دارم در ستونی از اون فقط فرمت خاصی را قبول کنه.
    قرمتش هم همان پلاک خودرو است. مثل 22 ج 555 ایران 22
    اگه به غیر از این فرمت باشه قبول نکنه.
    با فرمت سل نتونستم ردیف کنم و ئیتا ولیدشن را هم نتونستم روش اعمال کنم.
    ممنون میشم راهنمایی بفرمائید.
  • abootorab

    • 2014/10/17
    • 351

    #2
    نوشته اصلی توسط amirhacker
    سلام و درود
    من یک فایلی دارم که قصد دارم در ستونی از اون فقط فرمت خاصی را قبول کنه.
    قرمتش هم همان پلاک خودرو است. مثل 22 ج 555 ایران 22
    اگه به غیر از این فرمت باشه قبول نکنه.
    با فرمت سل نتونستم ردیف کنم و ئیتا ولیدشن را هم نتونستم روش اعمال کنم.
    ممنون میشم راهنمایی بفرمائید.
    با درود
    با فرمتی که شما میخواین (فقط پلاک خودرو) و اینکه مقادیری به غیر از این فرمت قبول نکنه بنده از روش کد نویسی برای رویداد Worksheet_Change پیشنهاد میکنم، البته شاید به روشهای دیگه هم بشه که بنده بی اطلاعم. فقط کافیه روی شیت مورد نظر راست کلیک و سپس View Code رو کلیک کنید و در پنجره vb ظاهر شده کد زیر رو کپی کنید.
    توجه داشته باشین که این کد فقط برای ستون A در نظر گرفتم که شما با یه تغییر کوچک میتونید به سلول های دیگر هم بسط دهید.
    کد PHP:
    Private Sub Worksheet_Change(ByVal Target As Range)
        
    On Error Resume Next
        
    If Target.Column <> Or Target.Value "" Then Exit Sub
        
    For 1 To Len(Target.Text)
            If 
    Mid(Target.Texti1) <> " " Then txt txt Mid(Target.Texti1)
        
    Next i
        
        t1 
    Mid(txt12)
        
    t2 Mid(txt31)
        
    t3 Mid(txt43)
        
    t4 Mid(txt75)
        
    t5 Mid(txt122)
        
    iran "199237209199228"

        
    If Val(t1) < 10 And Val(t2) > 99 Then Target.Value ""
        
    If Val(t2) > 0 Then Target.Value ""
        
    If Val(t3) < 100 And Val(t2) > 999 Then Target.Value ""
        
    For 1 To 5
            
    If Asc(Mid(t4j1)) <> Val(Mid(iran, (1) * 13)) Then Target.Value ""
        
    Next j
        
    If Val(t5) < 10 And Val(t2) > 99 Then Target.Value ""
        
    If Target.Value "" Then Target.Select
    End Sub 
    Last edited by abootorab; 2015/02/19, 20:38.

    کامنت

    • amirhacker

      • 2014/04/15
      • 8

      #3
      نوشته اصلی توسط abootorab
      با درود
      با فرمتی که شما میخواین (فقط پلاک خودرو) و اینکه مقادیری به غیر از این فرمت قبول نکنه بنده از روش کد نویسی برای رویداد Worksheet_Change پیشنهاد میکنم، البته شاید به روشهای دیگه هم بشه که بنده بی اطلاعم. فقط کافیه روی شیت مورد نظر راست کلیک و سپس View Code رو کلیک کنید و در پنجره vb ظاهر شده کد زیر رو کپی کنید.
      توجه داشته باشین که این کد فقط برای ستون A در نظر گرفتم که شما با یه تغییر کوچک میتونید به سلول های دیگر هم بسط دهید.
      کد PHP:
      Private Sub Worksheet_Change(ByVal Target As Range)
          
      On Error Resume Next
          
      If Target.Column <> Or Target.Value "" Then Exit Sub
          
      For 1 To Len(Target.Text)
              If 
      Mid(Target.Texti1) <> " " Then txt txt Mid(Target.Texti1)
          
      Next i
          
          t1 
      Mid(txt12)
          
      t2 Mid(txt31)
          
      t3 Mid(txt43)
          
      t4 Mid(txt75)
          
      t5 Mid(txt122)
          
      iran "199237209199228"

          
      If Val(t1) < 10 And Val(t2) > 99 Then Target.Value ""
          
      If Val(t2) > 0 Then Target.Value ""
          
      If Val(t3) < 100 And Val(t2) > 999 Then Target.Value ""
          
      For 1 To 5
              
      If Asc(Mid(t4j1)) <> Val(Mid(iran, (1) * 13)) Then Target.Value ""
          
      Next j
          
      If Val(t5) < 10 And Val(t2) > 99 Then Target.Value ""
          
      If Target.Value "" Then Target.Select
      End Sub 
      سلام و درود بر حضرتعالی و تشکر از زحمات شما
      عرضم به حضورتون کد بالا تا رسیدن به ایران مشکلی نداره اما تایپ کردن ایران همانا و قبول کردن متن همانا.
      If Len(txt) <> 14 Then Exit Sub میخام یه همچین کدی برای کنترل طول رشته و نفع نقص مورد اشاره به کد بالا اضافه نمایید.
      ممنون

      کامنت

      • abootorab

        • 2014/10/17
        • 351

        #4
        نوشته اصلی توسط amirhacker
        سلام و درود بر حضرتعالی و تشکر از زحمات شما
        عرضم به حضورتون کد بالا تا رسیدن به ایران مشکلی نداره اما تایپ کردن ایران همانا و قبول کردن متن همانا.
        If Len(txt) <> 14 Then Exit Sub میخام یه همچین کدی برای کنترل طول رشته و نفع نقص مورد اشاره به کد بالا اضافه نمایید.
        ممنون
        درود مجدد
        ضمن تشکر از دقت شما دوست عزیز
        کد اصلاحی خدمت شما:
        کد PHP:
        Private Sub Worksheet_Change(ByVal Target As Range)
            
        On Error Resume Next
            
        If Target.Column <> Or Target.Value "" Then Exit Sub
            
        For 1 To Len(Target.Text)
                If 
        Mid(Target.Texti1) <> " " Then txt txt Mid(Target.Texti1)
            
        Next i
            
        If Len(txt) > 13 Then
                Target
        .Value ""
                
        Exit Sub
            End 
        If
            
            
        t1 Mid(txt12)
            
        t2 Mid(txt31)
            
        t3 Mid(txt43)
            
        t4 Mid(txt75)
            
        t5 Mid(txt122)
            
        iran "199237209199228"
            
            
        If Val(t1) < 10 And Val(t2) > 99 Then Target.Value ""
            
        If Val(t2) > 0 Then Target.Value ""
            
        If Val(t3) < 100 And Val(t2) > 999 Then Target.Value ""
            
        For 1 To 5
                
        If Asc(Mid(t4j1)) <> Val(Mid(iran, (1) * 13)) Then Target.Value ""
            
        Next j
            
        If Val(t5) < 10 And Val(t2) > 99 Then Target.Value ""
            
        If Target.Value "" Then Target.Select
        End Sub 
        Last edited by abootorab; 2015/02/20, 01:37.

        کامنت

        • amirhacker

          • 2014/04/15
          • 8

          #5
          سلام و درود
          بسیار عالی و ممنون از حضرتعالی
          دو سه تا راهنمایی کوچولوی دیگه
          میخواهم با conditionl formatting بگم اگه حرف ع یا ت رنگ سل زرد بشه اگه الف قرمز و در غیراینصورت سفید
          این کد رو میزنم mid($A$1,4,1)=ع اما جواب نمیده میشه راهنمایی بفرمائید.

          کامنت

          • حسام بحرانی

            • 2013/09/29
            • 2065
            • 72.00

            #6
            نوشته اصلی توسط amirhacker
            سلام و درود
            بسیار عالی و ممنون از حضرتعالی
            دو سه تا راهنمایی کوچولوی دیگه
            میخواهم با conditionl formatting بگم اگه حرف ع یا ت رنگ سل زرد بشه اگه الف قرمز و در غیراینصورت سفید
            این کد رو میزنم mid($A$1,4,1)=ع اما جواب نمیده میشه راهنمایی بفرمائید.
            سلام،
            برای ستون مورد نظر 2 فرمت سل تعریف کنید؛
            برای رنگ زرد سلول که دارای دوشرط است از فرمول زیر در
            conditionl formatting استفاده کنید:
            کد PHP:
            =IF(OR(MID(A1;4;1)="ع";MID(A1;4;1)="ت");1;0
            و برای رنگ قرمز که تنها یک شرط دارد از فرمت زیر استفاده نمایید:
            کد PHP:
            =IF(MID(A1;4;1)="ا";1;0
            بدیهی است در غیر اینصورت تغییری ایجاد نخواهد شد.
            دقت کنید که فرمول های بالا را کپی پیست کنید.
            موفق باشید.
            [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]

            کامنت

            • abootorab

              • 2014/10/17
              • 351

              #7
              نوشته اصلی توسط amirhacker
              سلام و درود
              بسیار عالی و ممنون از حضرتعالی
              دو سه تا راهنمایی کوچولوی دیگه
              میخواهم با conditionl formatting بگم اگه حرف ع یا ت رنگ سل زرد بشه اگه الف قرمز و در غیراینصورت سفید
              این کد رو میزنم mid($A$1,4,1)=ع اما جواب نمیده میشه راهنمایی بفرمائید.
              با درود و ضمن تشکر و کسب اجازه از جناب حسام عزیز
              کد قبل رو اصلاح کردم و علاوه بر افزودن رنگ سلول ها، در مورد حرف "الف" کد قبل درست عمل نمیکرد که این نیز اصلاح شد.
              کد PHP:
              Private Sub Worksheet_Change(ByVal Target As Range)
                  
              On Error Resume Next
                  
              If Target.Column <> Or Target.Value "" Then 
                      Target
              .Interior.Pattern xlNone
                      
              Exit Sub
                  End 
              If
                  For 
              1 To Len(Target.Text)
                      If 
              Mid(Target.Texti1) <> " " Then txt txt Mid(Target.Texti1)
                  
              Next i
                  
                  
              If Mid(txt33) = "الف" Then
                      
              If Len(txt) > 15 Then
                          Target
              .Value ""
                          
              Exit Sub
                      End 
              If
                      
              t1 Mid(txt12)
                      
              t2 Mid(txt33)
                      
              t3 Mid(txt63)
                      
              t4 Mid(txt95)
                      
              t5 Mid(txt142)
                  ElseIf 
              Mid(txt31) <> "ا" Then
                      
              If Len(txt) > 13 Then
                          Target
              .Value ""
                          
              Exit Sub
                      End 
              If
                      
              t1 Mid(txt12)
                      
              t2 Mid(txt31)
                      
              t3 Mid(txt43)
                      
              t4 Mid(txt75)
                      
              t5 Mid(txt122)
                  
              End If
                  
                  If 
              Val(t1) < 10 And Val(t2) > 99 Then Target.Value ""
                  
              If Val(t2) > 0 Then Target.Value ""
                  
              If Val(t3) < 100 And Val(t2) > 999 Then Target.Value ""
                  
              iran "199237209199228"
                  
              For 1 To 5
                      
              If Asc(Mid(t4j1)) <> Val(Mid(iran, (1) * 13)) Then Target.Value ""
                  
              Next j
                  
              If Val(t5) < 10 And Val(t2) > 99 Then Target.Value ""
                  
                  
              If Target.Value "" Then Target.Select
                  
              If t2 "ع" Or t2 "ت" Then
                      Target
              .Interior.Pattern xlSolid
                      Target
              .Interior.Color 65535
                  
              ElseIf t2 "الف" Then
                      Target
              .Interior.Pattern xlSolid
                      Target
              .Interior.Color 255
                  
              Else
                      
              Target.Interior.Pattern xlNone
                  End 
              If
              End Sub 
              Last edited by abootorab; 2015/02/20, 15:27.

              کامنت

              • amirhacker

                • 2014/04/15
                • 8

                #8
                نوشته اصلی توسط abootorab
                با درود و ضمن تشکر و کسب اجازه از جناب حسام عزیز
                کد قبل رو اصلاح کردم و علاوه بر افزودن رنگ سلول ها، در مورد حرف "الف" کد قبل درست عمل نمیکرد که این نیز اصلاح شد.
                به عنوان آخرین درخواست در این موضوع. در حال حاضر حروفغیر فارسی را هم قبول می کنه. میخواهم یه فیلتر هم برای این موضوع بگذارم.
                به نظرتون این مناسبه
                کد PHP:
                If Val(t2) < 199 or Val(t2) > 229 Then Target.Value "" 
                اما حرف ی را شامل نمیشه

                کامنت

                • abootorab

                  • 2014/10/17
                  • 351

                  #9
                  نوشته اصلی توسط amirhacker
                  به عنوان آخرین درخواست در این موضوع. در حال حاضر حروفغیر فارسی را هم قبول می کنه. میخواهم یه فیلتر هم برای این موضوع بگذارم.
                  به نظرتون این مناسبه
                  کد PHP:
                  If Val(t2) < 199 or Val(t2) > 229 Then Target.Value "" 
                  اما حرف ی را شامل نمیشه
                  درود مجدد
                  تغییرات مربوط به عدم قبول حروف غیر فارسی و همچنین علائم اعمال شد.
                  خدمت شما:
                  کد PHP:
                  Private Sub Worksheet_Change(ByVal Target As Range)
                      
                  On Error Resume Next
                      
                  If Target.Column <> Or Target.Value "" Then
                          Target
                  .Interior.Pattern xlNone
                          
                  Exit Sub
                      End 
                  If
                      For 
                  1 To Len(Target.Text)
                          If 
                  Mid(Target.Texti1) <> " " Then txt txt Mid(Target.Texti1)
                      
                  Next i
                      
                      
                  For 1 To Len(txt)
                          
                  chk True
                          h 
                  Mid(txti1)
                          If 
                  Asc(h) < 48 Then chk False
                          
                  If Asc(h) > 57 And Asc(h) < 129 Then chk False
                          
                  If Asc(h) > 129 And Asc(h) < 141 Then chk False
                          
                  If Asc(h) > 144 And Asc(h) < 152 Then chk False
                          
                  If Asc(h) > 152 And Asc(h) < 170 Then chk False
                          
                  If Asc(h) > 170 And Asc(h) < 192 Then chk False
                          
                  If Asc(h) = 143 Or Asc(h) = 215 Or Asc(h) = 220 Or Asc(h) = 224 Or Asc(h) = 226 Then chk False
                          
                  If Asc(h) > 230 And Asc(h) < 236 Then chk False
                          
                  If Asc(h) > 237 Then chk False
                          
                  If chk False Then
                              Target
                  .Value ""
                              
                  Target.Interior.Pattern xlNone
                              
                  Exit Sub
                          End 
                  If
                      
                  Next i
                      
                      
                  If Mid(txt33) = "الف" Then
                          
                  If Len(txt) > 15 Then
                              Target
                  .Value ""
                              
                  Exit Sub
                          End 
                  If
                          
                  t1 Mid(txt12)
                          
                  t2 Mid(txt33)
                          
                  t3 Mid(txt63)
                          
                  t4 Mid(txt95)
                          
                  t5 Mid(txt142)
                      ElseIf 
                  Mid(txt31) <> "ا" Then
                          
                  If Len(txt) > 13 Then
                              Target
                  .Value ""
                              
                  Exit Sub
                          End 
                  If
                          
                  t1 Mid(txt12)
                          
                  t2 Mid(txt31)
                          
                  t3 Mid(txt43)
                          
                  t4 Mid(txt75)
                          
                  t5 Mid(txt122)
                      
                  End If
                      
                      If 
                  Val(t1) < 10 And Val(t2) > 99 Then Target.Value ""
                      
                  If Val(t2) > 0 Then Target.Value ""
                      
                  If Val(t3) < 100 And Val(t2) > 999 Then Target.Value ""
                      
                  iran "199237209199228"
                      
                  For 1 To 5
                          
                  If Asc(Mid(t4j1)) <> Val(Mid(iran, (1) * 13)) Then Target.Value ""
                      
                  Next j
                      
                  If Val(t5) < 10 And Val(t2) > 99 Then Target.Value ""
                      
                      
                  If Target.Value "" Then Target.Select
                      
                  If t2 "ع" Or t2 "ت" Then
                          Target
                  .Interior.Pattern xlSolid
                          Target
                  .Interior.Color 65535
                      
                  ElseIf t2 "الف" Then
                          Target
                  .Interior.Pattern xlSolid
                          Target
                  .Interior.Color 255
                      
                  Else
                          
                  Target.Interior.Pattern xlNone
                      End 
                  If
                  End Sub 

                  کامنت

                  • amirhacker

                    • 2014/04/15
                    • 8

                    #10
                    سلام و درود از زحمات بی منت حضرتعالی.
                    اگه ممکنه یه مقدار ابهامات بنده را برطرف نمایید.
                    من از این تکه کد If Val(t1) < 10 And Val(t2) > 99 Then Target.Value = ""
                    فهمیدم که اگه دوعددی که برای حروف اوله کمتر وارد بشه قبول نمی کنه و همچنین برای حرف اگه بیشتر از یک حرف باشه اینگونه عمل میکنه.
                    فقط مشکلم اینه که مبنا و اصول این 10(برای اعداد) و 99 (برای حروف) را درک نمی کنم.
                    چرا در دو خط پایینتر t2>999 در نظر گرفته شده منظور اگر بیشتر از سه حرف باشد است اما سوال چرا تو دو خط بالاتر این را در نظر نگرفته

                    کامنت

                    • abootorab

                      • 2014/10/17
                      • 351

                      #11
                      نوشته اصلی توسط amirhacker
                      سلام و درود از زحمات بی منت حضرتعالی.
                      اگه ممکنه یه مقدار ابهامات بنده را برطرف نمایید.
                      من از این تکه کد If Val(t1) < 10 And Val(t2) > 99 Then Target.Value = ""
                      فهمیدم که اگه دوعددی که برای حروف اوله کمتر وارد بشه قبول نمی کنه و همچنین برای حرف اگه بیشتر از یک حرف باشه اینگونه عمل میکنه.
                      فقط مشکلم اینه که مبنا و اصول این 10(برای اعداد) و 99 (برای حروف) را درک نمی کنم.
                      چرا در دو خط پایینتر t2>999 در نظر گرفته شده منظور اگر بیشتر از سه حرف باشد است اما سوال چرا تو دو خط بالاتر این را در نظر نگرفته
                      با درود
                      دوست عزیز نمیدونم شما با vb آشنایی دارید یه نه ولی یه توضیح مختصر در مورد سوالتون میدم، امیدوارم ابهامتون برطرف بشه.
                      کلا شماره پلاک خودرو از 5 قسمت تشکیل میشه، به عنوان مثال "22 ایران 336 ج 63"، کد فوق میاد ابتدا فواصل خالی متن تایپ شده رو از بین میبره و یک رشته 13 کاراکتری (اگر به جای تک حرف "ج" حرف "الف" باشد رشته 15 کاراکتری) به ما میدهد و سپس 5 قسمت تشکیل دهنده شماره پلاک رو به تفکیک در متغیرهای t1 الی t5 قرار میدهد. (یادمان باشد تمام این 5 قسمت از نوع رشته در tها ذخیره میشوند). حال شزط ها را اجرا میکنیم متغیر اول "63"=t1 رو با تابع Val به عدد تبدیل میکنیم و شرط دو رقمی بودن آن را بررسی میکنیم، متغیر دوم "ج"=t2 نیز با Val به عدد تبدیل میکنیم ولی حروف وقتی به عدد تبدیل میکنیم حاصل آن صفر میشود و این شرط برای t2 بررسی میکنیم، متغیر سوم یعنی "336"=t3 نیز مانند متغیر اول عمل کردم ولی با این تفاوت که چون این عدد باید سه رقمی باشد آن را در محدوده 100 تا 999 کنترل میکنیم، متغیر چهارم که کلمه "ایران"=t4 است نیز بصورت تک تک حروفی بررسی میشه که صحیح باشد (علت کنترل تک به تک حروف مشکلی است که اکسل در عدم تطابق بعضی از حروف فارسی است) و در نهایت متغیر پنجم یعنی "22"=t5 می باشد که دقیقا مانند متغیر اول شرط را برای آن بررسی میکنیم.
                      توضیح: تابع Val جهت تبدیل یک رشته عددی به یک عدد واقعی به کار میرود که اگر به جای رشته عددی رشته حروفی درون تابع قرار دهیم حاصل تابع عدد صفر میشود.

                      امیدوارم مفهوم رو خوب رسونده باشم.

                      کامنت

                      • amirhacker

                        • 2014/04/15
                        • 8

                        #12
                        تقدیر و تشکر از حضرتعالی بابت اطلاعات مفید و همچنین دقت و حوصله در پاسخگویی به سوالات.
                        انشاا... موفق و پاینده باشید

                        کامنت

                        • حسام بحرانی

                          • 2013/09/29
                          • 2065
                          • 72.00

                          #13
                          سلام،
                          دوست عزیز، در صورتی که پاسخ سؤال خودتون رو دریافت کردید، موضوع را حل شده کنید.
                          موفق باشید.
                          [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]

                          کامنت

                          چند لحظه..