excel編程系列基礎:常用語句之循環語句的邏輯理解

2020-12-18 部落窩教育H

編按:哈嘍,大家好!今天是第三篇VBA實戰入門教程,我們將給大家帶來VBA中最常見語句之一,循環語句。典型的循環語句有4種,分別是Do While…Loop循環、Do…Loop Until循環、For…Next循環、For Each x In y … Next循環。查看循環邏輯圖可以更快理解循環語句。學習更多技巧,請收藏關注部落窩教育excel圖文教程。

【前言】

在看過我們前兩篇的VBA實戰入門教程後,有沒有興趣繼續學習呢?也許同學們的興趣早就有了,但就是還沒有找到入門的路,當然了前面的兩篇文章也算不得是讓你入門的途徑,充其量也就是一道「開胃菜」。繼續跟上作者E圖表述的步伐,我不會讓你像「啞巴英語」似的,變成只會看不會寫的「手殘VBA」。那如果前兩篇的文章讓你了解了一些單元格對象的屬性,那現階段,你就需要了解寫代碼中不可規避、而又十分重要的兩個「語句」!

一、循環語句

1.給一個單元格的賦值

在前面的文章中,同學們應該抓住了一個知識點,就是對單元格的賦值過程。什麼是賦值呢?就是將一個表達式的結果,輸入到某一個(某一個區域)單元格對象的VALUE屬性中,例如下面的寫法:

Sub 賦值1()

Sheets("A").[A1] = Sheets("A").[A1].Row

End Sub

【代碼解析】

Line1:將工作表A的A1單元格的ROW屬性,賦值給工作表A的A1單元格。

2.給10個單元格賦值

下面我們提高一些需求難度,給A1:A10單元格賦值,如果你能看懂上面的代碼,那就非常簡單了,寫10行代碼就是了。

Sub 賦值2()

With Sheets("A")

.[A1] = .[A1].Row

.[A2] = .[A2].Row

.[A3] = .[A3].Row

.[A4] = .[A4].Row

.[A5] = .[A5].Row

.[A6] = .[A6].Row

.[A7] = .[A7].Row

.[A8] = .[A8].Row

.[A9] = .[A9].Row

.[A10] = .[A10].Row

End With

End Sub

除了寫的內容多了之外,沒什麼問題,何況我們還可以使用複製粘貼,再改單元格地址,也不是很麻煩。

3.給100個單元格賦值,不,玩大點兒,給10W個單元格賦值

同學們,你準備寫10W條命令行嗎?直接一些,給你答案,代碼如下:

Sub 賦值3()

For i = 1 To 100000

With Sheets("A")

.Cells(i, 1) = .Cells(i, 1).Row

End With

Next i

End Sub

Line1設定循環變量i,循環的範圍是從1開始,到100000結束;

Line2使用Sheets("A")作為同一系列對象的父級隸屬關係;

Line3操作Sheets("A")中,從Cells(1, 1)開始的,Cells(2, 1),……,Cells(i, 1) ,……,到Cells(100000, 1)為止的對象,並將對應的ROW屬性賦值給對應單元格;

Line4:結束With語句;

Line5:循環語句的結束語句,滿足循環條件時,繼續循環,不滿足條件時,跳出循環。

上面就是一個用循環語句寫的給10W個單元格賦值的代碼,加上WITH語句,也就5行命令行。不需要寫那麼多的命令代碼,利用循環代碼,可以很方便的操作你需要的數據源,這就是循環語句最根本的優勢。

4.循環邏輯圖解

作者E圖表述認為循環的流程,歸納後也就上面的兩種格式,其主要的差別就是:藍色的流程是先考慮循環條件,滿足時才執行語句,不滿足時跳出循環;橙色的流程是先執行語句,再判斷循環變量是否滿足條件,如果不滿足,則循環到執行語句再次運行,否則跳出循環。學習更多技巧,請收藏關注部落窩教育excel圖文教程。

5.循環語句的兩種語法形態

在EXCEL VBA中有兩種循環語句,簡單來說:一種是Do循環,一種是For循環,而它們又分別有兩種格式。

1)Do While…Loop循環語句,舉例如下:

需求:在工作表「Do循環」的A列中,找到第一個空單元格。

Sub DoWhile循環()

i = 1

With Sheets("Do循環")

Do While .Cells(i, 1) <> ""

i = i + 1

Loop

MsgBox "第一個空單元格是" & .Cells(i, 1).Address

End With

End Sub

【代碼解析】

Line1確定循環變量初始值為1;

Line2:使用Sheets("Do循環")作為同一系列對象的父級隸屬關係;

Line3:循環語句的起始語句,While(循環條件)為單元格不為空;

