电竞比分网-中国电竞赛事及体育赛事平台

分享

excel編程系列基礎(chǔ):常用語句之循環(huán)語句的邏輯理解

 部落窩教育BLW 2020-05-23

編按:哈嘍,大家好!今天是第三篇VBA實(shí)戰(zhàn)入門教程,我們將給大家?guī)鞻BA中最常見語句之一,循環(huán)語句。典型的循環(huán)語句有4種,分別是Do While…Loop循環(huán)、Do…Loop Until循環(huán)、For…Next循環(huán)、For Each x In y … Next循環(huán)。查看循環(huán)邏輯圖可以更快理解循環(huán)語句。


【前言】

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

一、循環(huán)語句

1.給一個(gè)單元格的賦值

在前面的文章中,同學(xué)們應(yīng)該抓住了一個(gè)知識(shí)點(diǎn),就是對單元格的賦值過程。什么是賦值呢?就是將一個(gè)表達(dá)式的結(jié)果,輸入到某一個(gè)(某一個(gè)區(qū)域)單元格對象的VALUE屬性中,例如下面的寫法:

Sub 賦值1()

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

End Sub

【代碼解析】

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

2.10個(gè)單元格賦值

下面我們提高一些需求難度,給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

除了寫的內(nèi)容多了之外,沒什么問題,何況我們還可以使用復(fù)制粘貼,再改單元格地址,也不是很麻煩。

3.100個(gè)單元格賦值,不,玩大點(diǎn)兒,給10W個(gè)單元格賦值

同學(xué)們,你準(zhǔn)備寫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設(shè)定循環(huán)變量i,循環(huán)的范圍是從1開始,到100000結(jié)束;

Line2使用Sheets("A")作為同一系列對象的父級(jí)隸屬關(guān)系;

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

Line4:結(jié)束With語句;

Line5:循環(huán)語句的結(jié)束語句,滿足循環(huán)條件時(shí),繼續(xù)循環(huán),不滿足條件時(shí),跳出循環(huán)。

上面就是一個(gè)用循環(huán)語句寫的給10W個(gè)單元格賦值的代碼,加上WITH語句,也就5行命令行。不需要寫那么多的命令代碼,利用循環(huán)代碼,可以很方便的操作你需要的數(shù)據(jù)源,這就是循環(huán)語句最根本的優(yōu)勢。

4.循環(huán)邏輯圖解 


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

5.循環(huán)語句的兩種語法形態(tài)

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

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

需求:在工作表“Do循環(huán)A列中,找到第一個(gè)空單元格。

Sub DoWhile循環(huán)()

  i = 1

  With Sheets("Do循環(huán)")

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

      i = i + 1

    Loop

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

  End With

End Sub

【代碼解析】

Line1確定循環(huán)變量初始值為1;

Line2:使用Sheets("Do循環(huán)")作為同一系列對象的父級(jí)隸屬關(guān)系;

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

Line4:單元格不為空的時(shí)候,循環(huán)條件滿足,執(zhí)行語句i=i+1。這句代碼相當(dāng)?shù)闹匾?,俗稱計(jì)數(shù)器,尤其在循環(huán)語句中,起到使變量規(guī)律性的累增或者累減的效果,當(dāng)再次使用變量的時(shí)候會(huì)使對象的引用發(fā)生規(guī)律性改變

Line5:循環(huán)語句的結(jié)束語句,返回到Line3,進(jìn)行新的i值的判斷。當(dāng)單元格為空時(shí),循環(huán)條件不滿足,跳出循環(huán);

Line6:Msgbox顯示規(guī)定的文本說明性文字,即“第一個(gè)空單元格是”。

Do While…Loop的循環(huán)結(jié)構(gòu),滿足循環(huán)流程圖解里面的藍(lán)色流程,屬于先判斷條件再運(yùn)行的結(jié)構(gòu)。

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

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

Sub DoUntil循環(huán)()

  i = 1

  With Sheets("Do循環(huán)")

    Do

      i = i + 1

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

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

  End With

End Sub

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

Do…Loop Until的循環(huán)結(jié)構(gòu),滿足循環(huán)流程圖解里面的橙色流程,屬于先執(zhí)行語句,再判斷條件是否滿足,如果不滿足條件,繼續(xù)循環(huán),滿足的時(shí)候才可以跳出循環(huán)。

