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

2021-01-09 部落窩教育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的格式差不多,本身的值加上某個值,達到累加的效果;

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

Line6:Msgbox顯示規定的文本說明性文字;

Line7:With語句的結束語句。

需求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;

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

Line5:Msgbox顯示規定的文本說明性文字。

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

【編後語】

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

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

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

更多教程:部落窩教育

相關焦點

  • Python語言基本語法元素之語句,表達式、賦值語句
    編程和學習數學在很多地方是相通的,都需要從基礎知識一步一步往上學習。例如要真正理解 指數增長 的意思,先要知道什麼是指數函數、什麼是函數曲線。在看到指數函數的曲線的時候,你才能理解 指數增長 增長的迅猛程度。今天筆者想寫Python語言基本語法元素中的語句語句如圖,程序代碼就是一行行語句。
  • 零基礎學編程python第十課,for……in循環語句與while循環語句
    而計算機機器人,就可以通過【循環】,一遍又一遍不厭其煩的向客戶介紹產品,計算機又不怕累。現在,是不是感覺」循環」不一樣了。什麼計算機就特別擅長做重複性工作呢? 並且是」擅長、速度快、不怕累」。究其原理, 就是因為代碼中的【循環語句】,讓計算機能夠重複、自動地執行命令。Python江湖裡,提供了兩種循環語句, for…in循環語句與while循環語句。
  • Python的range函數與for循環語句
    本篇介紹Python for循環語句和range函數的使用,文中主要討論for循環語句,Python的for循環語句類似於shell或是腳本語言中的foreach循環,可以迭代序列對象。使用range函數可以讓Python的for循環提供類似於傳統的for循環功能。通過本篇的學習,可以達成如下目標。
  • VBA中重複操作的神器,Do……Loop循環語句,你值得擁有它
    在上一個章節中我們已經學習集合的循環和數字的循環,那麼有時候我們並不知道我們要具體循環的次數,這個時候For—Next循環就無能為力啦!其實我們還有一種循環可以勝任這個,他就是我們本文要說的Do----Loop循環,這個循環其實在我們其他的程式語言中均有應用。一起來了解一下他。Do...Loop,顧名思義,他的中文意思就是循環的意思,這個非常好理解。
  • Python while循環語句的使用
    本篇介紹Python循環語句的使用,文中主要討論while循環語句,使用while循環語句可以解決程序中需要重複執行的操作,本文講解的每個案例中都配有流程圖和代碼說明。通過本篇的學習,可以達成如下目標。
  • 跟我學java編程—深入理解for語句的嵌套循環
    前面已經介紹了嵌套循環的概念,並通過示例介紹了while循環和do-while循環嵌套的情況。本節介紹for循環結構,for循環也可以嵌套。不僅如此,for循環還可以和其它的循環結構混合嵌套。嵌套循環時,必須將被嵌套的循環語句完整地包含在外層循環的循環體內,下面給出一些循環嵌套的示例。示例1:用「*」輸出一個菱形圖案,圖案如下: 在D盤Java目錄下,新建「ForSample1.java」文件。
  • 數控編程實例循環銑沉孔,條件語句結合G02走圓
    上一篇我們講解了條件語句用於循環開槽的編程,只用了G01直線命令,基本了解了條件語句的應用。下面我們開始深化應用,用圓弧指令結合條件語句來加工那些尺寸較大的沉孔。這類孔尺寸大,不能通過鑽孔的方式完成,我們需要採用銑削的方式通過多刀進給來完成加工。下面我會通過實例給大家分析講解。
  • VBA中的循環語句
    今日給大家講VBA的循環語句,這個是非常基礎的知識,在VBA的相關內容中我也一直在用,也在不斷的講解,今日專門作為一個專題給大家詳細的說明,中間也有一些有意思的小例子,供大家玩耍。一 FOR NEXT語句 這種循環是以指定的次數,來重複執行的一組語句這個結構一般是這樣的:for counter= start to end [ step 步長值][statements][exit for][statements]Next counter具體解釋一下,初始值指的是循環開始的值
  • Javascript之if條件語句和三目運算符
    一、if條件語句1、語法:if( condition ) statement1 else statement2;註:A、condition是條件,statement是需要執行的循環語句。B、當condition的條件滿足時,執行statement1語句,不滿足時,執行statement2語句。
  • 少兒編程Python第4課-for循環語句(質數判斷)
    我們要實現一個每隔1秒中在屏幕上列印一次「hello, world」;並持續列印一個小時的程序,我們肯定不能夠直接把`print('hello, world')`這句代碼寫3600遍,如果真的要這樣做,那麼編程的工作就太無聊乏味了。因此,我們還需要了解一下循環結構,有了循環結構我們就可以輕鬆的控制某件事或者某些事重複、重複、再重複的去執行。
  • python循環語句用數據做判斷:布爾值和布爾運算
    :break在這裡,if...break的意思是如果滿足了某一個條件,就提前結束循環。記住,這個只能在循環內部使用。我們運行一下代碼來理解這一點。下面是一個for循環代碼,本來會循環5次,但循環到第4次的時候就被break語句打斷,然後結束循環了。
  • python循環控制語句
    循環語句語句後面一定要跟:冒號for循環:1.for…in range()遍歷格式:for i in range(5);或者for i in range( 0,10,3 );格式中的1列印i是從0開始後列印到5結束
  • Verilog HDL基礎之:賦值語句和塊語句
    典型語句:b = a;① 塊結束後才完成賦值操作。② b的值並不是立刻就改變的。③ 這是一種比較常用的賦值方法,特別在編寫可綜合模塊時。(2)阻塞賦值方式。典型語句:b = a;① 賦值語句執行完後,塊才結束。
  • 第一篇:C語言編程基礎語法
    本專欄系列分六篇,總結了C語言基礎知識的核心要點。教學視頻已上線,讀者可根據自身情況有選擇性地學習。01編程基礎C語言——貝爾實驗室、Dennis Ritchie屬於高級語言,更接近人類語言邏輯,需要編譯器編譯,執行依賴運行環境;但容易學習。其特點:模塊化編程程序設計,層次清晰;語句簡潔,提出程序庫概念;功能強大,系統、應用軟體均可開發;移植性好,適合不同的作業系統。除此之外,C語言還有豐富的運算符、數據結構等,程序設計自由度大,可以對硬體進行操作。
  • Java小白入門教程(6)——循環語句
    語句 7、循環嵌套 8、作業 一、循環結構1.1 概念 條件滿足,某些代碼會被反覆多次的執行。二、循環語句2.1、while循環 while循環的語法結果: while( 循環條件判斷 ){ //循環體 //(循環中變量的變化)}/*執行流程: 首先判斷while之後的小括號裡的循環條件的值:boolean--->true,false 如果是true,表示循環條件成立,那麼執行
  • 第三篇:JavaScript語句流程控制
    順序結構順序結構是流程控制中最簡單、也是最常用的結構,結構內的所有語句按順序執行,只有上一條語句執行完成後,才執行下一條語句。for循環結構語法如下:for(表達式1; 表達式2; 表達式3;){代碼段;}表達式1:通常用來給循環變量賦初值,一般是賦值表達式,也允許在for語句外給循環變量賦初值,此時可以省略該表達式;表達式2:通常是循環條件,一般為關係表達式或邏輯表達式;表達式3: 通常可用來修改循環變量的值,一般是賦值語句。
  • 論邏輯概念視域下的語句意義結構
    一、引言先民鎖定名詞為概念指稱最佳載體,因為名詞指稱事物、狀態,其音、形、義三者之間關聯最為直接,即物為自然之物,事為人及之事,又有意義認知最低可及性1。以名詞為中心的語句概念意義表現及應用,影響了與名詞關係密切的其它類詞彙有參與概念承載的趨勢2。
  • SCI論文常用語句中英文對照
    一.介紹作者的觀點和研討課題內容的語句1、 文章內容與作者觀點的常用語句
  • SCI收錄的論文常用語句中英文對照
    01介紹作者的觀點和研討課題內容的語句1. 文章內容與作者觀點的常用語句(1).論及了此晶體的物理、化學性質Physical and chemical properties of this crystal are reported.
  • VBA中的If-Then-Else語句
    今日的內容是「VBA之EXCEL應用」的第六章「條件判斷語句(If...Then...Else)在VBA中的利用」。這套教程從簡單的錄製宏開始講解,一直到窗體的搭建,內容豐富,案例眾多。大家可以非常容易的掌握相關的知識,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。