شناسایی آخرین ردیف اطلاعات

Collapse
X
 
  • زمان
  • نمایش
Clear All
new posts
  • amator

    • 2010/03/24
    • 113

    شناسایی آخرین ردیف اطلاعات

    سلام
    یک سوال دارم
    جداولی داریم که مثلا در شیت1 قرار دارند و در شیت 2 یک فرم طراحی کرده ایم که کاربر ما اطلاعات خواسته شده را بدون اشتباه(توسط محدودیت هایی که ایجاد کرده ایم) وارد نماید. و یک کلید ذخیره قرار داده ایم که با زدن آن یک ماکرو فعال شده و این سطر اطلاعات را کات کرده و میبرد در شیت 1 ذخیره میکند. حال سوال اینجاست که این ماکرو را چگونه باید تعریف کرد که این اطلاعات را ببرد و در آخرین ردیف قرار دهد؟
    متشکرم
  • Almasi

    • 2010/07/19
    • 15

    #2
    RE: شناسایی آخرین ردیف اطلاعات

    با سلام
    شما می تونید با دستور زیر به یک سطر پائین تر از آخرین رکورد درج شدخ رفته و نهایتاً اطلاعات را پیست نمائید .
    ([Range("h4:h65000").End(xlDown).Offset([1], [0
    هنوز پنجره اي هست براي آنچه نديده ام

    کامنت

    • shamsololama

      • 2010/02/15
      • 940

      #3
      RE: شناسایی آخرین ردیف اطلاعات

      با درود فراوان
      با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

      روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

      Sub Macro3()
      For Each c In Sheet1.Range("a1:a60000")
      If c = Empty Then
      For i = 0 To 10
      c.Offset(0, i) = Selection.Offset(0, i)
      Next i
      Exit Sub

      در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

      و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
      در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آخرین سطر مطالب را می نویسد
      ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

      توجه:
      اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آخرین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
      اگر در توضیح و یا کد مشکلی بود درخدمتم
      ---------------------------------------------------------------------------------------------------
      بمانیم تا کاری کنیم ،نه کاری کنیم تا بمانیم (دکتر شریعتی)
      shamsololama@yahoo.com
      09177733411

      کامنت

      • m_d6712

        • 2010/05/22
        • 174

        #4
        RE: شناسایی آخرین ردیف اطلاعات

        نوشته اصلی توسط shamsololama
        با درود فراوان
        با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

        روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

        Sub Macro3()
        For Each c In Sheet1.Range("a1:a60000")
        If c = Empty Then
        For i = 0 To 10
        c.Offset(0, i) = Selection.Offset(0, i)
        Next i
        Exit Sub

        در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

        و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
        در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آخرین سطر مطالب را می نویسد
        ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

        توجه:
        اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آخرین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
        اگر در توضیح و یا کد مشکلی بود درخدمتم
        با تشکر از دوست عزیز!
        این روش خوبی است! اما در تعداد سطر بالا مشکل ایجاد خواهد کرد. به نظر من اگر آخرین فیلد رو در متغیری مخفی یا سلولی مخفی نگه داری کنیم راحت تر می باشد و Cpu نیز کمتر اشغال می شود. شما تصور کنید که 10000 رکورد دارین! در این شرایط با ازای هر سطر که اضافه بشه 10000 بار تست خالی بودن فیلد می کنیم! اما اگر آخرین شماره آخرین سطر را ذخیره کنیم این مشکل بوجود نمی آید.
        -------
        http://md6712.com
        جامعه ایده پردازان: http://idekadeh.com

        کامنت

        • mrexcel

          • 2010/02/03
          • 435

          #5
          RE: شناسایی آخرین ردیف اطلاعات

          يك راهي هست كه من براي رفتن به آخرين رديف هميشه از ان استفاده ميكنم ان اين هست
          range(a1).end(xldown().offset(1,0).select
          البته ان قسمتي كه بايد اطلاعات كپي بشه و به صفحه ديگر برود نيز بايد اضافه بشه
          زنگ تفريح دنيا هميشگي نيست ، ساعت بعد حساب داريم

          کامنت

          • 4017

            • 2010/10/03
            • 114

            #6
            RE: شناسایی آخرین ردیف اطلاعات

            نوشته اصلی توسط shamsololama
            با درود فراوان
            با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

            روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

            Sub Macro3()
            For Each c In Sheet1.Range("a1:a60000")
            If c = Empty Then
            For i = 0 To 10
            c.Offset(0, i) = Selection.Offset(0, i)
            Next i
            Exit Sub

            در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

            و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
            در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آ---ین سطر مطالب را می نویسد
            ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

            توجه:
            اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آ---ین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
            اگر در توضیح و یا کد مشکلی بود درخدمتم
            سلام
            من اين كد رو عينا وارد كردم اما انجام نميشه
            ارور for without next ميده
            ميشه راهنمايي كنيد؟
            اگر تنهاترين تنهايان شوم بازهم خدا هست،
            او جانشين تمام نداشته هاي من است...!

            کامنت

            • shamsololama

              • 2010/02/15
              • 940

              #7
              RE: شناسایی آخرین ردیف اطلاعات

              نوشته اصلی توسط 4017
              نوشته اصلی توسط shamsololama
              با درود فراوان
              با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

              روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

              Sub Macro3()
              For Each c In Sheet1.Range("a1:a60000")
              If c = Empty Then
              For i = 0 To 10
              c.Offset(0, i) = Selection.Offset(0, i)
              Next i
              Exit Sub

              در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

              و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
              در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آ---ین سطر مطالب را می نویسد
              ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

              توجه:
              اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آ---ین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
              اگر در توضیح و یا کد مشکلی بود درخدمتم
              سلام
              من اين كد رو عينا وارد كردم اما انجام نميشه
              ارور for without next ميده
              ميشه راهنمايي كنيد؟
              با دورد فراوان
              اگر کد را دقیقا همون چیزی که نوشته را در اکسل کپی کرده باشی اجرا نخواهد شد
              چون Next برای حلقه C و End if از قلم افتاده که اگر آن را بنویسید ماکر اجرا خواهد شد .
              بهتر است که متغییر ها نیز تعریف کنیم چون اگر در بالا صفحه Option Explicit نوشته شده باشد تعریف متغییر ها اجباری خواهد بود وگرنه ارور می گیرد
              کد به این صورت
              Sub Macro3()
              Dim c
              Dim i
              For Each c In Sheet1.Range("a1:a60000")
              If c = Empty Then
              For i = 0 To 10
              c.Offset(0, i) = Selection.Offset(0, i)
              Next i
              Exit Sub
              End If
              Next
              End Sub
              ---------------------------------------------------------------------------------------------------
              بمانیم تا کاری کنیم ،نه کاری کنیم تا بمانیم (دکتر شریعتی)
              shamsololama@yahoo.com
              09177733411

              کامنت

              • 4017

                • 2010/10/03
                • 114

                #8
                RE: شناسایی آ---ین ردیف اطلاعات

                با سلام و تشكر فراوان از استاد
                فقط يه سوال
                دستور c.Offset(0, i باعث چه كاري ميشه؟ c اول چه كاريو انجام ميده؟
                اگر تنهاترين تنهايان شوم بازهم خدا هست،
                او جانشين تمام نداشته هاي من است...!

                کامنت

                • shamsololama

                  • 2010/02/15
                  • 940

                  #9
                  RE: شناسایی آ---ین ردیف اطلاعات

                  نوشته اصلی توسط 4017
                  با سلام و تشكر فراوان از استاد
                  فقط يه سوال
                  دستور c.Offset(0, i باعث چه كاري ميشه؟ c اول چه كاريو انجام ميده؟
                  با درود فراوان
                  c متغییری است که انتخاب کرده ایم و می توان هر چیز دیگری که برای وی بی مفهوم خاصی نداشته باشد تعریف کرد مثلا می توان بجای c شما b یا T ... استفاده کنید
                  که در این کد
                  For each c in sheet1.range("A1:A1000")
                  c متغییری است که سل های A1 تا A1000 در آن قرار می گیرد
                  c.offset(0,1)
                  c هرکدام از سل ها که باشد 0یعنی سطر برابر بر همان سل و 1 یعنی یک ستون جلوتر در واقع با offset سلی دیگر را نسبت به مکان C به ما میدهد
                  ---------------------------------------------------------------------------------------------------
                  بمانیم تا کاری کنیم ،نه کاری کنیم تا بمانیم (دکتر شریعتی)
                  shamsololama@yahoo.com
                  09177733411

                  کامنت

                  • 4017

                    • 2010/10/03
                    • 114

                    #10
                    RE: شناسایی آ---ین ردیف اطلاعات

                    با سلام و تشكر فراوان از استاد محترم
                    اگر تنهاترين تنهايان شوم بازهم خدا هست،
                    او جانشين تمام نداشته هاي من است...!

                    کامنت

                    • ~M*E*H*D*I~

                      • 2011/10/19
                      • 4374

                      #11
                      RE: شناسایی آ---ین ردیف اطلاعات

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

                      Sub FindLastCell()
                      Dim lRow As Long, lCol As Integer, mrow As Long, mCol As Integer, i As Integer
                      lCol = ActiveSheet.UsedRange.Columns.Count
                      mrow = 0
                      For i = 1 To lCol
                      lRow = Range(Cells(Rows.Count, i), Cells(Rows.Count, i)).End(xlUp).Row

                      If lRow > mrow Then
                      mrow = lRow
                      mCol = i
                      Else
                      End If
                      Next i

                      lastrow = mrow

                      End Sub

                      sigpic

                      کامنت

                      • Javid Mokhtari
                        مدير تالار ويژوال بيسيك

                        • 2012/01/16
                        • 1213

                        #12
                        RE: شناسایی آخرین ردیف اطلاعات

                        با سلام.
                        حالا که دوستان روش های مختلفی رو گذاشتن،من هم یه روش از طریق رشته ها رو به اشتراک میگذارم.شاید یکم پیچیده بیاد اما هدفم ارائه یک روش دیگه هستش(البته یه ایراد هم داره).
                        LastRow&Column
                        دوره های آموزش رایگان اکسل از صفر تا پیشرفته بصورت تصویری
                        بیش از 60 جلسه آموزش ویدئویی رایگان

                        شرکت در دوره:

                        https://javidsoft.ir/courses/


                        کامنت

                        • daghyad

                          • 2012/03/30
                          • 117

                          #13
                          RE: شناسایی آخرین ردیف اطلاعات

                          سلام دو تا مطلب اینجا مطرح هست 1- پیدا کردن اخرین سطر 2- پیدا کردن اولین سطر خالی
                          1- پیدا کردن اخرین سطر
                          برای پیدا کردن اخرین سطر در یک ستون
                          r1 = Cells(Rows.Count, "e").End(xlUp).Row
                          این کد اخرین سطر را پیدا می کنه و اگر بین سطر ها چیزی خالی باشه کاری نداره
                          2- پیدا کردن اولین سطر خالی در ستون e
                          Range("e1").Select
                          If IsEmpty(ActiveCell) = False Then
                          ActiveCell.Offset(1, 0).Select

                          End Ifاینجا میگیم اول بیا سلول e1 را انتخب کن اگر e1 که الن سلول اکتیو خالی نبود برو یک سطر پایین تربه این ترتیب اواین سطر خالی پیدا می شه اولی خیلی برای موارد مختلف کاربرد داره و مخصوصا مواقعی که میخواهیم یک محدوده پویا تعریف کنیم با انسفاده از nameنه با فرمول نویسی و استفاده از تابع افست صرفا با کد نویسی مثلا
                          range("a1:e" & r1( یک محدو ده پویاست و اگر نامی برای ان انتخاب کنیم و اون نام را با vba تعریف کنیم در نمودار ها و لیست های پویا می تونیم ازش استفاده کنیم[hr]
                          Sub TTT()
                          Dim r1 As Integer, r2 As Integer
                          r1 = Sheet1.Cells(Rows.Count, "e").End(xlUp).Row
                          r2 = Sheet1.Cells(Rows.Count, "e").End(xlUp).Row
                          Sheet1.Range("a" & r1 & ":e" & r1).Copy
                          Sheet2.Range("a" & r2 & ":e" & r2).Select

                          Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                          :=False, Transpose:=False
                          End Sub
                          این کد جواب شماست این کد اخرین سطر در محدوده تعریف شده را پیدا می کنه و در شیت 2 در اخرین سطر شیت دو پیست می کنه

                          کامنت

                          • mokaram
                            مدير تالار اکسل و بانک اطلاعاتی

                            • 2011/02/06
                            • 1805

                            #14
                            RE: شناسایی آخــرین ردیف اطلاعات

                            با سلام
                            این جواب برای مواقعی که ستون مشخصی مد نظر باشه جواب میده اما
                            اگه ستون مشخص نباشه به عبارتی محدود ای از ستونها به عنوان متغییر معرفی شده باشه اونوقت چطور میشه به آخــرین رکورد رفت؟

                            کامنت

                            • alisabet

                              • 2011/09/08
                              • 159

                              #15
                              RE: شناسایی آخــرین ردیف اطلاعات

                              نوشته اصلی توسط barrai
                              با سلام
                              این جواب برای مواقعی که ستون مشخصی مد نظر باشه جواب میده اما
                              اگه ستون مشخص نباشه به عبارتی محدود ای از ستونها به عنوان متغییر معرفی شده باشه اونوقت چطور میشه به آخــرین رکورد رفت؟
                              اگه امكان داره فايل نمونه بذار تا معلوم بشه ميخواي چكار كني ؟

                              کامنت

                              Working...