VBA ನಲ್ಲಿ ಕುಣಿಕೆಗಳು

VBA ಪ್ರೋಗ್ರಾಂ ಒಂದೇ ರೀತಿಯ ಕ್ರಿಯೆಗಳನ್ನು ಸತತವಾಗಿ ಹಲವಾರು ಬಾರಿ ನಿರ್ವಹಿಸಲು ಅಗತ್ಯವಿರುವಾಗ ಸಂದರ್ಭಗಳಿವೆ (ಅಂದರೆ, ಅದೇ ಕೋಡ್ ಬ್ಲಾಕ್ ಅನ್ನು ಹಲವಾರು ಬಾರಿ ಪುನರಾವರ್ತಿಸಿ). ಇದನ್ನು ವಿಬಿಎ ಲೂಪ್ ಬಳಸಿ ಮಾಡಬಹುದು.

VBA ಲೂಪ್‌ಗಳು ಸೇರಿವೆ:

ಮುಂದೆ, ನಾವು ಈ ಪ್ರತಿಯೊಂದು ಚಕ್ರಗಳನ್ನು ಹತ್ತಿರದಿಂದ ನೋಡೋಣ.

ವಿಷುಯಲ್ ಬೇಸಿಕ್‌ನಲ್ಲಿ ಲೂಪ್ ಆಪರೇಟರ್‌ಗಾಗಿ

ಲೂಪ್ ಆಪರೇಟರ್ನ ರಚನೆ ನಮ್ಮ ವಿಷುಯಲ್ ಬೇಸಿಕ್‌ನಲ್ಲಿ ಎರಡು ರೂಪಗಳಲ್ಲಿ ಒಂದನ್ನು ಆಯೋಜಿಸಬಹುದು: ಲೂಪ್‌ನಂತೆ ಫಾರ್… ಮುಂದೆ ಅಥವಾ ಲೂಪ್ ಆಗಿ ಪ್ರತಿಯೊಂದಕ್ಕೂ.

ಸೈಕಲ್ "ಫಾರ್ ... ಮುಂದೆ"

ಸೈಕಲ್ ಫಾರ್… ಮುಂದೆ ನಿರ್ದಿಷ್ಟ ಶ್ರೇಣಿಯಿಂದ ಅನುಕ್ರಮವಾಗಿ ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ ವೇರಿಯಬಲ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ವೇರಿಯೇಬಲ್ನ ಮೌಲ್ಯದ ಪ್ರತಿ ಬದಲಾವಣೆಯೊಂದಿಗೆ, ಚಕ್ರದ ದೇಹದಲ್ಲಿ ಸುತ್ತುವರಿದ ಕ್ರಿಯೆಗಳನ್ನು ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಸರಳ ಉದಾಹರಣೆಯಿಂದ ಇದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಸುಲಭ:

i = 1 ರಿಂದ 10 ಒಟ್ಟು = ಒಟ್ಟು + iArray(i) ಮುಂದೆ i

ಈ ಸರಳ ಲೂಪ್ನಲ್ಲಿ ಫಾರ್… ಮುಂದೆ ವೇರಿಯಬಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ i, ಇದು ಅನುಕ್ರಮವಾಗಿ 1, 2, 3, … 10 ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಈ ಪ್ರತಿಯೊಂದು ಮೌಲ್ಯಗಳಿಗೆ, ಲೂಪ್‌ನೊಳಗಿನ VBA ಕೋಡ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ. ಹೀಗಾಗಿ, ಈ ಲೂಪ್ ರಚನೆಯ ಅಂಶಗಳನ್ನು ಒಟ್ಟುಗೂಡಿಸುತ್ತದೆ. iArray ವೇರಿಯಬಲ್ ನಲ್ಲಿ ಒಟ್ಟು.

ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ವೇರಿಯಬಲ್ ಅನ್ನು ಹೆಚ್ಚಿಸಲು ಲೂಪ್ ಹೆಚ್ಚಳವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ i 1 ರಿಂದ 10 ರವರೆಗೆ, ಡೀಫಾಲ್ಟ್ ಹೆಚ್ಚಳವಾಗಿದೆ 1… ಆದಾಗ್ಯೂ, ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಲೂಪ್‌ಗಾಗಿ ವಿಭಿನ್ನ ಇನ್‌ಕ್ರಿಮೆಂಟ್ ಮೌಲ್ಯಗಳನ್ನು ಬಳಸುವುದು ಅವಶ್ಯಕ. ಕೀವರ್ಡ್ ಬಳಸಿ ಇದನ್ನು ಮಾಡಬಹುದು ಹಂತಕೆಳಗಿನ ಸರಳ ಉದಾಹರಣೆಯಲ್ಲಿ ತೋರಿಸಿರುವಂತೆ.