Line4:單元格不為空的時候,循環條件滿足,執行語句i=i+1。這句代碼相當的重要,俗稱「計數器」,尤其在循環語句中,起到使變量規律性的累增或者累減的效果,當再次使用變量的時候會使對象的引用發生規律性改變;

Line5:循環語句的結束語句,返回到Line3,進行新的i值的判斷。當單元格為空時,循環條件不滿足,跳出循環;

Line6:Msgbox顯示規定的文本說明性文字,即「第一個空單元格是…」。

Do While…Loop的循環結構,滿足循環流程圖解裡面的藍色流程,屬於先判斷條件再運行的結構。

2)Do…Loop Until循環語句,舉例如下:

需求:還以上例為題,使用Until的方式找到第一個空單元格。

Sub DoUntil循環()

i = 1

With Sheets("Do循環")

Do

i = i + 1

Loop Until .Cells(i, 1) = ""

MsgBox "第一個空單元格是" & .Cells(i, 1).Address

End With

End Sub

代碼就不解析了,基本和Do While…Loop的代碼一樣,唯獨循環條件的位置和寫法不一樣。

Do…Loop Until的循環結構,滿足循環流程圖解裡面的橙色流程,屬於先執行語句,再判斷條件是否滿足,如果不滿足條件,繼續循環,滿足的時候才可以跳出循環。

心得分享

很多初學Excel VBA Do循環的同學,都會在這兩個循環上栽跟頭,如果這個循環條件找不好,就很容易造成「死循環」。所以作者E圖表述分享給大家一個小心得:While條件是看「前門」的,有票許可才能進來玩;Until條件是看「後門」的,有票許可才能出去走。

這樣理解後,你在看上面的Until代碼,是不是:當單元格為= ""時,結束語句,執行下面的Msgbox。

3)For…Next循環語句:

通過上面的案例我們可以發現循環語句的一個規律,都是先有初始值,再逐步累加或者累減改變循環變量,達到對不同對象的操作,For…Next循環也是如此,不過它更加的直接簡便,看一個示例代碼。

需求1:對A列的數值進行求和

Sub For循環()

With Sheets("For循環")

a = .[A1040000].End(3).Row

For i = 1 To a

b = b + .Cells(i, 1)

Next i

MsgBox "A列累加值=" & b

End With

End Sub

【代碼解析】

Line1使用工作表("For循環")作為同一系列對象的父級隸屬關係;

Line2:以A1040000單元格,向上取末行的行號,並賦值給變量a;

Line3:For循環的起始語句,並規定出從1到a,為循環範圍;

Line4:設定一個變量b,b的值等於「b本身的值+單元格的值」,通過循環變量i的變化,將A列單元格遍歷一遍,逐步累積求和。這句代碼和i=i+1的格式差不多,本身的值加上某個值,達到累加的效果;

Line5For循環的結束語句,如果下一個i值在範圍內,則繼續循環,否則跳出循環;

Line6Msgbox顯示規定的文本說明性文字;

Line7With語句的結束語句。

需求2:還是這列數據,提取偶數行的值累加求和

很簡單,一個小知識點就可以搞定的。For循環可以設定在循環範圍內,每次循環的步距,只需要將上面的代碼加一點點內容,如下:

循環變量從第2行開始,每次的步距(Step)為2個值的距離,那麼整體i變量就是2、4、6、8、…如此類推了。

相對於Do循環,For循環可以給出十分確切的起止範圍,對於我們遍歷工作表,遍歷單元格是相當有用而且十分常用的循環方式,它也屬於藍色圖解流程,先判斷再執行。

4)For Each x In y … Next循環語句:

這個語句嚴格來說,還是屬於For…Next的結構,是另一種形式的表現,以後我們講到字典的時候,還會再遇到這個結構,今天我們先來初窺端倪,舉個例子:

需求:對選中的單元格區域進行求和

Sub Foreach循環()

Dim rg As Range

For Each rg In Selection

a = a + rg.Value

Next

MsgBox "選中區域求和=" & a

End Sub

【代碼解析】

Line1定義一個rg變量,為單元格變量;(後面我們會專門來講定義變量的問題)

Line2這句代碼用英語直譯就好,在Selection(被選中的單元格區域)中,循環每一個rg單元格變量;

Line3累加給變量a;

Line4For循環的結束語句,如果下一個rg值在Selection範圍內,則繼續循環,否則跳出循環;

Line5Msgbox顯示規定的文本說明性文字。

這個結構的For循環,主要是指在一個指定的「對象集」中,遍歷每一個單獨對象,也屬於藍色圖解流程,先判斷再執行,如果在「對象集」中,就執行語句,否則跳出循環。

【編後語】

