समझिए
1. Range — पते से
ws.Range("A1").Value = "Name"
ws.Range("A1:E1").Font.Bold = True
ws.Range("A:A").ColumnWidth = 20
जब पता तय हो तब अच्छा।
2. Cells — रो और कॉलम नंबर से
ws.Cells(2, 1).Value ' row 2, column 1 = A2
ws.Cells(2, "B").Value ' column letter works too
लूप के अंदर बिल्कुल सही, क्योंकि रो और कॉलम वेरिएबल हो सकते हैं:
ws.Cells(i, 3).Value = ws.Cells(i, 2).Value * 1.18
दोनों को मिलाकर रेंज बनाएँ:
ws.Range(ws.Cells(2, 1), ws.Cells(lastRow, 5)) ' A2 to E(lastRow)
3. Offset — किसी सेल से खिसकना
ws.Range("A1").Offset(1, 2) ' 1 row down, 2 columns right = C2
नेगेटिव नंबर ऊपर या बाएँ ले जाते हैं।
4. Resize — आकार बदलना
ws.Range("A2").Resize(10, 5) ' 10 rows × 5 columns starting at A2 = A2:E11
5. आख़िरी रो ढूँढना — .End(xlUp)
डेटा रोज़ बढ़ता है, इसलिए कभी A2:A500 फ़िक्स न लिखें। यह इस्तेमाल करें:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
यह कैसे काम करता है: कॉलम A के बिल्कुल नीचे वाले सेल (रो 1,048,576) से शुरू करो, फिर वही करो जो Ctrl + ↑ करता है — ऊपर आख़िरी भरे सेल पर कूदो। .Row उसका रो नंबर देता है।
ऐसा कॉलम चुनें जो हमेशा भरा रहे (जैसे Date या Invoice No)। आख़िर में खाली सेल वाले कॉलम से छोटा नंबर मिलता है।
नया रिकॉर्ड जोड़ने के लिए अगली खाली रो:
nextRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
रो 1 का आख़िरी कॉलम:
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
6. .End(xlDown) क्यों नहीं?
Range("A1").End(xlDown) पहले खाली सेल पर रुक जाता है। बीच में एक खाली रो और मैक्रो उसके नीचे का सब छोड़ देगा। अगर A1 के नीचे कॉलम A पूरा खाली है, तो यह रो 1,048,576 पर कूद जाता है। नीचे से xlUp दोनों समस्याओं से बचाता है।
7. CurrentRegion और UsedRange
ws.Range("A1").CurrentRegion ' block around A1 until a fully empty row/column
ws.UsedRange ' everything Excel thinks was ever used
साफ़ टेबल के लिए CurrentRegion काम का है। UsedRange में पुराने फ़ॉर्मेट वाले सेल भी आ सकते हैं, इसलिए आख़िरी रो के लिए उस पर भरोसा न करें।
8. उदाहरण: नीचे नई एंट्री जोड़ना
Sub AddEntry()
Dim ws As Worksheet, nextRow As Long
Set ws = ThisWorkbook.Worksheets("Data")
nextRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
ws.Cells(nextRow, 1).Value = Date
ws.Cells(nextRow, 2).Value = "Rahul Sharma"
ws.Cells(nextRow, 3).Value = 25000
End Sub
आम गलतियाँ
आख़िरी रो फ़िक्स लिखना। .End(xlUp) के लिए खाली जगहों वाला कॉलम चुनना। कई शीट पर काम करते समय शीट के बिना Rows.Count (ws.Rows.Count की जगह) लिखना। Cells(row, column) का क्रम उलट देना।