d = 0 ರಿಂದ 10 ಹಂತ 0.1 dTotal = dTotal + d ಮುಂದಿನ d

ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಏರಿಕೆ ಹಂತವನ್ನು ಸಮಾನವಾಗಿ ಹೊಂದಿಸಲಾಗಿದೆ 0.1, ನಂತರ ವೇರಿಯಬಲ್ dTotal ಚಕ್ರದ ಪ್ರತಿ ಪುನರಾವರ್ತನೆಗೆ 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0 ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.

VBA ನಲ್ಲಿ ಲೂಪ್ ಹಂತವನ್ನು ನಿರ್ಧರಿಸಲು, ನೀವು ನಕಾರಾತ್ಮಕ ಮೌಲ್ಯವನ್ನು ಬಳಸಬಹುದು, ಉದಾಹರಣೆಗೆ, ಈ ರೀತಿ:

i = 10 ರಿಂದ 1 ಹಂತ -1 iArray(i) = i Next i

ಇಲ್ಲಿ ಇಂಕ್ರಿಮೆಂಟ್ ಆಗಿದೆ -1, ಆದ್ದರಿಂದ ವೇರಿಯಬಲ್ i ಚಕ್ರದ ಪ್ರತಿ ಪುನರಾವರ್ತನೆಯೊಂದಿಗೆ 10, 9, 8, ... 1 ಮೌಲ್ಯಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.

ಲೂಪ್ "ಪ್ರತಿಯೊಂದಕ್ಕೂ"

ಸೈಕಲ್ ಪ್ರತಿಯೊಂದಕ್ಕೂ ಒಂದು ಚಕ್ರವನ್ನು ಹೋಲುತ್ತದೆ ಫಾರ್… ಮುಂದೆ, ಆದರೆ ಕೌಂಟರ್ ವೇರಿಯೇಬಲ್, ಲೂಪ್‌ಗಾಗಿ ಮೌಲ್ಯಗಳ ಅನುಕ್ರಮದ ಮೇಲೆ ಪುನರಾವರ್ತಿಸುವ ಬದಲು ಪ್ರತಿಯೊಂದಕ್ಕೂ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ವಸ್ತುಗಳ ಗುಂಪಿನಲ್ಲಿ ಪ್ರತಿ ವಸ್ತುವಿಗಾಗಿ ಕ್ರಿಯೆಗಳ ಗುಂಪನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಕೆಳಗಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಲೂಪ್ ಬಳಸಿ ಪ್ರತಿಯೊಂದಕ್ಕೂ ಪ್ರಸ್ತುತ ಎಕ್ಸೆಲ್ ವರ್ಕ್‌ಬುಕ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಹಾಳೆಗಳನ್ನು ಎಣಿಸುತ್ತದೆ:

ವರ್ಕ್‌ಶೀಟ್‌ಗಳಲ್ಲಿ ಪ್ರತಿ wಶೀಟ್‌ಗೆ ವರ್ಕ್‌ಶೀಟ್‌ನಂತೆ ಡಿಮ್ wSheet MsgBox "ನಾಯಿಡನ್ ಪಟ್ಟಿ: " & wSheet.Name ಮುಂದಿನ wSheet

ಲೂಪ್ ಅಡಚಣೆ ಹೇಳಿಕೆ "ನಿರ್ಗಮಿಸಿ"