今天的教程給大家介紹了VBA中最常見最重要語句之一循環語句。學到了循環,才能說明同學們「上道」了,否則就真的只是「手殘VBA」,會看不會寫。對於循環來說,初學者理解起來都需要過程,可是你要知道真正的實戰中還有很多的變數等著我們去總結、去填坑,找個時間趕緊動手試一下吧,祝同學們早日寫出自己的代碼。下篇將繼續為大家分享VBA中另一重要語句,判斷語句。學習更多技巧,請收藏關注部落窩教育excel圖文教程。

****部落窩教育-excel循環語句邏輯理解****

原創:E圖表述/部落窩教育(未經同意,請勿轉載)

更多教程:部落窩教育

相關焦點

  • excel編程系列基礎:典型的判斷語句應用技巧
    今天是第四篇VBA實戰入門教程,我們將給大家帶來VBA中最常見語句之一,判斷語句。典型的判斷語句有2種,分別是IF判斷語句和SELECT判斷語句。學習更多技巧,請收藏關注部落窩教育excel圖文教程。 【前言】 上一篇的循環語句同學們都學會了嗎?
  • Verilog HDL基礎之:其他常用語句
    1.forever語句forever語句的格式如下:forever 語句;或者:forever begin 多條語句endforever循環語句常用於產生周期性的波形,用來作為仿真測試信號。它與always語句不同之處在於它不能獨立寫在程序中,而必須寫在initial塊中。
  • Linux shell腳本編程系列二:基本控制語句
    1、什麼是基本控制語句控制語句是用來描述程序結構,控制程序運行邏輯的語句。而程序的基本結構不外乎順序結構、分支結構與循環結構。3、shell的分支結構語句分支結構用於導向程序進入不同的運行邏輯,常用的shell分支結構語句包括if語句,和case語句。if語句的使用方法見下圖:if語句的特點:(1)if語句所判斷的條件需要寫在[ ]內。(2)if語句後面需要加then表示進入第一個分支。(3)if語句以fi作為結束。
  • Javascript之循環語句
    (3)、由於其是一種後測試循環條件的語句,每次只有在循環體執行之後,才會測試條件,這樣會增加代碼的執行量。我們在實際的編程中不使用。了解即可。四、for in循環for in循環語句是一種非常精準的循環語句,可以用來枚舉(可以理解為列舉)對象的屬性。
  • Python條件語句和循環語句
    竟然是這樣,那麼肯定缺少不了一些溝通邏輯。比如你要告訴計算機在什麼情況下做什麼?或者在哪個時間點做什麼?這都需要用到邏輯判斷。這一章節,主要就是說這個。它會幫助 Python 區分代碼之間的層次,理解條件執行的邏輯及先後順序。3、if 語句多個判斷條件的形式有些時候,我們的判斷語句不可能只有兩個,有些時候需要多個,比如上面的例子中大於 60 的為及格,那我們還要判斷大於 90 的為優秀,在 80 到 90 之間的良好呢?
  • 亮仔的Python之路Day7——Python循環語句
    day7:2019-09-01今日學習目的:了解循環語句,使用代碼解放勞動力實踐是檢驗真理的唯一標準我們使用代碼的最終目的是解放勞動力當你還在複製粘貼累的半死的時候別人隨手幾行代碼就搞定今天學習的是2種循環語句一、什麼是循環語句循環語句:可以讓計算機重複並自動執行的代碼換句話說就是讓計算機按照你的要求重複的做一件事二、循環語句的種類1、for循環for循環:在給定的判斷條件為 true時執行循環部分,否則退出循環for循環的結構,代碼規範註:如果賦值為字符串在沒有特殊標註循環幾次的時候
  • Python語言基本語法元素之語句,表達式、賦值語句
    編程和學習數學在很多地方是相通的,都需要從基礎知識一步一步往上學習。例如要真正理解 指數增長 的意思,先要知道什麼是指數函數、什麼是函數曲線。在看到指數函數的曲線的時候,你才能理解 指數增長 增長的迅猛程度。
  • Excel VBA入門教程 1.5 語句結構
    語句結構用來控制程序執行的步驟, 一般有選擇語句、循環 語句。End IfIf選擇可以嵌套使用常用的三種形式:普通模式If 10 > 3 Then 操作1 ' 執行這一步End If' 增加Else和Else If邏輯If 1 > 2 Then 操作1ElseIf
  • Python 循環語句
    本章節將向大家介紹Python的循環語句,程序在一般情況下是按順序執行的。程式語言提供了各種控制結構,允許更複雜的執行路徑。循環語句允許我們執行一個語句或語句組多次,下面是在大多數程式語言中的循環語句的一般形式:
  • Java循環語句之for循環與while循環
    各位小夥伴們大家好,這次小編要介紹的是,Java循環語句之for循環與while循環。首先,小編來介紹一下什麼是循環語句。循環語句可以在滿足循環條件的情況下,反覆執行某一段代碼,這段被重複執行的代碼被稱為循環語句,當反覆執行這個循環時,需要在合適的時候把循環判斷修改為false結束循環。循環語句主要有for循環,while循環,do…while循環。這次,小編要介紹的是for循環與while循環。首先,小編要介紹的是for循環的格式。
  • 零基礎學編程python第十課,for……in循環語句與while循環語句
    而計算機機器人,就可以通過【循環】,一遍又一遍不厭其煩的向客戶介紹產品,計算機又不怕累。現在,是不是感覺」循環」不一樣了。什麼計算機就特別擅長做重複性工作呢? 並且是」擅長、速度快、不怕累」。究其原理, 就是因為代碼中的【循環語句】,讓計算機能夠重複、自動地執行命令。Python江湖裡,提供了兩種循環語句, for…in循環語句與while循環語句。
  • C語言/C++基本語句編程風格
    初學者階段編程時,編寫基本語句可能會有隱含錯誤的方式,基本語句主要針對if、for、while、goto、switch等,它們看似簡單,但使用時隱患比較多,本文歸納了使用語句的一些規則和建議。 基本語句編程舉例 if語句是C++/C語言中最簡單、最常用的語句,然而很多編程人員用隱含錯誤的方式寫if語句,本文以「與零值比較」為例,進行討論。
  • Python的range函數與for循環語句
    本篇介紹Python for循環語句和range函數的使用,文中主要討論for循環語句,Python的for循環語句類似於shell或是腳本語言中的foreach循環,可以迭代序列對象。使用range函數可以讓Python的for循環提供類似於傳統的for循環功能。通過本篇的學習,可以達成如下目標。
  • Shell編程——流程控制語句
    第二章:shell編程2.4 流程控制語句與傳統的程式語言不同的是,shell用於指定條件值得不是布爾運算式,而是命令和字符串。2.4.1 條件判斷2.4.1.1 if 條件語句語法:if [ 命令或字符串]命令行1then命令行2else命令行fi編寫如下腳本運行程序,輸出測試:2.4.1.2 case條件語句語法:
  • Python的條件判斷語句和while循環語句
    流程控制語句一個程序的默認執行流程是從上往下從左往右流程控制語句分為判斷語句和循環語句1.判斷語句:第一種語法格式:if判斷條件:代碼if是關鍵字,有如果的意思,後面跟判斷條件,判斷條件為真的(Ture) 則執行縮進裡面的代碼。
  • C#核心開發-怎樣才能讓編程小白徹底理解for語句的整個循環過程?
    一都編程-C#核心開發1. 單層循環1.1.基本概念在C#中,可以使用for循環語句對多個數據進行循環並具有篩選功能,滿足條件的篩選出來。for語句的循環規則是:當某個條件為true(真)時,重複執行循環體(語句塊),如果為false(假),則終止循環,退出for循環。1.2.
  • LabVIEW編程基礎:以實例學編程之循環結構
    LabVIEW又稱為G語言,簡單易學、形象直觀,採用圖形化的編程方式,是專為測試、測量和控制應用而設計的系統工程軟體。在前面兩篇文章(請參考:LabVIEW編程基礎:以實例學編程之條件結構精講,LabVIEW編程基礎:以實例學編程之順序結構)中分別講了順序結構與條件結構的編程方法,下面通過具體例子演示循環結構的編程使用方法。
  • 構建C語言選擇和循環語句的思維導圖
    C語言是一門非常基礎的計算機語言,是大部分本科學生的公共專業,在C語言的學習中,選擇和循環語句是至關重要的部分,利用思維導圖可以有效節約時間並加深知識點記憶。如果使用多重if語句的嵌套方法來編程,編譯器會逐一翻譯if語句,每個else都會與最近的if語句匹配。
  • Python基礎知識--基本語句
    Python腳本及程序的基礎是語句,通過控制語句來控制程序的執行流程,根據一定的條件來執行腳本中的不同語句,已完成不同的功能。和其他程式語言類似,主要有IF/FOR/WHILE三種基本控制語句。測試結果2、FOR語句循環控制語句,可用於循環遍歷某一對象,並附帶可選的ELSE塊,如果FOR循環未被BREAK語句終止,則執行ELSE塊中的語句;FOR循環中的CONTINUE語句可跳過位於其後的語句,並開始下一輪循環
  • 值得你珍藏的VBA編程常用語句
    大家好,今天繼續和大家分享VBA編程中常用的過程代碼。過程代碼在這裡講解的語句非常簡單單一,簡單的語句組合起來就是一個複雜的過程,我們要認真掌握這些簡單的過程,為我們複雜的工程服務。也可以用Application.Dialogs(476).ShowVBA過程代碼43:打開另存對話框Sub MyNZ()MyFileName = Application.GetSaveAsFilename _(InitialFileName:=".xlsm", _fileFilter:="excel工作簿(*.xlsm),*.xlsm