تبدیل sub به function

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

    • 2013/10/04
    • 86

    [حل شده] تبدیل sub به function

    سلام خدمت اساتید و دوستان

    حدودا 2 سال پیش سوالی پرسیدم که استاد شمس العلما لطف کردند و سوالم رو جواب دادند که میتونید در این صفحه ملاحظه کنید
    فایل مورد نظر در همین صفحه ای که لینکش کردم رو دانلود کنید

    حالا یه درخواستی که دارم اینه که استاد شمس العلما این فرمول رو بصورت sub نوشتند میخواهم آن را تبدیل function کنم ولی نمیتونم واز اساتید ودوستان این خواهش رو دارم که کمکم کنند و آن راتبدیل به function کنند
    Last edited by reza_1001; 2019/07/31, 18:10.
  • Amir Ghasemiyan

    • 2013/09/20
    • 4598
    • 100.00

    #2
    سلام دوست عزیز
    از تبدیل sub به function چه انتظاری دارید؟ به چه منظور میخواهید این تبدیل رو انجام بدین؟

    کامنت

    • reza_1001

      • 2013/10/04
      • 86

      #3
      با سلام
      خدمت آقای قاسمیان عرض کنم که راستشو بخواهید یه برنامه محاسباتی دارم که همه محاسبات رو بوسیله توابع انجام میدم و فقط این یکی ساب هستش و میخوام این روهم تبدیل به تابع کنم

      کامنت

      • Amir Ghasemiyan

        • 2013/09/20
        • 4598
        • 100.00

        #4
        نوشته اصلی توسط reza_1001
        با سلام
        خدمت آقای قاسمیان عرض کنم که راستشو بخواهید یه برنامه محاسباتی دارم که همه محاسبات رو بوسیله توابع انجام میدم و فقط این یکی ساب هستش و میخوام این روهم تبدیل به تابع کنم
        اگه فقط این دلیل تبدیل هست که کافیه بجای sub بنویسید function

        کامنت

        • reza_1001

          • 2013/10/04
          • 86

          #5
          آقای قاسمیان دقیقا همین کار رو خواستم بکنم ولی ورودی تابع باید دوتا باشه در حالی که در این ساب ورودی ظاهرا فقط یکیه (البته اون for 1 to 30 رو که استاد شمس العلما نوشته اند ورودی هستش) در کل نمیتونم ، آقای قاسمیان خواهشا کمک کن

          کامنت

          • Amir Ghasemiyan

            • 2013/09/20
            • 4598
            • 100.00

            #6
            نوشته اصلی توسط reza_1001
            آقای قاسمیان دقیقا همین کار رو خواستم بکنم ولی ورودی تابع باید دوتا باشه در حالی که در این ساب ورودی ظاهرا فقط یکیه (البته اون for 1 to 30 رو که استاد شمس العلما نوشته اند ورودی هستش) در کل نمیتونم ، آقای قاسمیان خواهشا کمک کن

            sub که استاد شمس نوشتند که ورودی نداره. شما کافیه sub رو پاک کنید بنویسید function و هر جا خواستید استفاده کنید اینطوری بنویسید:
            کد:
            a=m()

            کامنت

            • reza_1001

              • 2013/10/04
              • 86

              #7
              آقای قاسمیان این کاری که گفتید انجام دادم ولی نشد ، اگه میشه لطف کنید یه فایل نمونه برام بذارید خیلی ممنونتون میشم

              کامنت

              • Amir Ghasemiyan

                • 2013/09/20
                • 4598
                • 100.00

                #8
                فایل پیوست رو ملاحظه بفرمایید
                فایل های پیوست شده

                کامنت

                • reza_1001

                  • 2013/10/04
                  • 86

                  #9
                  سلام آقای قاسمیان دستتون درد نکنه ، ولی این کاری روکه شما کردید تبدیل ساب به تابع نیست در واقع یه مرحله اضافه کردید ومیگید اگه میخواهید این تابع عملکنه باید یه ساب جدید اجرا بشه
                  ولی خواسته من این بود که دیگه سابی اجرانشه و ساب قبلی تبدیل به تابع بشه بخاطر همین میگفتم که باید تابع 2 تا ورودی داشته باشه و مشکلم توی همین قسمت بودکه نمیدونستم که چطوری باید 2تا ورودی به تابع بدم
                  باز هم ممنون ولی مشکل من همچنان حل نشده
                  ممنون میشم که کمکم کنید

                  کامنت

                  • iranweld

                    • 2015/03/29
                    • 3341

                    #10
                    با سلام

                    لطفا بفرمایید ورودی فانکشن جدید کدام آیتم ها میباشد
                    احتمالا اولی سلول b3 هستش؟

                    کامنت

                    • reza_1001

                      • 2013/10/04
                      • 86

                      #11
                      سلام
                      بله ، البته اگه شما میتونید بصورتی بنویسید که ورودی همیشه b3 نباشه ومثل بقیه توابع باشه که شخص یه بار a رو ورودی قرار میده و یه بار b رو یعنی بستگی به کاربر داره
                      توضیح تابع :
                      2 تا ستون دارم یکی ستون A (عدد) و دیگری ستون B (متن)

                      ستون اعداد یک سری اعداد هستند که 30تایی هستند یعنی از 1تا30 از 30 تا 60 الی....
                      حالا میخوام زمانی که در 30 تای اول قبل از اولین متن در ستون B ، در ستون c مثلا با عدد1 پر بشه و بعد از اولین متن در ستون B چیزی نوشته نشه
                      وهمچنین در 30 تای اول بعد از آخرین متن در ستون B ، تا عدد 30 تموم میشه در ستون c مثلا با عدد 2 پر بشه .
                      ودر بقیه اعداد از 30 تا 60 الی .... همینجوری عمل کنه .
                      سابی که استاد شمس نوشته اند درست عمل میکنه ومن فقط میخوام تبدیل به فانکشن بشه
                      Last edited by reza_1001; 2019/08/01, 11:57.

                      کامنت

                      • Amir Ghasemiyan

                        • 2013/09/20
                        • 4598
                        • 100.00

                        #12
                        کد:
                        [B]=m($B$3,A4,20)من منظور شما رو اشتباه متوجه شدم.
                        اين فانكشن رو بررسي بفرماييد لطفا:
                        
                        کد:
                        Function m(rng As Range, rng2 As Range, Optional count As Integer = 30)
                        Dim p, n, i
                        p = Int((rng2.Row - rng.Row - 1) / count) * count
                        n = 0
                        
                        For i = 1 + p To count + p
                            If rng.Offset(i, 0).Value <> "" Then
                                If n = 0 Then n = rng.Offset(i, 0).Row
                                n2 = rng.Offset(i, 0).Row
                            End If
                        Next
                        
                        If rng2.Value <> "" And n <> 0 Then
                            If rng2.Row < n2 Then m = 0
                            If rng2.Row <= n Then m = 1
                            If rng2.Row >= n2 Then m = 2
                        End If
                        End Function
                        براي استفاده هم اين فرمول رو وارد كنيد و درگ كنيد
                        کد:
                        =m($B$3,A4)
                        اگر خواستيد بجاي بچ هاي 30 تايي از يك مقدار دلخواه استفاده كنيد كافيه آرگومان سوم تابع رو مقدار بديد. به اين صورت:
                        [/B]
                        کد:
                        [COLOR=#0000CD][COLOR=#0000CD][B][/B][/COLOR][/COLOR]

                        کامنت

                        • reza_1001

                          • 2013/10/04
                          • 86

                          #13
                          سلام آقای قاسمیان ، خیلی اذیتتون کردم ببخشید
                          این تابعی که نوشتید اشتباه عمل میکنه براتون عکساشومیذارم
                          Click image for larger version

Name:	Capture.PNG
Views:	1
Size:	7.4 کیلو بایت
ID:	135675
                          Click image for larger version

Name:	Capture1.PNG
Views:	1
Size:	7.9 کیلو بایت
ID:	135676

                          کامنت

                          • Amir Ghasemiyan

                            • 2013/09/20
                            • 4598
                            • 100.00

                            #14
                            نوشته اصلی توسط reza_1001
                            سلام آقای قاسمیان ، خیلی اذیتتون کردم ببخشید
                            این تابعی که نوشتید اشتباه عمل میکنه براتون عکساشومیذارم
                            [ATTACH=CONFIG]19547[/ATTACH]
                            [ATTACH=CONFIG]19548[/ATTACH]
                            من چك كردم اشتباه عمل نميكنه. با اون ستوني كه نوشته بوديد دستي چك كردم يكسان هست. فايل پيوست رو مشاهده كنيد
                            فایل های پیوست شده

                            کامنت

                            • reza_1001

                              • 2013/10/04
                              • 86

                              #15
                              آقای قاسمیان دست گلت درد نکنه ، خدا خیرت بده. درست عمل میکنه .
                              بازم ممنون.
                              یاعلی

                              کامنت

                              چند لحظه..