ಆಪರೇಟರ್ ಗಾಗಿ ನಿರ್ಗಮಿಸಿ ಚಕ್ರವನ್ನು ಅಡ್ಡಿಪಡಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಕೋಡ್‌ನಲ್ಲಿ ಈ ಹೇಳಿಕೆಯು ಎದುರಾದ ತಕ್ಷಣ, ಪ್ರೋಗ್ರಾಂ ಲೂಪ್‌ನ ಮರಣದಂಡನೆಯನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಈ ಲೂಪ್‌ನ ನಂತರ ತಕ್ಷಣವೇ ಕೋಡ್‌ನಲ್ಲಿರುವ ಹೇಳಿಕೆಗಳ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಗೆ ಮುಂದುವರಿಯುತ್ತದೆ. ಇದನ್ನು ಬಳಸಬಹುದು, ಉದಾಹರಣೆಗೆ, ಒಂದು ಶ್ರೇಣಿಯಲ್ಲಿ ನಿರ್ದಿಷ್ಟ ಮೌಲ್ಯವನ್ನು ಹುಡುಕಲು. ಇದನ್ನು ಮಾಡಲು, ಲೂಪ್ ಬಳಸಿ, ರಚನೆಯ ಪ್ರತಿಯೊಂದು ಅಂಶವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತದೆ. ಅಗತ್ಯವಿರುವ ಅಂಶವು ಕಂಡುಬಂದ ತಕ್ಷಣ, ಉಳಿದವುಗಳ ಮೂಲಕ ನೋಡಬೇಕಾದ ಅಗತ್ಯವಿಲ್ಲ - ಚಕ್ರವು ಅಡ್ಡಿಪಡಿಸುತ್ತದೆ.

ಆಪರೇಟರ್ ಅಪ್ಲಿಕೇಶನ್ ಗಾಗಿ ನಿರ್ಗಮಿಸಿ ಕೆಳಗಿನ ಉದಾಹರಣೆಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಲಾಗಿದೆ. ಇಲ್ಲಿ ಲೂಪ್ 100 ಕ್ಕೂ ಹೆಚ್ಚು ರಚನೆಯ ನಮೂದುಗಳನ್ನು ಪುನರಾವರ್ತಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರತಿಯೊಂದನ್ನು ವೇರಿಯೇಬಲ್‌ನ ಮೌಲ್ಯದೊಂದಿಗೆ ಹೋಲಿಸುತ್ತದೆ ಡಿವಾಲ್… ಹೊಂದಾಣಿಕೆ ಕಂಡುಬಂದರೆ, ನಂತರ ಲೂಪ್ ಅನ್ನು ಕೊನೆಗೊಳಿಸಲಾಗುತ್ತದೆ:

i = 1 ರಿಂದ 100 ಕ್ಕೆ dValues(i) = dVal ನಂತರ IndexVal = i ಅಂತ್ಯಕ್ಕೆ ನಿರ್ಗಮಿಸಿ

ವಿಷುಯಲ್ ಬೇಸಿಕ್‌ನಲ್ಲಿ ಡು ವೈಲ್ ಲೂಪ್

ಸೈಕಲ್ ಇರುವಾಗಲೇ ಮಾಡಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಸ್ಥಿತಿಯನ್ನು ಪೂರೈಸುವವರೆಗೆ ಕೋಡ್‌ನ ಬ್ಲಾಕ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ. ಕೆಳಗಿನವು ಒಂದು ಕಾರ್ಯವಿಧಾನದ ಉದಾಹರಣೆಯಾಗಿದೆ ಉಪ, ಇದರಲ್ಲಿ ಲೂಪ್ ಬಳಸಿ ಇರುವಾಗಲೇ ಮಾಡಿ 1000 ಮೀರದ ಫಿಬೊನಾಕಿ ಸಂಖ್ಯೆಗಳನ್ನು ಅನುಕ್ರಮವಾಗಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ:

