क्विक स्टैट्स वैल्यूज़ को क्लिपबोर्ड पर कॉपी करें - एक्सेल टिप्स

ताम्पा में एक एक्सेल सेमिनार के दौरान यह सवाल आया: क्या यह अच्छा नहीं होगा यदि आप स्टेटस बार से क्लिपबोर्ड के आंकड़ों को बाद में एक सीमा तक चिपका सकते हैं?

मैंने उस व्यक्ति को दबाया जिसने सवाल पूछा था कि पेस्ट को कैसे काम करना चाहिए। बेशक, आप तुरंत आंकड़े पेस्ट नहीं कर सकते, क्योंकि आपके पास चयनित महत्वपूर्ण कोशिकाओं का एक गुच्छा है। आपको प्रतीक्षा करना होगा, स्प्रैडशीट की अन्य रिक्त श्रेणी, पेस्ट (Ctrl + V के रूप में) का चयन करना होगा और आंकड़े 6-पंक्ति में 2-स्तंभ श्रेणी में दिखाई देंगे। प्रश्न पूछने वाले ने सुझाव दिया कि वे स्थिर मूल्य होंगे।

मैंने सेमिनार के दौरान सवाल का जवाब देने की कोशिश नहीं की, क्योंकि मैं जानता था कि इसे बंद करना थोड़ा मुश्किल हो सकता है।

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

मुझे पता था कि Application.WorksheetFunction एक्सेल फ़ंक्शन के परिणामों को VBA में वापस करने का एक शानदार तरीका है, लेकिन यह सभी 400+ एक्सेल फ़ंक्शन का समर्थन नहीं करता है। कभी-कभी, यदि VBA में पहले से ही एक समान फ़ंक्शन (LEFT, RIGHT, MID) है, तो Application.WorksheetFunction इस फ़ंक्शन का समर्थन नहीं करेगा। मैंने Alt + F11 के साथ VBA को निकाल दिया, Ctrl + G के साथ तत्काल फलक प्रदर्शित किया, और फिर यह सुनिश्चित करने के लिए कुछ आदेश टाइप किए कि सभी छह स्थिति बार फ़ंक्शन समर्थित थे। सौभाग्य से, सभी छह मूल्यों का मिलान हुआ जो स्टेटस बार में दिखाई दे रहा था।

मैक्रो को छोटा बनाने के लिए, आप Application.WorksheetFunction को एक वैरिएबल पर असाइन कर सकते हैं:

Set WF = Application.WorksheetFunction

फिर, बाद में मैक्रो में, आप केवल Application.SorksheetFunction को बार-बार टाइप करने के बजाय WF.Sum (चयन) को संदर्भित कर सकते हैं।

एक टैब के लिए ASCII कोड क्या है?

मैंने टेक्स्ट स्ट्रिंग का निर्माण शुरू किया। मैंने MyString के लिए MS का एक वैरिएबल चुना।

MS = "Sum:" &

यह वह बिंदु है जहां मुझे एक टैब चरित्र की आवश्यकता थी। मैं कुछ ASCII वर्ण (10 = लाइनफीड, 13 = कैरिज रिटर्न, 32 = स्पेस, 65 = ए, 90 = जेड) जानने के लिए पर्याप्त रूप से तैयार हूं, लेकिन मुझे टैब याद नहीं है। जैसा कि मैं इसे देखने के लिए बिंग के लिए जाने वाला था, मुझे याद आया कि आप अपने कोड में vblf का उपयोग लाइनफीड के लिए कर सकते हैं या गाड़ी के वापसी के लिए अपने कोड में vbcr के लिए, इसलिए मैंने vbtab को निचले मामले में टाइप किया। मैं तब एक्सेल वीबीए को उन शब्दों को भुनाने की अनुमति देने के लिए एक नई पंक्ति में चला गया जो इसे समझ गए। मैं vttab को एक पूंजी लेने की उम्मीद कर रहा था, और निश्चित रूप से पर्याप्त, लाइन पूंजीकृत हो गई थी, यह दर्शाता है कि VBA मुझे एक टैब चरित्र देने जा रहा था।

