اضافه کردن ممیز به عدد وارد شده به صورت شرطی

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

    • 2010/07/18
    • 118

    اضافه کردن ممیز به عدد وارد شده به صورت شرطی

    سلام
    توی یه ستون باید یه سری عدد ممیز دار وارد کنم
    محدوده ممیز این بودهاز 2/1 شروع میشه و اخرش هم 2/3200 هست)
    2/1
    2/2
    .
    2/10
    .
    2/100
    .
    2/1000
    .
    2/3200
    من برای راحتی کار که هر دفعه عدد 2 و ممیز که تکراری هست رو وارد نکنم اومدم توی format cells اون ستون custom رو انتخاب کردم و "1/"#### رو وارد کردم و مشکل موقت حل شد
    اما این کارم دو تا ایراد داره
    یکی اینکه نمایش عدد رو فقط به اون صورت میکنه و خود عدد رو تبدیل نمیکنه یعنی اگه 50 رو وارد کردم درسته 2/50 نمایش میده ولی توی خود سلول همون 50 هست من میخوام مقدار خود ستون هم تبدیل بشه به 2/50
    یکی هم اینکه الان یه سری عدد اومدن که به جای اون 2 یا 1 هست یا 3 و دیگه نمیشه اون رو به این صورت کنترل کرد

    حالا من میخوام به وسیله کد نویسی کاری کنم ستون یا محدوده مورد نظر رو کنترل کنه وقتی چیزی وارد شد چک کنه اگه عدد بدون ممیز بود(مثلا50) تبدیل کنه به 1/50 ولی اگه عدد با ممیز وارد شد هیچ تغییری نکنه
    ضمنا اون 1 رو که به عدد اضافه میکنه از یه سلول بخونه و مثلا اگه داخل اون سلول اگه 2 بود به عدد 2/ رو اضافه کنه

    اگه این مورد هم پیاده سازی بشه خیلی خوب هست:
    همه عدد ها فوق بدون احتساب 2 و ممیز 1 تا 4 رقمی هستن حالا اگه عدد 5 رقمی وارد شد مثلا 21435 تبدیل بشه 2/1435
    فقط در نظر داشته باشید که اگه عددی مثل 20001 وارد شد باید اینجوری بشه 2/1 نه 2/0001 همچنین:
    30012 بشه 3/12
    30124 بشه 3/124

    راستی من موقع ممیز وارد کردن از دات استفاده میکنم (سمت ارست کیبرد قسمت عددی کلید سمت راست عدد 0 ) ولی میخوام نمایش ممیز به صورت / باشه (یعنی اگه من 2.1 وارد کردم تبدیل کنه به 2/1)
    همچنین اگه چیزی غیر از اینا وارد شد خطا بده(وقتی اینتر زدم بره سلول بعدیش توی سلول جاری بمونه و کل محتوا رو در حالت انتخاب بگیره تا بشه مجدد عدد رو وارد کرد و یه صدایی هم بده که متوجه بشم)
    یعنی یا عدد یک رقمی تا 5 رقمی وارد میشه(بیشتر وارد شد خط بده)
    یا یه عدد با ممیز وارد میشه که سمت چپ عدد 1 تا 9 هست و سمت راست عدد 1 تا 3200
    با تشکر
    Last edited by master; 2015/03/07, 15:04.
  • generalsamad
    مدير تالار توابع

    • 2014/06/22
    • 1496

    #2
    با سلام
    با توابع متنی به جواب میرسید.
    در ستون d1 سری رو وارد کنید
    ستون b تغییرات اعمال شده وجود داره

    کد PHP:
    =if(mid(a1;2;1)<>"/";$d$1&"/"&a1;a1
    قسمت بالا زمانی بود که پستتون رو ویرایش نکردید اگه از دات (.) به جای ممیز استفاده میکنید کافیه فرمول رو به این صورت تغییر بدید.
    کد PHP:
    =IF(MID(A1;2;1)<>".";$D$1&"/"&A1;SUBSTITUTE(A1;".";"/")) 
    در پست بعد خانم خاکزاد قسمت بعدی سوالتون رو جواب داده
    با تشکر
    فایل ضمیمه شد
    فایل های پیوست شده
    Last edited by generalsamad; 2015/03/07, 15:37.
    [CENTER]
    [SIGPIC][/SIGPIC]
    [/CENTER]

    کامنت

    • khakzad

      • 2010/03/17
      • 2034
      • 85.00

      #3
      سلام
      جواب سوالی که فرمودین 1تا 5 رقم باشه و بیشتر خطا بده، دیتا ولیدیشن هست و از قسمت text lenght تنظیم میشه
      درمورد ممیز هممی دونید که / شناسایی نمیشه.نهایتا میشه اینو/ نمایش داد. فکرک نم باید یک ستون دیگه در نظر بگیرید و . رو با / جایگزین کنید..یکی رو مبنای محاسبات بگیرید و یکی رو برای نمایش.
      در نهایت با فرض اینکه عدد در سل A1 نوشته شده. از این فرمول استفاده کنید:
      کد:
      =VALUE(LEFT(A1,1)&"."&VALUE(RIGHT(A1,LEN(A1)-1)))
      سوالی بود در خدمتم
      فایل های پیوست شده
      Last edited by khakzad; 2015/03/07, 15:28.
      [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]

      کامنت

      • master

        • 2010/07/18
        • 118

        #4
        نوشته اصلی توسط generalsamad
        با سلام
        با توابع متنی به جواب میرسید.
        در ستون d1 سری رو وارد کنید
        ستون b تغییرات اعمال شده وجود داره

        کد PHP:
        =if(mid(a1;2;1)<>"/";$d$1&"/"&a1;a1
        قسمت بالا زمانی بود که پستتون رو ویرایش نکردید اگه از دات (.) به جای ممیز استفاده میکنید کافیه فرمول رو به این صورت تغییر بدید.
        کد PHP:
        =IF(MID(A1;2;1)<>".";$D$1&"/"&A1;SUBSTITUTE(A1;".";"/")) 
        در پست بعد خانم خاکزاد قسمت بعدی سوالتون رو جواب داده
        با تشکر
        فایل ضمیمه شد
        سلام
        ضمن تشکر من میخوام تغییرات توی همون سلول اعمال بشه یعنی اگه من وارد وارد کردم 2.52 خودش تبدیل کنه 2/52 یا اگه وارد کردم 362 خودش تبدیل کنه 2/362 (البته با توجه به سلول کمکی) یا اگه وارد کردم 32563 تبدیل کنه 3/2563
        برا همین اومدم توی قسمت وی بی تایپیک زدم

        نوشته اصلی توسط khakzad
        سلام
        جواب سوالی که فرمودین 1تا 5 رقم باشه و بیشتر خطا بده، دیتا ولیدیشن هست و از قسمت text lenght تنظیم میشه
        درمورد ممیز هممی دونید که / شناسایی نمیشه.نهایتا میشه اینو/ نمایش داد. فکرک نم باید یک ستون دیگه در نظر بگیرید و . رو با / جایگزین کنید..یکی رو مبنای محاسبات بگیرید و یکی رو برای نمایش.
        در نهایت با فرض اینکه عدد در سل A1 نوشته شده. از این فرمول استفاده کنید:
        کد:
        =VALUE(LEFT(A1,1)&"."&VALUE(RIGHT(A1,LEN(A1)-1)))
        سوالی بود در خدمتم
        سلام
        مشکل اینجاست که عدد 5 رقمی خودش دو بخش هست یکی اولین رقم سمت چپ که میتونه 1 تا 9 باشه (0 نباید باشه و اگه وارد شد حتما بره جزو گروهی که اشتباه وارد شده چون فرضا من میخواستم 10236 وارد کنم که بشه 1/236 اینجوری چون عدد اول اشتباها صفر شده شد عدد وارد شده میشه 236 و میره جزو اون گروهی که خودش ممیز و عدد میشه
        یکی هم 4 رقم بقیه که میتونه 0001 باشه تا 3200 (تو حالت 5 رقمی)
        بعد من میخوام وقتی اینتر رو زدم چک کنه توی محدوده هست یا نه اگه بود که بره خونه بعد اگه نبود با صدا بهم هشدار بده محتوای همون خونه رو به حالت انتخاب در بیاره که هم بتونم مقدار وارد شده رو ببینم و بدون کلید اضافی مقدار جدید رو وارد کنم
        از طرفی ممکنه عدد 5 رقمی نباشه اگه عدد 4 رقمی بود محدود میشه 1 تا 3200 دیگه توی این حالت 0001 نباید وارد بشه و باید خطا بده
        دوباره ممکنه عدد با ممیز وارد بشه مثلا 2.36 اینجا اگه طرف 2.0036 وارد کرد باید خطا بده ضمنا تبدیل بشه به 2/36
        ضمنا غیر از اینا هر فرمتی یا هر جور دیگه ای وارد شد خطا بده

        ضمنا برا چی میگید نمیشه . تبدیل بشه به /؟
        با تشکر

        کامنت

        • ~M*E*H*D*I~
          • 2011/10/19
          • 4377
          • 70.00

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

          کامنت

          • master

            • 2010/07/18
            • 118

            #6
            من که پست قبلی کامل توضیح دادم
            ببنید رنج عدد های بعد از ممیز از 1 هست تا 3200
            رنج عدد قبل از ممیز هم 1 هست تا 9
            برا ممیز هم من . وارد میکنم ولی میخوام بعدش تبدیل بشه به /
            ========
            حالا نحوه وارد کردن
            اگه عدد رو با ممیز وارد کردم که فقط باید صحت محدود چک بشه و بعد هم تبدیل . به /
            مثلا اگه زدم 1.26 هم عدد قبل از ممیز درسته و هم بعد از ممیز پس عدد وارد شده تبدیل میشه 1/26

            اگه عدد بدون ممیز وارد شد دو حالت داره

            1 اینکه عدد قبل از ممیز رو وارد نمیکنیم و این عدد توسط کد نویسی به عدد اضافه میشه روش هم به این صورت هست که یه سلولی کمکی وجود داره که عدد مورد نظر (بین 1 تا 9) داخل اون هست همین عدد رو به عدد وارد شده اضافه میکنه
            مثلا داخل اون سلول کمکی عدد 5 هست پس باید به عدد وارد شده 5 و ممیز اضافه بشه یعنی اگه عدد وارد شد 328 بود تبدیل بشه به 5/328
            توی این حالت فقط باید چک بشه عدد 1 تا 4 رقمی وارد شده و تو عدد 4 رقمی نهاین عدد 3200 هست

            2 این حالت یکم کار رو پیچیده میکرد کلا بیخیالش شدم

            =========
            نمیدونم الان خوب توضیح دادم یا نه
            ضمنا هر چی غیر از حالت های فوق بود یعنی اشتباه صورت گرفته و باید محتوای سلول به حالت انتخاب در بیاد و با صدا کاربر متوجه بشه تا مقدار رو تصحیح کنه
            مثلا هیچ وقت نباید با صفر شروع بشه
            مثلا اگه 0.23 بود اشتباه هست
            یا اگه 023 بود نباید تبدیل کنه به 5/23 بلکه میره جزو خطا ها(درسته 0 قبل از عدد حساب نمیشه ولی بنا به دلایلی اینم باید بره جزو خطا ها)
            دیگه کارکتری غیر از عدد و . وارد شد هم خطا صورت گرفته
            با تشکر

            کامنت

            • master

              • 2010/07/18
              • 118

              #7
              از اساتید سایت کسی نیست که راهنمایی بکنه چی باید برا کد بنویسم؟
              با تشکر

              کامنت

              • ~M*E*H*D*I~
                • 2011/10/19
                • 4377
                • 70.00

                #8
                نوشته اصلی توسط master
                از اساتید سایت کسی نیست که راهنمایی بکنه چی باید برا کد بنویسم؟
                با تشکر
                فایل پیوست رو مشاهده کنید در سلول زرد رنگ عدد قبل از ممیز رو وارد کنید
                فایل های پیوست شده
                [CENTER]
                [SIGPIC][/SIGPIC]
                [/CENTER]

                کامنت

                • master

                  • 2010/07/18
                  • 118

                  #9
                  ضمن تشکر بابت راهنمایی هایی که دوستان کردن باید بگم من میخواستم حتما توی خود همون سلول تغییر ایجاد بشه و فکر کنم تنها راه همون کد نویسی توی vba بود
                  خود یه سری کارها انجام دادم ولی بعضی جاها موندم
                  ممنون میشم بگید اینا رو چطوری حل کنم:
                  وقتی اینتر زده میشه فوکوس میره سلول بعدی من میخوام قبل از اینکه بره خونه یه شرطی رو چک کنم اگه شرط برقرار بود بره خونه بعدی اما اگه برقرار نبود توی همون خونه بمونه و یه صدا دینگ هم بده این رو چطوری پیاده سازی کنم؟
                  ضمنا توی این حالت میخوام به صورتی توی همون خونه بمونه که بدون زدن backspace بشه محتویات جدید وارد کرد(یعنی مثل اینکه توی یه تکست باکس هستیم که کل محتویاتش انتخاب شده هست و باز زدن هر کارکتری محتویان قبلی پاک میشه و کارکتر جدید وارد میشه)
                  یکی هم اینکه چطور تشخیص بدم یه رشته وارد شده عدد هست؟
                  برا مقایسه یه کارکتر باید چیکار کرد؟ مثلا میخوام ببینم کارکتر پنجم یه رشته . هست یا نه باید چطوری مقایسه کنم؟
                  با تشکر

                  کامنت

                  چند لحظه..