'ಉಪ ಕಾರ್ಯವಿಧಾನದ ಔಟ್‌ಪುಟ್‌ಗಳು 1000 ಸಬ್ ಫೈಬೊನಾಕಿ() ಡಿಮ್ ಐ ಆಸ್ ಇಂಟೀಜರ್' ಅನುಕ್ರಮದಲ್ಲಿನ ಅಂಶದ ಸ್ಥಾನವನ್ನು ಸೂಚಿಸಲು ಡಿಮ್ ಐ ಫೈಬ್ ಇಂಟೀಜರ್ 'ಕೌಂಟರ್ ಡಿಮ್ ಐಫೈಬ್ ಆಸ್ ಇಂಟೀಜರ್' ಅನುಕ್ರಮದ ಪ್ರಸ್ತುತ ಮೌಲ್ಯವನ್ನು ಡಿಮ್ ಐಫೈಬ್_ನೆಕ್ಸ್ಟ್ ಅಸ್ ಇಂಟೀಜರ್‌ನಂತೆ ಸಂಗ್ರಹಿಸುತ್ತದೆ 'ಮುಂದಿನ ಮೌಲ್ಯವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ ಅನುಕ್ರಮದ ಡಿಮ್ iStep As Integer 'ಮುಂದಿನ ಇನ್‌ಕ್ರಿಮೆಂಟ್‌ನ ಗಾತ್ರವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ 'ಇನಿಶಿಯಲೈಸ್ ವೇರಿಯೇಬಲ್‌ಗಳು i ಮತ್ತು iFib_Next i = 1 iFib_Next = 0 'Do while ಲೂಪ್ 'ಪ್ರಸ್ತುತ ಫಿಬೊನಾಕಿ ಸಂಖ್ಯೆ 1000 ಕ್ಕಿಂತ ಹೆಚ್ಚಿದ್ದರೆ 1000 ಕ್ಕಿಂತ ಹೆಚ್ಚಿದ್ದರೆ ಲೂಪ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ 1 ನಂತರ 'ಮೊದಲ ಅಂಶಕ್ಕೆ ವಿಶೇಷ ಪ್ರಕರಣ iStep = 1 iFib = 0 ಬೇರೆ' 'ಅನುಕ್ರಮದ ಪ್ರಸ್ತುತ ಮೌಲ್ಯವನ್ನು ಓವರ್‌ರೈಟ್ ಮಾಡುವ ಮೊದಲು ಮುಂದಿನ ಇನ್‌ಕ್ರಿಮೆಂಟ್‌ನ ಗಾತ್ರವನ್ನು ಉಳಿಸಿ iStep = iFib iFib = iFib_Next End ವೇಳೆ 'ಪ್ರಸ್ತುತ ಫಿಬೊನಾಕಿ ಸಂಖ್ಯೆಯನ್ನು ಕಾಲಮ್ A ನಲ್ಲಿ ಮುದ್ರಿಸಿ ಸಕ್ರಿಯ ವರ್ಕ್‌ಶೀಟ್ 'ಇಂಡೆಕ್ಸ್ i ಸೆಲ್‌ಗಳ ಸಾಲಿನಲ್ಲಿ (i , 1).ಮೌಲ್ಯ = iFib 'ಮುಂದಿನ ಫೈಬೊನಾಕಿ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ ಮತ್ತು ಅಂಶ ಸ್ಥಾನದ ಸೂಚಿಯನ್ನು 1 iFib_Next = iFib + iStep i = i + 1 ಲೂಪ್ ಎಂಡ್ ಸಬ್ ಹೆಚ್ಚಿಸಿ

ನೀಡಿರುವ ಉದಾಹರಣೆಯಲ್ಲಿ, ಸ್ಥಿತಿ iFib_Next < 1000 ಲೂಪ್ನ ಆರಂಭದಲ್ಲಿ ಪರಿಶೀಲಿಸಲಾಗಿದೆ. ಆದ್ದರಿಂದ, ಮೊದಲ ಮೌಲ್ಯವಾಗಿದ್ದರೆ iFib_ಮುಂದೆ 1000 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಇದ್ದರೆ, ನಂತರ ಲೂಪ್ ಅನ್ನು ಎಂದಿಗೂ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ.

ಲೂಪ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಇನ್ನೊಂದು ಮಾರ್ಗ ಇರುವಾಗಲೇ ಮಾಡಿ - ಸ್ಥಿತಿಯನ್ನು ಆರಂಭದಲ್ಲಿ ಅಲ್ಲ, ಆದರೆ ಲೂಪ್ನ ಕೊನೆಯಲ್ಲಿ ಇರಿಸಿ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಷರತ್ತುಗಳನ್ನು ಪೂರೈಸಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಲೆಕ್ಕಿಸದೆಯೇ ಲೂಪ್ ಅನ್ನು ಒಮ್ಮೆಯಾದರೂ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ.

