समझिए
1. अभ्यास शीट "Data"
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Qty | Rate | Status |
| 2 | Laptop | 12 | 55000 | |
| 3 | Mobile | 3 | 18000 | |
| 4 | Chair | 0 | 4500 | |
| 5 | Desk | 8 | 12000 |
2. For … Next — गिनती वाला लूप
Dim i As Long
For i = 2 To lastRow
ws.Cells(i, 5).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
Next i
i की वैल्यू 2, 3, 4 … lastRow होती जाती है। अंदर Cells(i, …) मौजूदा रो की ओर इशारा करता है।
Step छलांग बदलता है: For i = 2 To 100 Step 2 (एक छोड़कर एक रो), For i = lastRow To 2 Step -1 (उल्टा)।
3. If … ElseIf … Else
If ws.Cells(i, 2).Value = 0 Then
ws.Cells(i, 4).Value = "Out of stock"
ElseIf ws.Cells(i, 2).Value < 5 Then
ws.Cells(i, 4).Value = "Reorder"
Else
ws.Cells(i, 4).Value = "OK"
End If
शर्तें And, Or, Not से जोड़ें — Excel के AND/OR की तरह।
4. पूरा उदाहरण
Option Explicit
Sub StockStatus()
Dim ws As Worksheet, lastRow As Long, i As Long, qty As Long
Set ws = ThisWorkbook.Worksheets("Data")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
qty = ws.Cells(i, 2).Value
If qty = 0 Then
ws.Cells(i, 4).Value = "Out of stock"
ws.Cells(i, 4).Interior.Color = RGB(255, 199, 206)
ElseIf qty < 5 Then
ws.Cells(i, 4).Value = "Reorder"
ws.Cells(i, 4).Interior.Color = RGB(255, 235, 156)
Else
ws.Cells(i, 4).Value = "OK"
ws.Cells(i, 4).Interior.ColorIndex = xlNone
End If
Next i
End Sub
नतीजा: OK, Reorder, Out of stock, OK।
5. For Each — ऑब्जेक्ट पर लूप
गिनती की ज़रूरत नहीं; रेंज के हर सेल या हर शीट पर लूप:
Dim c As Range
For Each c In ws.Range("B2:B" & lastRow)
If c.Value < 5 Then c.Font.Color = vbRed
Next c
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
Debug.Print sh.Name
Next sh
c.Offset(0, 2) उसी रो के दूसरे कॉलम तक पहुँचता है।
6. रो डिलीट करना — उल्टा लूप चलाएँ
रो 4 डिलीट करने पर रो 5 ऊपर रो 4 में आ जाती है, इसलिए सीधा लूप उसे छोड़ देता है। हमेशा नीचे से ऊपर डिलीट करें:
For i = lastRow To 2 Step -1
If ws.Cells(i, 2).Value = 0 Then ws.Rows(i).Delete
Next i
7. Exit For
जो चाहिए वह मिल जाए तो जल्दी रुकें:
For i = 2 To lastRow
If ws.Cells(i, 1).Value = "Desk" Then
MsgBox "Desk found in row " & i
Exit For
End If
Next i
8. With — ऑब्जेक्ट दोहराना बंद करें
With ws.Range("A1:D1")
.Font.Bold = True
.Font.Size = 12
.Interior.Color = RGB(31, 78, 120)
.Font.Color = vbWhite
.HorizontalAlignment = xlCenter
End With
. से शुरू होने वाली हर लाइन With वाले ऑब्जेक्ट की बात करती है। छोटा और थोड़ा तेज़।
आम गलतियाँ
रो डिलीट करते समय सीधा लूप। Next i या End If भूल जाना (compile error)। बहुत बड़ी रेंज पर सेल-दर-सेल लूप — कुछ हज़ार रो तक ठीक; उससे ज़्यादा के लिए लेसन 7 की array तरकीब देखें।