यदि आप अपने VBA को निचले मामले में टाइप करते हैं, तो जब आप एक नई लाइन पर जाते हैं, तो आपको सभी सही वर्तनी वाले शब्द दिखाई देंगे कि शब्द में कहीं एक कैपिटल लेटर है। नीचे की छवि में, vblf, vbcr, vbtab को vba के लिए जाना जाता है और एक नई रेखा पर जाने के बाद पूंजीकृत हो जाता है। हालाँकि, मैंने जो चीज़ बनाई है, vbampersand, VBA के लिए एक ज्ञात चीज़ नहीं है, इसलिए यह पूंजीकृत नहीं होती है।

इस बिंदु पर, 6 लेबल और 6 मानों को एक लंबी स्ट्रिंग में शामिल करने की बात थी। नीचे दिए गए कोड में याद रखें कि प्रत्येक पंक्ति के अंत में _ का मतलब है कि अगली पंक्ति पर कोड की पंक्ति जारी है।

Sub CopyQuickStatsToClipboard1() Set WF = Application.WorksheetFunction MS = "Average: " & vbTab & WF.Average(Selection) & vbCr _ & "Count: " & vbTab & WF.CountA(Selection) & vbCr _ & "Numerical Count: " & vbTab & WF.Count(Selection) & vbCr _ & "Min: " & vbTab & WF.Min(Selection) & vbCr _ & "Max: " & vbTab & WF.Max(Selection) & vbCr _ & "Sum: " & vbTab & WF.Sum(Selection) & vbCr MsgBox MS End Sub

सभी लेबलों और मूल्यों को एक साथ जोड़ने के बाद, मैं अपने काम की प्रशंसा करना चाहता था, इसलिए मैंने एक MsgBox में परिणाम प्रदर्शित किया। मैंने कोड चलाया, और इसने खूबसूरती से काम किया:

मुझे लगा कि मैं घर से मुक्त हो गया हूं। अगर मैं क्लिपबोर्ड पर सिर्फ एमएस प्राप्त कर सकता हूं, तो मैं पॉडकास्ट 1894 रिकॉर्ड करना शुरू कर सकता हूं। शायद एमएस.कॉपी चाल होगी?

दुर्भाग्य से, यह इतना आसान नहीं था। MS.Copy एक मान्य कोड ऑफ़ कोड नहीं था।

इसलिए, मैंने Google पर जाकर "Excel VBA Copy Variable to Clipboard" की खोज की। शीर्ष परिणामों में से एक संदेश बोर्ड में यह पोस्ट था। उस पोस्ट में, मेरे पुराने दोस्त जुआन पाब्लो और नाटेओ ओपी की मदद करने की कोशिश कर रहे थे। वास्तविक टिप, हालांकि, जहां जुआन पाब्लो ने एक्सेल एमवीपी चिप पियर्सन की साइट से कुछ कोड का उपयोग करने का सुझाव दिया था। मुझे यह पृष्ठ मिला जिसमें बताया गया है कि क्लिपबोर्ड पर चर कैसे प्राप्त करें।

क्लिपबोर्ड में कुछ जोड़ने के लिए, आपको सबसे पहले VBA विंडो के टूल मेनू में जाना होगा और संदर्भ चुनना होगा। आपको शुरू में कुछ संदर्भ डिफ़ॉल्ट रूप से देखने को मिलेंगे। Microsoft प्रपत्र 2.0 लाइब्रेरी की जाँच नहीं की जाएगी। आपको इसे बहुत लंबी सूची में ढूंढना होगा और इसे जोड़ना होगा। सौभाग्य से, मेरे लिए, यह विकल्पों के पहले पृष्ठ पर था, जहां हरे तीर इसे दिखाते हैं। एक बार जब आप संदर्भ के आगे चेकमार्क जोड़ते हैं, तो यह शीर्ष पर चला जाता है।

यदि आप संदर्भ नहीं जोड़ते हैं तो चिप का कोड काम नहीं करेगा, इसलिए उपरोक्त चरण को छोड़ें नहीं!

एक बार जब आप संदर्भ जोड़ लेते हैं, तो चिप के कोड का उपयोग करके मैक्रो समाप्त करें:

