2012-04-04 11 views
8

एक्सेल वीबीए में, Range("A1").Value वर्कशीट पर श्रेणी ए 1 के अंतर्निहित मान को वापस करना चाहिए। लेकिन अगर सेल को लेखांकन के रूप में स्वरूपित किया गया है तो मुझे एक अलग मूल्य मिल रहा है।एक्सेल वीबीए: सेल के मूल्य प्राप्त करें, सेल के स्वरूपण से स्वतंत्र

मैं सेल के वास्तविक अंतर्निहित मूल्य को कैसे प्राप्त करूं?

वर्कशीट

एक नया दस्तावेज़ बनाएँ, कोशिकाओं में निम्न मान दर्ज करें:

  • A1: 0.00001
  • A2: = A1
  • ए 3: = ए 1 = ए 2

जैसा कि आप उम्मीद करेंगे, ए 3 परिणाम TRUE में परिणाम। अब 2 दशमलव स्थानों का उपयोग करके ए 2 के लेखांकन को स्वरूपित करें। ए 2 अब $ 0.00 पढ़ता है, लेकिन अंतर्निहित मान अभी भी 0.00001 है, इसलिए ए 3 अभी भी TRUE है।

VBA

एक नया मॉड्यूल बनाने और निम्नलिखित समारोह में जोड़ें:

Function f(addr As String) 
    f = Range(addr).Value 
End Function 

आप देख सकते हैं, यह सिर्फ Range वस्तु की Value विधि का उपयोग कर एक सीमा के मूल्य में हो जाता है ।

वर्कशीट

कार्यपत्रक पर वापस। निम्न मान दर्ज करें:

  • B1: = f ("A1")
  • बी 2: = च ("A2")
  • बी 3: = बी 1 = बी 2

A1 और A2 एक ही अंतर्निहित मूल्य है, लेकिन B1 और B2 नहीं, भले ही वे दोनों ValueA1 और A2 विधि का उपयोग करके गणना की गई हों।

A3 (=A1=A2) में अभिव्यक्ति A1 और A2 के वास्तविक अंतर्निहित मूल्य तक पहुंच रही है। मैं इन मूल्यों को वीबीए में कैसे एक्सेस करूं?

+0

मैं एक्सेल 2010 का उपयोग कर रहा हूं, और 'बी 3' निश्चित रूप से 'गलत' आ रहा है। – Joe

+0

मान लीजिए कि अगर आप केवल स्वरूपण को बदलते हैं तो यह पुनरावृत्ति नहीं करता है ... –

उत्तर

12

यह अनिवार्य रूप से मेरे लिए भी सही साबित हुआ क्योंकि मैंने सूत्रों में प्रवेश करने के बाद स्वरूपण जोड़ा।

पुन: संपादित करने के लिए बी 2 को दोबारा संपादित करें।

अंतर्निहित कीमत आप VALUE2 संपत्ति जो स्वरूपण उपेक्षा करने लगता है उपयोग करने की आवश्यकता पाने के लिए:

Function f(addr As String) 
    f = Range(addr).Value2 
End Function 
+2

ओह यह चुस्त है। – uotonyh

+0

+1 अच्छी अंतर्दृष्टि – brettdj

4

4 दशमलव अंक से परे मुद्रा स्वरूपित कोशिकाओं के साथ VBA और मूल्य का उपयोग कर के साथ इस मुद्दे को अच्छी तरह से this post at Dick's blog द्वारा कवर किया जाता

यदि आप एक्सेल में एक अनफॉर्मेटेड सेल में कोई संख्या टाइप करते हैं, तो वह संख्या डबल डेटा प्रकार में संग्रहीत है। जब आप उस नंबर को प्रारूपित करते हैं, तो आप इसे एक विशिष्ट तरीके से दिखाते हैं, लेकिन आप संख्या को नहीं बदलते हैं। उदाहरण के लिए, यदि आप नंबर 1 को अल्पविराम शैली के रूप में प्रारूपित करते हैं, तो आपको 1.00 मिलते हैं। अंतर्निहित डेटा अभी भी 1 है, आप इसे अलग-अलग दिखा रहे हैं। दिनांक प्रारूप और मुद्रा प्रारूप इस नियम के दो अपवाद हैं।

जब आप किसी दिनांक या मुद्रा के रूप में कुछ प्रारूपित करते हैं, तो आप वास्तव में अंतर्निहित डेटा प्रकार (मूल्य गुण में संग्रहीत मूल्य का) बदलते हैं। जब दिनांक प्रारूप की बात आती है, तो यह अर्थशास्त्र है क्योंकि आप डेटा और डेटा में किसी भी बदलाव के बिना दिनांक और डबल डेटा प्रकारों के बीच स्विच कर सकते हैं। मुद्रा डेटा प्रकार के साथ इतना कुछ नहीं। मुद्रा केवल चार दशमलव स्थानों का समर्थन करता है, इसलिए एक डबल डेटा जैमिंग, कहें, पांच मुद्रा डेटा प्रकार में दशमलव के परिणामस्वरूप एक अलग संख्या होगी।

+0

अच्छा लिंक ...... –

+1

स्पष्टीकरण खोजने के लिए धन्यवाद – JMax

संबंधित मुद्दे