खोज…
वाक्य - विन्यास
- सेट - ऑपरेटर किसी ऑब्जेक्ट का संदर्भ सेट करता था, जैसे कि रेंज
- प्रत्येक के लिए - ऑपरेटर एक संग्रह में प्रत्येक आइटम के माध्यम से लूप करता था
टिप्पणियों
ध्यान दें कि चर नाम r
, cell
और अन्य का नाम हालांकि आपको पसंद किया जा सकता है, लेकिन इसे उचित रूप से नामित किया जाना चाहिए ताकि कोड आपके और अन्य लोगों के लिए समझना आसान हो।
एक सीमा बनाना
एक सीमा को उसी तरह नहीं बनाया या आबाद किया जा सकता है जिस तरह से एक स्ट्रिंग होती है:
Sub RangeTest()
Dim s As String
Dim r As Range 'Specific Type of Object, with members like Address, WrapText, AutoFill, etc.
' This is how we fill a String:
s = "Hello World!"
' But we cannot do this for a Range:
r = Range("A1") '//Run. Err.: 91 Object variable or With block variable not set//
' We have to use the Object approach, using keyword Set:
Set r = Range("A1")
End Sub
अपने संदर्भों को योग्य बनाने के लिए यह सबसे अच्छा अभ्यास माना जाता है, इसलिए अब से हम यहां उसी दृष्टिकोण का उपयोग करेंगे।
MSDN पर ऑब्जेक्ट वेरिएबल्स बनाने (जैसे रेंज) के बारे में अधिक। MSDN पर सेट स्टेटमेंट के बारे में अधिक।
एक ही श्रेणी बनाने के विभिन्न तरीके हैं:
Sub SetRangeVariable()
Dim ws As Worksheet
Dim r As Range
Set ws = ThisWorkbook.Worksheets(1) ' The first Worksheet in Workbook with this code in it
' These are all equivalent:
Set r = ws.Range("A2")
Set r = ws.Range("A" & 2)
Set r = ws.Cells(2, 1) ' The cell in row number 2, column number 1
Set r = ws.[A2] 'Shorthand notation of Range.
Set r = Range("NamedRangeInA2") 'If the cell A2 is named NamedRangeInA2. Note, that this is Sheet independent.
Set r = ws.Range("A1").Offset(1, 0) ' The cell that is 1 row and 0 columns away from A1
Set r = ws.Range("A1").Cells(2,1) ' Similar to Offset. You can "go outside" the original Range.
Set r = ws.Range("A1:A5").Cells(2) 'Second cell in bigger Range.
Set r = ws.Range("A1:A5").Item(2) 'Second cell in bigger Range.
Set r = ws.Range("A1:A5")(2) 'Second cell in bigger Range.
End Sub
उदाहरण में ध्यान दें कि सेल (2, 1) रेंज ("ए 2") के बराबर है। ऐसा इसलिए होता है क्योंकि सेल एक रेंज ऑब्जेक्ट लौटाते हैं।
कुछ स्रोत: रेंज के भीतर चिप पियर्सन-सेल ; एमएसडीएन-रेंज ऑब्जेक्ट ; जॉन वॉकेनबैक-रेफरिंग टू रेंज्स टू योर वीबीए कोड ।
यह भी ध्यान दें कि किसी भी संख्या में जहां सीमा की घोषणा में एक संख्या का उपयोग किया जाता है, और संख्या स्वयं उद्धरण चिह्नों से बाहर होती है, जैसे कि श्रेणी ("ए" और 2), आप उस चर के लिए उस नंबर को स्वैप कर सकते हैं जिसमें एक शामिल है पूर्णांक / लंबा है। उदाहरण के लिए:
Sub RangeIteration()
Dim wb As Workbook, ws As Worksheet
Dim r As Range
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
For i = 1 To 10
Set r = ws.Range("A" & i)
' When i = 1, the result will be Range("A1")
' When i = 2, the result will be Range("A2")
' etc.
' Proof:
Debug.Print r.Address
Next i
End Sub
यदि आप डबल छोरों का उपयोग कर रहे हैं, तो सेल बेहतर है:
Sub RangeIteration2()
Dim wb As Workbook, ws As Worksheet
Dim r As Range
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
For i = 1 To 10
For j = 1 To 10
Set r = ws.Cells(i, j)
' When i = 1 and j = 1, the result will be Range("A1")
' When i = 2 and j = 1, the result will be Range("A2")
' When i = 1 and j = 2, the result will be Range("B1")
' etc.
' Proof:
Debug.Print r.Address
Next j
Next i
End Sub
एकल कक्ष को संदर्भित करने के तरीके
वर्तमान एक्सेल वर्कशीट पर किसी एकल कक्ष को संदर्भित करने का सबसे सरल तरीका है, इसके संदर्भ में वर्ग कोष्ठक में A1 फॉर्म को संलग्न करना है:
[a3] = "Hello!"
ध्यान दें कि वर्ग कोष्ठक Application
वस्तु के Evaluate
विधि के लिए सिर्फ सुविधाजनक संश्लिष्ट चीनी हैं , इसलिए तकनीकी रूप से, यह निम्नलिखित कोड के समान है:
Application.Evaluate("a3") = "Hello!"
आप Cells
विधि को भी कॉल कर सकते हैं जो एक पंक्ति और एक कॉलम लेता है और सेल संदर्भ देता है।
Cells(3, 1).Formula = "=A1+A2"
याद रखें कि जब भी आप VBA से एक्सेल में एक पंक्ति और एक कॉलम पास करते हैं, तो पंक्ति हमेशा पहले होती है, उसके बाद कॉलम, जो भ्रामक है क्योंकि यह आम A1
नोटेशन के विपरीत है जहां कॉलम पहले दिखाई देता है।
इन दोनों उदाहरणों में, हमने एक वर्कशीट निर्दिष्ट नहीं की है, इसलिए एक्सेल सक्रिय शीट (उपयोगकर्ता इंटरफ़ेस में सामने की शीट) का उपयोग करेगा। आप सक्रिय पत्रक को स्पष्ट रूप से निर्दिष्ट कर सकते हैं:
ActiveSheet.Cells(3, 1).Formula = "=SUM(A1:A2)"
या आप एक विशेष शीट का नाम प्रदान कर सकते हैं:
Sheets("Sheet2").Cells(3, 1).Formula = "=SUM(A1:A2)"
विभिन्न प्रकार की विधियाँ हैं जिनका उपयोग एक सीमा से दूसरी श्रेणी में लाने के लिए किया जा सकता है। उदाहरण के लिए, Rows
विधि का उपयोग किसी भी श्रेणी की व्यक्तिगत पंक्तियों को प्राप्त करने के लिए किया जा सकता है, और Cells
विधि का उपयोग किसी पंक्ति या स्तंभ की व्यक्तिगत कोशिकाओं को प्राप्त करने के लिए किया जा सकता है, इसलिए निम्न कोड सेल C1 को संदर्भित करता है:
ActiveSheet.Rows(1).Cells(3).Formula = "hi!"
एक चर में एक सेल के संदर्भ को सहेजना
एक चर में एक सेल के संदर्भ को बचाने के लिए, आपको उदाहरण के लिए, Set
सिंटैक्स का उपयोग करना होगा:
Dim R as Range
Set R = ActiveSheet.Cells(3, 1)
बाद में...
R.Font.Color = RGB(255, 0, 0)
Set
कीवर्ड की आवश्यकता क्यों है? Set
विजुअल बेसिक को बताता है कि दायीं ओर का मान =
एक वस्तु है।
ऑफसेट संपत्ति
- ऑफसेट (पंक्तियाँ, कॉलम) - ऑपरेटर वर्तमान सेल से दूसरे बिंदु को सांख्यिकीय रूप से संदर्भित करता था। अक्सर छोरों में उपयोग किया जाता है। यह समझा जाना चाहिए कि पंक्तियों के खंड में सकारात्मक संख्याएं सही चलती हैं, जहां नकारात्मक बाईं ओर चलती हैं। कॉलम सेक्शन के साथ सकारात्मकता कम होती जाती है और नकारात्मकता बढ़ती जाती है।
अर्थात
Private Sub this()
ThisWorkbook.Sheets("Sheet1").Range("A1").Offset(1, 1).Select
ThisWorkbook.Sheets("Sheet1").Range("A1").Offset(1, 1).Value = "New Value"
ActiveCell.Offset(-1, -1).Value = ActiveCell.Value
ActiveCell.Value = vbNullString
End Sub
यह कोड B2 को चुनता है, वहां एक नया स्ट्रिंग डालता है, फिर उस स्ट्रिंग को A1 से आगे बढ़ाता है।
सीमाओं को स्थानांतरित कैसे करें (क्षैतिज लंबवत और इसके विपरीत)
Sub TransposeRangeValues()
Dim TmpArray() As Variant, FromRange as Range, ToRange as Range
set FromRange = Sheets("Sheet1").Range("a1:a12") 'Worksheets(1).Range("a1:p1")
set ToRange = ThisWorkbook.Sheets("Sheet1").Range("a1") 'ThisWorkbook.Sheets("Sheet1").Range("a1")
TmpArray = Application.Transpose(FromRange.Value)
FromRange.Clear
ToRange.Resize(FromRange.Columns.Count,FromRange.Rows.Count).Value2 = TmpArray
End Sub
नोट: कॉपी / पेस्टस्पेशल में एक पेस्ट ट्रांसपोज़ विकल्प भी होता है जो ट्रांसपोज़्ड सेल्स के फॉर्मूले को अपडेट करता है।