ಕ್ರಮಬದ್ಧವಾಗಿ, ಅಂತಹ ಚಕ್ರ ಇರುವಾಗಲೇ ಮಾಡಿ ಕೊನೆಯಲ್ಲಿ ಪರಿಶೀಲಿಸಬೇಕಾದ ಸ್ಥಿತಿಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

ಮಾಡಿ ... ಲೂಪ್ ಮಾಡುವಾಗ iFib_Next < 1000

ವಿಷುಯಲ್ ಬೇಸಿಕ್ನಲ್ಲಿ ಕಿಕ್ಲ್ "ಡು ರವರೆಗೆ"

ಸೈಕಲ್ ತನಕ ಮಾಡಿ ಚಕ್ರಕ್ಕೆ ಹೋಲುತ್ತದೆ ಇರುವಾಗಲೇ ಮಾಡಿ: ಲೂಪ್‌ನ ದೇಹದಲ್ಲಿನ ಕೋಡ್‌ನ ಬ್ಲಾಕ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಸ್ಥಿತಿಯನ್ನು ಪೂರೈಸುವವರೆಗೆ ಮತ್ತೆ ಮತ್ತೆ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ (ಷರತ್ತಿನ ಅಭಿವ್ಯಕ್ತಿಯ ಫಲಿತಾಂಶ ಟ್ರೂ) ಮುಂದಿನ ಕಾರ್ಯವಿಧಾನದಲ್ಲಿ ಉಪ ಸೈಕಲ್ ಬಳಸಿ ತನಕ ಮಾಡಿ ಕಾಲಮ್‌ನಲ್ಲಿರುವ ಎಲ್ಲಾ ಕೋಶಗಳಿಂದ ಮೌಲ್ಯಗಳನ್ನು ಹಿಂಪಡೆಯಿರಿ A ಕಾಲಮ್ ಖಾಲಿ ಸೆಲ್ ಅನ್ನು ಎದುರಿಸುವವರೆಗೆ ವರ್ಕ್‌ಶೀಟ್:

iRow = 1 IRow = 1 ಮಾಡು ವರೆಗೆ IsEmpty(ಸೆಲ್‌ಗಳು(iRow, 1)) 'ಪ್ರಸ್ತುತ ಕೋಶದ ಮೌಲ್ಯವನ್ನು ಅರೇಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿದೆ dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).ಮೌಲ್ಯ iRow = iRow + XNUMX Loop

ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿ, ಸ್ಥಿತಿ ಖಾಲಿ (ಕೋಶಗಳು (iRow, 1)) ರಚನೆಯ ಆರಂಭದಲ್ಲಿ ಇದೆ ತನಕ ಮಾಡಿ, ಆದ್ದರಿಂದ ತೆಗೆದುಕೊಂಡ ಮೊದಲ ಸೆಲ್ ಖಾಲಿಯಾಗಿಲ್ಲದಿದ್ದರೆ ಲೂಪ್ ಅನ್ನು ಒಮ್ಮೆಯಾದರೂ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ.

ಆದಾಗ್ಯೂ, ಲೂಪ್ ಉದಾಹರಣೆಗಳಲ್ಲಿ ತೋರಿಸಿರುವಂತೆ ಇರುವಾಗಲೇ ಮಾಡಿ, ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಷರತ್ತುಬದ್ಧ ಅಭಿವ್ಯಕ್ತಿಯ ಆರಂಭಿಕ ಫಲಿತಾಂಶವನ್ನು ಲೆಕ್ಕಿಸದೆಯೇ ಲೂಪ್ ಅನ್ನು ಒಮ್ಮೆಯಾದರೂ ಕಾರ್ಯಗತಗೊಳಿಸುವುದು ಅವಶ್ಯಕ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಷರತ್ತುಬದ್ಧ ಅಭಿವ್ಯಕ್ತಿಯನ್ನು ಲೂಪ್ನ ಕೊನೆಯಲ್ಲಿ ಇರಿಸಬೇಕು, ಈ ರೀತಿ:

ಡು... ಲೂಪ್ ಆಗುವವರೆಗೆ ಖಾಲಿ (ಸೆಲ್‌ಗಳು(iRow, 1))

ಪ್ರತ್ಯುತ್ತರ ನೀಡಿ