心得分享

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

這樣理解后,你在看上面的Until代碼,是不是:當(dāng)單元格為= ""時(shí),結(jié)束語句,執(zhí)行下面的Msgbox。

3)For…Next循環(huán)語句:

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

需求1:對A列的數(shù)值進(jìn)行求和

Sub For循環(huán)()

  With Sheets("For循環(huán)")

    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循環(huán)")作為同一系列對象的父級(jí)隸屬關(guān)系;

Line2:A1040000單元格,向上取末行的行號(hào),并賦值給變量a;

Line3:For循環(huán)的起始語句,并規(guī)定出從1a,為循環(huán)范圍;

Line4:設(shè)定一個(gè)變量bb的值等于“b本身的值+單元格的值,通過循環(huán)變量i的變化,將A列單元格遍歷一遍,逐步累積求和。這句代碼和i=i+1的格式差不多,本身的值加上某個(gè)值,達(dá)到累加的效果

Line5For循環(huán)的結(jié)束語句,如果下一個(gè)i值在范圍內(nèi),則繼續(xù)循環(huán),否則跳出循環(huán);

Line6Msgbox顯示規(guī)定的文本說明性文字;

Line7With語句的結(jié)束語句。

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

很簡單,一個(gè)小知識(shí)點(diǎn)就可以搞定的。For循環(huán)可以設(shè)定在循環(huán)范圍內(nèi),每次循環(huán)的步距,只需要將上面的代碼加一點(diǎn)點(diǎn)內(nèi)容,如下:

循環(huán)變量從第2行開始,每次的步距(Step)為2個(gè)值的距離,那么整體i變量就是2、46、8、如此類推了。

相對于Do循環(huán),For循環(huán)可以給出十分確切的起止范圍,對于我們遍歷工作表,遍歷單元格是相當(dāng)有用而且十分常用的循環(huán)方式,它也屬于藍(lán)色圖解流程,先判斷再執(zhí)行。

4)For Each x In y … Next循環(huán)語句:

這個(gè)語句嚴(yán)格來說,還是屬于For…Next的結(jié)構(gòu),是另一種形式的表現(xiàn),以后我們講到字典的時(shí)候,還會(huì)再遇到這個(gè)結(jié)構(gòu),今天我們先來初窺端倪,舉個(gè)例子:

需求:對選中的單元格區(qū)域進(jìn)行求和

Sub Foreach循環(huán)()

  Dim rg As Range

  For Each rg In Selection

    a = a + rg.Value

  Next

  MsgBox "選中區(qū)域求和=" & a

End Sub

【代碼解析】

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

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

Line3累加給變量a

Line4For循環(huán)的結(jié)束語句,如果下一個(gè)rg值在Selection范圍內(nèi),則繼續(xù)循環(huán),否則跳出循環(huán);

Line5Msgbox顯示規(guī)定的文本說明性文字。

這個(gè)結(jié)構(gòu)的For循環(huán),主要是指在一個(gè)指定的“對象集”中,遍歷每一個(gè)單獨(dú)對象,也屬于藍(lán)色圖解流程,先判斷再執(zhí)行,如果在“對象集中,就執(zhí)行語句,否則跳出循環(huán)。

【編后語】

今天的教程給大家介紹了VBA中最常見最重要語句之一循環(huán)語句。學(xué)到了循環(huán),才能說明同學(xué)們“上道了,否則就真的只是手殘VBA”,會(huì)看不會(huì)寫。對于循環(huán)來說,初學(xué)者理解起來都需要過程,可是你要知道真正的實(shí)戰(zhàn)中還有很多的變數(shù)等著我們?nèi)タ偨Y(jié)、去填坑,找個(gè)時(shí)間趕緊動(dòng)手試一下吧,祝同學(xué)們早日寫出自己的代碼。
  下篇將繼續(xù)為大家分享VBA中另一重要語句,判斷語句。

****部落窩教育-excel循環(huán)語句邏輯理解****

原創(chuàng):E圖表述/部落窩教育(未經(jīng)同意,請勿轉(zhuǎn)載)

更多教程:部落窩教育

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多