Excel · मराठी आवृत्ती
12.10 For, For Each आणि Do loops
या page मध्ये
एकच काम अनेक rowsवर करायला loop वापरतो. For counterवर, For Each objectsवर आणि Do conditionवर चालतो.
Sub LoopExamples()
Dim ws As Worksheet
Dim r As Long
Dim cell As Range
Dim total As Double
Set ws = ThisWorkbook.Worksheets("Orders")
' 1) For...Next with a counter: mark late deliveries
For r = 2 To 11
If ws.Cells(r, 8).Value > 15 Then
ws.Cells(r, 10).Value = "Late"
Else
ws.Cells(r, 10).Value = "On time"
End If
Next r
' 2) For Each over cells: add up delivered amounts
For Each cell In ws.Range("G2:G11")
If cell.Offset(0, 2).Value = "Delivered" Then total = total + cell.Value
Next cell
Debug.Print "Delivered sales: "; total
' 3) Do While: move down until an empty cell
r = 2
Do While ws.Cells(r, 1).Value <> ""
r = r + 1
Loop
Debug.Print "First empty row: "; r
End Sub
Code समजून घेऊ
- For r=2 To 11 प्रत्येक rowच्या Hमधले Mins पाहून Jमध्ये Late/On time लिहितो. J आधी reserved/रिकामा आहे का पाहा.
- For Each G2:G11मधली Amount घेऊन दोन columns उजवीकडचा Status Delivered असेल तर total वाढवतो.
- Do While A columnमध्ये पहिला blank येईपर्यंत r वाढवतो. हा first blank शोधतो; last data row नाही.
स्वच्छ mini sampleमध्ये rows 6,8,11 Late; Delivered sales 2215; first blank row 12. Invalid Mins, errors किंवा sourceमधल्या gapsसाठी हा छोटा example अतिरिक्त validationशिवाय वापरू नका.
इतर forms: For r = lastRow To 2 Step -1, Do Until ... Loop, Exit For, Exit Do. Do loopचा counter वाढला नाही तर infinite loop होऊ शकतो; Esc/Ctrl + Breakने interrupt करता येऊ शकतं.
Practice
Delivery-fee slabs वापरून नवीन reserved columnमध्ये fee लिहा. वेगळ्या disposable copyवर Cancelled rows delete करणारा backward loop करा; आधी expected deletion count दाखवा आणि नंतर remaining totals तपासा.