fx Macro Recorder & VBA Basics
ENहिन्दी

Range, Cells, Offset, .End(xlUp) — आख़िरी रो निकालना

⏱ 13 min

आप क्या सीखेंगे

  • Range — पते से
  • Cells — रो और कॉलम नंबर से
  • Offset — किसी सेल से खिसकना

समझिए

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) का क्रम उलट देना।

अभ्यास

mediumA1:E? में डेटा वाली शीट पर ऐसा मैक्रो लिखें जो (Debug.Print से) आख़िरी रो, आख़िरी कॉलम, और Range(Cells(...), Cells(...)) से बनी डेटा रेंज का पता दिखाए। डेटा की 3 रो और जोड़कर दोबारा चलाएँ और पक्का करें कि यह खुद बदल जाता है।
Data sheet के With block में lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row तथा lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column लें। .Range(.Cells(1, 1), .Cells(lastRow, lastCol)).Address print करें। Starter Data में row 31, column 5 हैं; तीन भरी rows जोड़ने पर row 34 होगी। A column भरा होना चाहिए।

प्रश्नोत्तरी

Cells(3, 4) कौन-सा सेल है?
D3
Range("B2").Offset(-1, 1)?
C1
.End(xlDown) की जगह नीचे से .End(xlUp) क्यों?
बीच के खाली सेल इसे नहीं तोड़ते
Range, Cells, Offset, .End(xlUp) — आख़िरी रो निकालना · हिंदी | ExcelWalaa