محاسبه روی عدد تایپ شده در یک سلول در همان سلول

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

    • 2015/01/19
    • 38

    محاسبه روی عدد تایپ شده در یک سلول در همان سلول

    سلام
    من میخام تو یه سلول یه عدد بنویسم، بعد یه سری محاسبه روی اون عدد انجام بده و نتیجه رو تو همون سلول بنویسه. و این کار برای هر 10 سلول در میان انجام بشه.
    بطور مثال در فایل ضمیمه، تو سلول h12 میزنم 1230، این عدد رو منهای 30 بکنه و دوباره تو سلول h12 بنویسه.
    همینطور برای h22 , h32 , ...
    فقط میخام وقتی عدد رو نوشتم، با زدن اینتر این محاسبات انجام بشه و عدد جدید در سلول نوشته بشه.
    بنظرتون راهی هست دوستان؟
    فایل های پیوست شده
  • ali.b

    • 2014/01/12
    • 798

    #2
    سلام
    تا تاجایی که میدونم اکسل نیاز داره که ی مقدار ورودی داشته باشه وقتی در یک سلول داده ای بگیره و دوباره تو همون ثبت کنه یعنی داده قبلی پاک شه و این ممکن نیست مگر اینکه در بخش کد نویسی باشه که سوال رو باید اونجا مطرح کنید و تقربیبا چنین کدی میشه باز اونم باید در سلول های خاصی باید تعریف بشه و ادرس دهی شه
    [CENTER]
    [/CENTER]

    کامنت

    • eleman

      • 2015/01/19
      • 38

      #3
      من خودم یه ماکروی اولیه واسش تعریف کردم.
      به این ترتیب که اول محاسبات رو انجام میده و نتیجه رو تو یه سلول دیگه و یه جای دیگه نتیجه رو مینویسه. بعد اون نتیجه رو کات میکنه و پیست میکنه به همون سلول ما.
      منتها دوتا ایراد داشت.
      1- باید براش یه دکمه یا کلید میانبر تعریف بشه و تا اون زده نشه این ماکرو عمل نمیکنه.
      2- نمیتونم آدرس رو به سلولهای دیگه تعمیم بدم. ینی این ماکرو رو میزنم فقط این کار رو واسه عدد سلول h12 انجام میده.
      سپاس

      کامنت

      • abootorab

        • 2014/10/17
        • 351

        #4
        نوشته اصلی توسط eleman
        سلام
        من میخام تو یه سلول یه عدد بنویسم، بعد یه سری محاسبه روی اون عدد انجام بده و نتیجه رو تو همون سلول بنویسه. و این کار برای هر 10 سلول در میان انجام بشه.
        بطور مثال در فایل ضمیمه، تو سلول h12 میزنم 1230، این عدد رو منهای 30 بکنه و دوباره تو سلول h12 بنویسه.
        همینطور برای h22 , h32 , ...
        فقط میخام وقتی عدد رو نوشتم، با زدن اینتر این محاسبات انجام بشه و عدد جدید در سلول نوشته بشه.
        بنظرتون راهی هست دوستان؟
        با درود
        همانطور که جناب آقای spartan عزیز فرمودند با این کار مقدار اولیه اون سل تغییر میکنه ولی اگر به هر صورت این جزئی از کار و برنامه شما باشه میتونید با کد زیر به هدفتون برسید.
        در این مثال ستون H و سلهای ردیف 2,12,22,32,42,... والی آخر برای شما هدفتونو اعمال میکنه.
        روی شیت مورد نظرتون راست کلیک و View Code رو کلیک کنید و سپس کد زیر رو درون پنجره باز شده vb کپی کنید، امیدوارم منظورتونو درست فهمیده باشم.
        کد PHP:
        Public OldVal
        Private Sub Worksheet_Change(ByVal Target As Range)
            
        On Error Resume Next
            
        If Target.Column And (Target.Row Mod 10 2) And OldVal <> Target.Value 30 Then
                OldVal 
        Target.Value
                Target
        .Value Target.Value 30
            End 
        If
        End Sub 
        Last edited by abootorab; 2015/02/03, 17:13.

        کامنت

        • eleman

          • 2015/01/19
          • 38

          #5
          بسیار سپاسگزارم

          کامنت

          • majid_mx4

            • 2012/06/25
            • 699

            #6
            با سلام
            دوست عزیز

            احتراما فایل ضمیمه را بررسی نمایید که علاوه بر عملیات درخواستی در خانه j1 اگر عددی غیر از 2 باشد ماکرو از کار می افتد ( که برای ورودیه اولیه لازم است )

            خلاصه : کسر خانه های خاص از عدد مورد نظر

            با تشکر میر
            فایل های پیوست شده

            کامنت

            • eleman

              • 2015/01/19
              • 38

              #7
              با تشکر از جناب میر
              فقط برای خانۀ h12 جواب میده و بقیه خانه های h22 , ... همان عدد تایپ شده باقی میماند.
              کد آقای ابوتراب جواب داد.
              متشکرم

              کامنت

              • eleman

                • 2015/01/19
                • 38

                #8
                نوشته اصلی توسط abootorab
                با درود
                همانطور که جناب آقای spartan عزیز فرمودند با این کار مقدار اولیه اون سل تغییر میکنه ولی اگر به هر صورت این جزئی از کار و برنامه شما باشه میتونید با کد زیر به هدفتون برسید.
                در این مثال ستون h و سلهای ردیف 2,12,22,32,42,... والی آخر برای شما هدفتونو اعمال میکنه.
                روی شیت مورد نظرتون راست کلیک و view code رو کلیک کنید و سپس کد زیر رو درون پنجره باز شده vb کپی کنید، امیدوارم منظورتونو درست فهمیده باشم.
                کد PHP:
                public oldval
                private sub worksheet_change(byval target as range)
                    
                on error resume next
                    
                if target.column and (target.row mod 10 2) and oldval <> target.value 30 then
                        oldval 
                target.value
                        target
                .value target.value 30
                    end 
                if
                end sub 

                من حل شد رو زدم اما الان به دو تا مشکل برخورم!!
                یکی اینکه بعد از اینکه سلول با عددی پر شد و البته درست هم عمل میکنه، اگه قرا باشه محتویات اون سلول پاک بشه عدد -30 توش نوشته میشه.
                دوم هم اینکه من اگه بخام بجای 30 یه عددی تو یه سلول دیگه بنویسم که همیشه عملیات رو با اون انجام بده کد به چه ترتیبی تغییر میکنه؟
                مثلا من 30 رو تو سلول f5 بنویسم و تو کد آدرس f5 رو بدیم و بعد اگه 30 شد 50، بجای 30 تا 50 تا از اون عدد ورودی کم کنه.

                ممنونم

                کامنت

                • abootorab

                  • 2014/10/17
                  • 351

                  #9
                  نوشته اصلی توسط eleman
                  من حل شد رو زدم اما الان به دو تا مشکل برخورم!!
                  یکی اینکه بعد از اینکه سلول با عددی پر شد و البته درست هم عمل میکنه، اگه قرا باشه محتویات اون سلول پاک بشه عدد -30 توش نوشته میشه.
                  دوم هم اینکه من اگه بخام بجای 30 یه عددی تو یه سلول دیگه بنویسم که همیشه عملیات رو با اون انجام بده کد به چه ترتیبی تغییر میکنه؟
                  مثلا من 30 رو تو سلول f5 بنویسم و تو کد آدرس f5 رو بدیم و بعد اگه 30 شد 50، بجای 30 تا 50 تا از اون عدد ورودی کم کنه.

                  ممنونم
                  با درود
                  با یه تغییر کوچک میتونستین به هدفتون برسید
                  خدمت شما:
                  کد PHP:
                  Public oldval
                  Private Sub worksheet_change(ByVal target As Range)
                      
                  On Error Resume Next
                      
                  If target.Value "" Then Exit Sub
                      
                  If target.Column And (target.Row Mod 10 2) And oldval <> target.Value Range("F5").Value Then
                          oldval 
                  target.Value
                          target
                  .Value target.Value Range("F5").Value
                      End 
                  If
                  End Sub 

                  کامنت

                  • eleman

                    • 2015/01/19
                    • 38

                    #10
                    سلام و بسیار ممنونم
                    دوست گرامی، متاسفانه من بخاطر عدم اشراف به کدنویسی اکسل شما رو اذیت میکنم.
                    الانم نتونستم کد رو به اون چیزی که دلخواهمه تغییر بدم و بازهم ازتون کمک میخام.
                    کاری که الان انجام میشه اینه که تو سلولهای h12 , h22 , h32 , ... عدد نوشته شده از سلول f5 کم میشه و تو همون سلولها نوشته میشه.
                    اما دقیقا کاری که من میخام انجام بشه اینه:
                    تو این سلول، عددی که نوشته میشه، منهای عدد نوشته شده تو سلول f5 واقع در شیت sheet2 بشه و بعد تقسیم بر عدد نوشته شده در سلول e5 در شیت sheet2بشه.
                    سلولهای F5 , E5 برای همه ی سلولهای h12 , h22 , h32 , ... هستن.

                    بسیار متشکرم.
                    فایل های پیوست شده

                    کامنت

                    • AmirAkbar

                      • 2014/02/06
                      • 118

                      #11
                      دوست عزیز من جای شما باشم از سلولهای واسط کمک می گیرم (خدا برکت بده اینهمه شیت و سلول!!) .. هم برای شیت و داده اصلی و هم برای شیت کمکی (f5 و e5) ...
                      و دیگه با کد کاری ندارم مگر اینکه حجم عظیمی از محاسبات داشته باشم..

                      کامنت

                      • abootorab

                        • 2014/10/17
                        • 351

                        #12
                        نوشته اصلی توسط eleman
                        سلام و بسیار ممنونم
                        دوست گرامی، متاسفانه من بخاطر عدم اشراف به کدنویسی اکسل شما رو اذیت میکنم.
                        الانم نتونستم کد رو به اون چیزی که دلخواهمه تغییر بدم و بازهم ازتون کمک میخام.
                        کاری که الان انجام میشه اینه که تو سلولهای h12 , h22 , h32 , ... عدد نوشته شده از سلول f5 کم میشه و تو همون سلولها نوشته میشه.
                        اما دقیقا کاری که من میخام انجام بشه اینه:
                        تو این سلول، عددی که نوشته میشه، منهای عدد نوشته شده تو سلول f5 واقع در شیت sheet2 بشه و بعد تقسیم بر عدد نوشته شده در سلول e5 در شیت sheet2بشه.
                        سلولهای F5 , E5 برای همه ی سلولهای h12 , h22 , h32 , ... هستن.

                        بسیار متشکرم.
                        با درود
                        دوست عزیز یه کم کار رو سخت کردید ولی به هرصورت بنده به این صورت واستون نوشتم، امیدوارم منظورتون درست فهمیده باشم

                        این کد واسه Sheet1
                        کد PHP:
                        Public OldVal
                        Private Sub Worksheet_Change(ByVal Target As Range)
                            
                        On Error Resume Next
                            
                        If Laghv "YES" Then Exit Sub
                            
                        If Target.Value "" Then
                                OldVal 
                        ""
                                
                        Exit Sub
                            End 
                        If
                            If 
                        Target.Column And (Target.Row Mod 10 And Target.Row 10Then
                                
                        If OldVal <> Target.Value Sheet2.Range("E5") + Sheet2.Range("F5"Then
                                    OldVal 
                        Target.Value
                                    Target
                        .Value = (Target.Value Sheet2.Range("F5")) / Sheet2.Range("E5")
                                
                        End If
                            
                        End If
                        End Sub 
                        این کد واسه Sheet2

                        کد PHP:
                        Private Sub Worksheet_Change(ByVal Target As Range)
                            
                        On Error Resume Next
                            Laghv 
                        "YES"
                            
                        If (Target.Column Or Target.Column 6) And Target.Row 5 Then
                                LastRow 
                        Sheet1.Cells(Sheet1.Rows.Count"H").End(xlUp).Row
                                
                        For Each c In Sheet1.Range("H12:H" LastRow)
                                    If 
                        c.Row Mod 10 And c.Value <> "" Then
                                          c
                        .Value = (c.Value ValE5 ValF5 Sheet2.Range("F5")) / Sheet2.Range("E5")
                                    
                        End If
                                
                        Next
                            End 
                        If
                            
                        ValE5 Sheet2.Range("E5").Value
                            ValF5 
                        Sheet2.Range("F5").Value
                            Laghv 
                        "NO"
                        End Sub 

                        این کد واسه Workbook

                        کد PHP:
                        Private Sub Workbook_Open()
                            
                        ValE5 Sheet2.Range("E5").Value
                            ValF5 
                        Sheet2.Range("F5").Value
                            Laghv 
                        "NO"
                        End Sub 
                        و در نهایت یک ماژول ایجاد کنید و این کد رو درون اون کپی کنید

                        کد PHP:
                        Global ValE5
                        Global ValF5
                        Global Laghv As String 
                        البته فایل رو آماده کردم و به پیوست خدمت شما.
                        موفق باشین
                        فایل های پیوست شده

                        کامنت

                        چند لحظه..