تعيين آخرين ستون و آخرين سطر اطلاعات در يك sheet

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ali.alavi

    • 2015/08/31
    • 11

    [حل شده] تعيين آخرين ستون و آخرين سطر اطلاعات در يك sheet

    سلام
    مطابق تصوير پيوست ، اطلاعات پراكنده اي در يك sheet داريم .
    مي خوايم بدونيم آخرين سطر و ستون مورد استفاده كدومه؟
    ( طبيعتاً در تصوير پيوست ، سلول e9 كه با رنگ قرمز مشخص شده پاسخ صحيح خواهد بود )
    تابعي براي حل اين موضوع مورد نيازه!
    ممنون
    فایل های پیوست شده
  • khakzad

    • 2010/03/17
    • 2034
    • 85.00

    #2
    سلام
    این فرمول ارایه اس رو وارد کنید:
    کد:
    =address(max(if(a1:d18<>"",row(a1:d18),"")),max(if(a1:d18<>"",column(a1:d18),"")))
    محدوده از a118 در نظر گرفته شده. می تونید جایگرین کنید
    سوالی بود در خدمتم
    [CENTER][B][COLOR=#008000][SIZE=3]محصولات و جزوات آموزش تخصصی [URL="https://excelpedia.net/"]اکسل[/URL] در:

    [URL="https://excelpedia.net/category/excel-functions/"]برترین مرجع تخصصی پارسی اکسل[/URL]
    [URL="http://www.exceliran.com/shop/"]جامعه اكسل ايرانيان: فروشگاه[/URL][/SIZE][/COLOR][/B]
    :wcom:

    [B][URL="https://excelpedia.net/"]آموزش اکسل تخصصی[/URL] و [URL="https://excelpedia.net/excel-ninja/"]پیشرفته[/URL] - [URL="https://excelpedia.net/"]تهران[/URL][/B]
    [EMAIL="h.khakzad@yahoo.com"]h.khakzad@yahoo.com[/EMAIL]
    [/CENTER]

    کامنت

    • ali.alavi

      • 2015/08/31
      • 11

      #3
      جناب خاکزاد با تشکر . تابع خوبی نوشتید اما یک مشکل وجود داره :
      ما در این تابع ، خودمون یک محدوده رو برای اعمال تابع در نظر گرفتیم ؛ در حالی که اگه قرار باشه این تابع در یک ماکرو قرار بگیره نمیشه پیش بینی کرد که آیا این محدوده جوابگوی اطلاعات مندرج در sheet های مختلف هست یانه...
      از طرف دیگه اگه بخوایم به جهت اطمینان از فراگیر بودن محدوده تابع ، دامنه اون رو بیش از حد گسترش بدیم رم سیستم بیخودی اشغال میشه . مثلاً ممکنه ما در یک sheet تعداد 5000 سطر داشته باشیم اما تابع رو بر روی 500,000 تنظیم کنیم تا مطمئن باشیم که دربرگیرنده همه اطلاعات ما خواهد بود! خوب اینجوری سرعتمون افت می کنه

      کامنت

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

        • 2011/03/01
        • 648
        • 80.00

        #4
        نوشته اصلی توسط ali.alavi
        جناب خاکزاد با تشکر . تابع خوبی نوشتید اما یک مشکل وجود داره :
        ما در این تابع ، خودمون یک محدوده رو برای اعمال تابع در نظر گرفتیم ؛ در حالی که اگه قرار باشه این تابع در یک ماکرو قرار بگیره نمیشه پیش بینی کرد که آیا این محدوده جوابگوی اطلاعات مندرج در sheet های مختلف هست یانه...
        از طرف دیگه اگه بخوایم به جهت اطمینان از فراگیر بودن محدوده تابع ، دامنه اون رو بیش از حد گسترش بدیم رم سیستم بیخودی اشغال میشه . مثلاً ممکنه ما در یک sheet تعداد 5000 سطر داشته باشیم اما تابع رو بر روی 500,000 تنظیم کنیم تا مطمئن باشیم که دربرگیرنده همه اطلاعات ما خواهد بود! خوب اینجوری سرعتمون افت می کنه
        سلام دوست عزیز مبحث ماکرو با توابع جدا هستند و اگر نیاز به کد نویسی باشه در حلقه For each به راحتی قابل بررسی است .
        [CENTER][COLOR=#ffd700]​[/COLOR]تنها راهي که به شکست مي انجامد، تلاش نکردن است
        [IMG]http://www.graphics18.com/wp-content/uploads/2010/12/yellow-flower23.gif[/IMG]
        [/CENTER]

        کامنت

        • ali.alavi

          • 2015/08/31
          • 11

          #5
          با تشکر

          کامنت

          • generalsamad
            مدير تالار توابع

            • 2014/06/22
            • 1496

            #6
            با سلام
            از این function نیز میتونید استفاده کنید
            کد PHP:
            Function Last(choice As Longrng As Range)
                
            Dim lrw As Long
                Dim lcol 
            As Long

                Select 
            Case choice

                
            Case 1:
                    
            On Error Resume Next
                    Last 
            rng.Find(What:="*"_
                                    After
            :=rng.Cells(1), _
                                    Lookat
            :=xlPart_
                                    LookIn
            :=xlFormulas_
                                    SearchOrder
            :=xlByRows_
                                    SearchDirection
            :=xlPrevious_
                                    MatchCase
            :=False).Row
                    On Error 
            GoTo 0

                
            Case 2:
                    
            On Error Resume Next
                    Last 
            rng.Find(What:="*"_
                                    After
            :=rng.Cells(1), _
                                    Lookat
            :=xlPart_
                                    LookIn
            :=xlFormulas_
                                    SearchOrder
            :=xlByColumns_
                                    SearchDirection
            :=xlPrevious_
                                    MatchCase
            :=False).Column
                    On Error 
            GoTo 0

                
            Case 3:
                    
            On Error Resume Next
                    lrw 
            rng.Find(What:="*"_
                                   After
            :=rng.Cells(1), _
                                   Lookat
            :=xlPart_
                                   LookIn
            :=xlFormulas_
                                   SearchOrder
            :=xlByRows_
                                   SearchDirection
            :=xlPrevious_
                                   MatchCase
            :=False).Row
                    On Error 
            GoTo 0

                    On Error Resume Next
                    lcol 
            rng.Find(What:="*"_
                                    After
            :=rng.Cells(1), _
                                    Lookat
            :=xlPart_
                                    LookIn
            :=xlFormulas_
                                    SearchOrder
            :=xlByColumns_
                                    SearchDirection
            :=xlPrevious_
                                    MatchCase
            :=False).Column
                    On Error 
            GoTo 0

                    On Error Resume Next
                    Last 
            rng.Parent.Cells(lrwlcol).Address(FalseFalse)
                    If 
            Err.Number 0 Then
                        Last 
            rng.Cells(1).Address(FalseFalse)
                        
            Err.Clear
                    End 
            If
                    
            On Error GoTo 0

                End Select
            End 
            Function 
            این تابع دو پارامتر داره
            پارامتر اول:عدد1 شماره آخرین سطر رو بر میگردونه -عدد2 شماره آخرین ستون رو بر میگردونه-عدد3 آدرس آخرین سلول رو بر میگردونه
            پارامتر دوم: محدوده مورد نظر رو وارد میکنیم

            1-برای شماره آخرین سطر
            کد PHP:
            =Last(1;A:L
            2-برای شماره آخرین ستون
            کد PHP:
            =Last(2;A:L
            3-برای آدرس آخرین سلول
            کد PHP:
            =Last(3;A:L

            فایل ضمیمه گردید
            فایل های پیوست شده
            [CENTER]
            [SIGPIC][/SIGPIC]
            [/CENTER]

            کامنت

            • ali.alavi

              • 2015/08/31
              • 11

              #7
              صمد بزرگ با تشکر

              کامنت

              چند لحظه..