Sub CopyQuickStatsToClipboard() Set WF = Application.WorksheetFunction MS = "Average: " & vbTab & WF.Average(Selection) & vbCr _ & "Count: " & vbTab & WF.CountA(Selection) & vbCr _ & "Numerical Count: " & vbTab & WF.Count(Selection) & vbCr _ & "Min: " & vbTab & WF.Min(Selection) & vbCr _ & "Max: " & vbTab & WF.Max(Selection) & vbCr _ & "Sum: " & vbTab & WF.Sum(Selection) & vbCr ' Thanks to Chip Pearson http://www.cpearson.com/excel/Clipboard.aspx Dim DataObj As New MSForms.DataObject DataObj.SetText MS DataObj.PutInClipboard End Sub

पॉडकास्ट रिकॉर्ड करने से पहले, मैंने यह सुनिश्चित करने के लिए एक परीक्षण किया कि यह काम कर रहा है। इतना ज़रूर है, जब मैंने मैक्रो चलाया, तब एक नई रेंज चुनी और Ctrl + V को पेस्ट करने के लिए मारा, क्लिपबोर्ड को 6 पंक्ति x 2 कॉलम रेंज में खाली कर दिया गया।

Whoo-hoo! I prepared the PowerPoint title card for the episode, turn on Camtasia Recorder, and recorded everything above. But… as I was about to show the closing credits, a nagging feeling came over me. This macro was pasting the statistics as static values. What if the underlying data changed? Wouldn't you want the pasted block to update? There was a long pause in the podcast where I considered what to do. Finally, I clicked the Camtasia Pause Recording icon and went to see if I could put a formula inside the MS string and if it would get pasted correctly. Sure enough, it did. I did not even completely finish the macro or do more than one test when I turned the recorder back on and talked about this macro. In the podcast, I theorized that this would never work for non-contiguous selections, but in later testing, it does work. Here is the macro to paste as formulas:

Sub CopyQuickStatsAsFormulas() Set WF = Application.WorksheetFunction MA = Selection.Address MS = "Average: " & vbTab & "=AVERAGE(" & MA & ")" & vbCr _ & "Count: " & vbTab & "=CountA(" & MA & ")" & vbCr _ & "Numerical Count: " & vbTab & "=Count(" & MA & ")" & vbCr _ & "Min: " & vbTab & "=Min(" & MA & ")" & vbCr _ & "Max: " & vbTab & "=Max(" & MA & ")" & vbCr _ & "Sum: " & vbTab & "=Sum(" & MA & ")" & vbCr _ ' Thanks to Chip Pearson http://www.cpearson.com/excel/Clipboard.aspx Dim DataObj As New MSForms.DataObject DataObj.SetText MS DataObj.PutInClipboard End Sub

After posting the video, regular viewer Mike Fliss asked is there is a way to build the formulas that would constantly update to show the statistics for whatever range is selected. This would require a Worksheet_SelectionChange macro that would constantly update a named range to match the selection. While this is a cool bit of trickery, it forces a macro to run every time you move the cell pointer, and that is going to constantly clear the UnDo stack. So, if you use this macro, it has to be added to every worksheet code pane where you want it to work, and you will have to live without Undo on those worksheets.

First, from Excel, Right-Click on a sheet tab and choose View Code. Then, paste this code in.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Selection.Name = "SelectedData" End Sub

वापस एक्सेल पर जाएँ। एक नया सेल चुनें और सूत्र टाइप करें =SUM(SelectedData)। आपको शुरू में एक परिपत्र संदर्भ मिलेगा। लेकिन, फिर संख्यात्मक कोशिकाओं की एक और श्रेणी और आपके द्वारा बनाए गए फॉर्मूले का कुल अद्यतन चुनें।

एक नई श्रेणी और सूत्र अपडेट चुनें:

मेरे लिए, यहाँ महान खोज यह थी कि क्लिपबोर्ड में VBA में एक चर की प्रतिलिपि कैसे बनाई जाए।

यदि आप कार्यपुस्तिका के साथ प्रयोग करना चाहते हैं, तो आप यहां से ज़िप्ड संस्करण डाउनलोड कर सकते हैं।

दिलचस्प लेख...