اجرای حلقه بر مبنای آخرین سطر

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

    • 2014/03/17
    • 62

    اجرای حلقه بر مبنای آخرین سطر

    سلام
    مثلا حلقه از سطر 1 تا سطر 10 اجرا میشه .
    حالا میخوام اگه سطری به سطرامون اضافه یا کم شد ، تعداد اجرای حلقه هم به تعداد سطرامون ( سطر دارای مقدار )افزایش یا کاهش پیدا کنه.
    با تشکر
  • Ali Parsaei
    مدير تالارتوابع اکسل

    • 2013/11/18
    • 1522
    • 71.67

    #2
    سلام،
    خوب بايد مثلا" محدوده را خيلي بزرگتر بگيريد و بگوييد در محدوده فلان به ازاي هر سلولي که بزرگتر از صفر بود ......
    [SIGPIC][/SIGPIC]

    کامنت

    • mch2v

      • 2014/03/17
      • 62

      #3
      ببخشید میشه کدش رو بنویسید

      کامنت

      • Ali Parsaei
        مدير تالارتوابع اکسل

        • 2013/11/18
        • 1522
        • 71.67

        #4
        بله، فرضا" يک چيزي مثل اين:
        کد PHP:
        Dim C As Range
        For Each C In Range("A1:A100")
        If 
        <> "" Then
        C
        .Offset(01).Value "عمليات روي اين سطر هم اجرا مي شود"
        End If
        Next 
        [SIGPIC][/SIGPIC]

        کامنت

        • mch2v

          • 2014/03/17
          • 62

          #5
          خوب ببینید مثلا اگر محدوده صد هزارتا باشه دستگاه هنگ میکنه(مثلا) ، و من نمیخوام توی این محدوده حلقه اجرا بشه بلکه میخوام محدوده تا آخرین سطری که مقدار داره تنظیم بشه.
          یعنی اینکه range متغیر باشه.

          کامنت

          • Ali Parsaei
            مدير تالارتوابع اکسل

            • 2013/11/18
            • 1522
            • 71.67

            #6
            چيزي که به فکرم مي رسد اين است که اگر بين داده هايتان خانه خالي نباشد مي توانيد از يک همچين کدي استفاده کنيد، ببينيد به درد مي خورد؟
            البته شايد دوستان ديگر راه حل هاي بهتري داشته باشند، اين هم کد:

            کد PHP:
            Dim C As Range
            Range
            ("A1").Select
            For Each C In Range("A1"Selection.End(xlDown))
            C.Offset(01).Value "OK"
            Next 
            [SIGPIC][/SIGPIC]

            کامنت

            • misammisam
              مدير تالار حسابداری و اکسل

              • 2014/04/04
              • 892
              • 64.00

              #7
              با اجازه آقای پارسا
              ببینید اینطوری بدردتون میخوره ، خونه خالی هم بینشون باشه مشکلی نیست
              کد PHP:
              Private Sub CommandButton1_Click()
              endrow Sheet1.Range("A:A").Cells.Find("*"SearchOrder:=xlByRowsSearchDirection:=xlPrevious).Row
              Dim C 
              As Range
              For Each C In Range("A1:A" endrow)
              If 
              <> "" Then
              C
              .Offset(01).Value "-------"
              End If
              Next
              End Sub 
              [CENTER][SIGPIC][/SIGPIC]
              [/CENTER]
              [CENTER][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][INDENT]
              [CENTER][SIZE=3][URL="https://affstat.adro.co/click/adf04053-f8a6-439a-9ac4-e6a7e6f4b455"][B]اينجا كليك نكنيا ![/B][/URL][/SIZE]
              [/CENTER]
              [/INDENT]

              [/FONT][/FONT][/FONT][/FONT][/FONT]
              [/CENTER]

              کامنت

              • mch2v

                • 2014/03/17
                • 62

                #8
                آقای misammisam عالی بود ممنون ، فقط میشه خط اول کد رو توضیح بدید ، میخوام بدونم دقیقا چه کار میکنه

                کامنت

                • misammisam
                  مدير تالار حسابداری و اکسل

                  • 2014/04/04
                  • 892
                  • 64.00

                  #9
                  خواهش میکنم ، وظیفه بود .
                  این کد آخرین سطر غیر خالی در محدوده مورد نظر شما که اینجا a:a هست رو پیدا میکنه .
                  [CENTER][SIGPIC][/SIGPIC]
                  [/CENTER]
                  [CENTER][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][FONT=Tahoma][INDENT]
                  [CENTER][SIZE=3][URL="https://affstat.adro.co/click/adf04053-f8a6-439a-9ac4-e6a7e6f4b455"][B]اينجا كليك نكنيا ![/B][/URL][/SIZE]
                  [/CENTER]
                  [/INDENT]

                  [/FONT][/FONT][/FONT][/FONT][/FONT]
                  [/CENTER]

                  کامنت

                  • mch2v

                    • 2014/03/17
                    • 62

                    #10
                    ببخشید منظورم چگونگی عملکردش بود
                    آخه اون چیزایی که نوشتید من نمیدونم چه کار میکنه که اگه خواستم تغییرشون بدم
                    ممنون از لطفتون

                    کامنت

                    • Alireza
                      مدير تالار تنظيمات اكسل

                      • 2011/03/01
                      • 648
                      • 80.00

                      #11
                      نوشته اصلی توسط mch2v
                      ببخشید منظورم چگونگی عملکردش بود
                      آخه اون چیزایی که نوشتید من نمیدونم چه کار میکنه که اگه خواستم تغییرشون بدم
                      ممنون از لطفتون
                      سلام
                      دوست عزیز از این ماکرو استفاده های زیادی میشه کرد فقط کافیه if رو تغییر بدید یعنی نوع شرطی که لازم دارید در فایل استفاده کنید و بعد دستوری که در صورت برقراری شرط لازم دارید رو به ماکرو بدید .

                      Sent from my LG-D686 using Tapatalk
                      [CENTER][COLOR=#ffd700]​[/COLOR]تنها راهي که به شکست مي انجامد، تلاش نکردن است
                      [IMG]http://www.graphics18.com/wp-content/uploads/2010/12/yellow-flower23.gif[/IMG]
                      [/CENTER]

                      کامنت

                      • Ali Parsaei
                        مدير تالارتوابع اکسل

                        • 2013/11/18
                        • 1522
                        • 71.67

                        #12
                        نوشته اصلی توسط mch2v
                        آقای misammisam عالی بود ممنون ، فقط میشه خط اول کد رو توضیح بدید ، میخوام بدونم دقیقا چه کار میکنه
                        با اجازه آقا ميثم عزيز،
                        و اما در مورد خط اول کد يعني:

                        endrow = Sheet1.Range("A:A").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

                        در اصل ENDROW يک متغيير است، ما خودمان نامش را گذاشته ايم ENDROW
                        بعد مقدار اين متغيير را برابر شماره يکي از سطرهاي ستون A قرار داده ايم،
                        اما کدام سطر؟
                        آخرين سطر غير خالي در ستون A
                        آن را چگونه به دست مي آوريم؟ توسط فرمولي که بعد از عبارت مساوي نوشته ايم
                        تفسير آن اينگونه است:
                        در اولين شيت در فايل اکسل ما در ستون A در بين مقادير سل ها پيدا کن.....
                        اما چي را پيداکند؟
                        ستاره (*) را بايد پيدا کند.
                        اما ستاره به معناي: هر چي! هست
                        بنابر اين سلولي که توش چيزي نوشته شده باشد را بايد پيدا کند (حالا هرچي نوشته شده باشد فرق نمي کند!، بنابراين سلول غير خالي را بايد پيدا کند)
                        حال اين جستجو جهت يافتن سل غير خالي را چگونه بايد انجام دهد؟
                        اينجا در تابع FIND گزينه هايي وجود دارد که به فراخور حال مي توانيد از آنها استفاده کنيد و شرح آنها را در اين
                        لينک مي توانيد ببينيد.
                        مثلا" دستور SearchOrder:=xlByRows بدين معني است که جستجو را سطر به سطر انجام بده که البته اينجا چون ما يک ستون بيشتر نداريم اين دستور موضوعيت پيدا نمي کند و مي توان آن را از کد مورد نظر حذف کرد، دستور بعدي يعني SEARCHDIRECTION در اصل راستاي جستجو را تعريف مي کند و XLPREVIOUS بدين معني است که راستاي جستجو را از آخر ستون آغاز کن،
                        و دست آخر عبارت ROW هم بدين معني است که وقتي سل مربوطه را يافتي شماره رديفش را برگردان
                        در نتيجه طي اين خط کد شماره رديف آخرين سل غير خالي ستون A به دست آمده و در متغيير تعريف شده ما به نام ENDROW ذخيره مي گردد
                        همانطور که مشاهده مي کنيد متغيير ياد شده در سطرهاي بعدي مورد استفاده قرار گرفته است.
                        [SIGPIC][/SIGPIC]

                        کامنت

                        چند لحظه..