返回列表 上一主題 發帖

[轉貼] For...Next 與 For Each...Next 迴圈的基本概念

[轉貼] For...Next 與 For Each...Next 迴圈的基本概念

本帖最後由 Hsieh 於 2010-5-10 17:42 編輯

cjc
訪客


   請問不同檔案的資料複製
« 於: 2005-04-11, 10:22:45 »      

--------------------------------------------------------------------------------
各位好,我有兩個檔案:

檔案 A :
A    B     C     D     E
1 物品 公司1 公司2  公司3  公司4
2 001 5    10
3 002       7     12    22

檔案 B :
D      E...........K
1 公司1 001   15
2 公司2 001   10
2 公司2 002   7
3 公司3 002   12
4 公司4 002   22

由於物品種類有上百種,可否將 A 檔案的資料(15,10,7,12,22....)自動取代或填入 B 檔案呢?
謝謝  

« 最後編輯時間: 2005-04-11, 10:31:11 由 小誌 »  向板主檢舉    61.229.1.159 (?)  



cjc
訪客


   Re: 請問不同檔案的資料複製
« 回覆文章 #1 於: 2005-04-11, 10:24:45 »      

--------------------------------------------------------------------------------
真抱歉,不知為何文章貼出來會這樣

回覆:
因為你加太多空白了 >:
不知如何加入表格代碼來排版的話,請先到新手試驗區試驗一下OK
不然你也先預覽一下


« 最後編輯時間: 2005-04-11, 10:34:29 由 小誌 »  向板主檢舉    61.229.1.159 (?)  



cjc
訪客


   Re: 請問不同檔案的資料複製
« 回覆文章 #2 於: 2005-04-11, 11:34:40 »      

--------------------------------------------------------------------------------
真抱歉,我把它做成表格,應該比較清楚了
A B C D E
1 物品 公司1 公司2 公司3 公司4
2 001 15 10   
3 002  7 12 22


C D ... K
1 公司1 001  15
2 公司2 001  10
3 公司2 002  7
4 公司3 002  12
5 公司4 002  22


向板主檢舉    61.229.1.159 (?)  



leonchou
論壇維護群

離線

文章: 1214


     Re: 請問不同檔案的資料複製
« 回覆文章 #3 於: 2005-04-11, 23:25:54 »      

--------------------------------------------------------------------------------
1. 以下範例,兩個檔案需已開啟
2. 檔案名稱依實際情形修改

Sub zz()
Set a = Workbooks("檔案A.xls").Sheets(1)
Set b = Workbooks("檔案B.xls").Sheets(1)
lastrow = a.[A1].End(xlDown).Row
lastcol = a.[A1].End(xlToRight).Column
rb = 1
For c = 2 To lastcol
  For r = 2 To lastrow
    If a.Cells(r, c) <> "" Then
      b.Cells(rb, 3) = a.Cells(1, c)
      b.Cells(rb, 4) = a.Cells(r, 1)
      b.Cells(rb, 11) = a.Cells(r, c)
      rb = rb + 1
    End If
  Next r
Next c
End Sub


向板主檢舉    203.79.168.37 (?)  

--------------------------------------------------------------------------------
BEFORE ASKING, YOU SHOULD RTFH, RTFM, STFW...



oobird
凸槌的木工
論壇維護群

離線

文章: 5270



     Re: 請問不同檔案的資料複製
&laquo; 回覆文章 #4 於: 2005-04-12, 08:21:38 &raquo;      

--------------------------------------------------------------------------------
lenchou兄:很好的變量範例。小弟不懂後面的rb = rb + 1,及Next r、Next c與 只有寫"Next "的差別,能啟蒙一下嗎?謝謝。



向板主檢舉    61.217.102.234 (?)  

--------------------------------------------------------------------------------
結廬待慧君


cjc
訪客


   Re: 請問不同檔案的資料複製
&laquo; 回覆文章 #5 於: 2005-04-12, 10:52:21 &raquo;      

--------------------------------------------------------------------------------
感謝 lenchou兄回覆
不過由於檔案B的 C ,D 列資料已經存在,只需將 K 列的空白資料填入,須要怎麼修改呢?
謝謝!

向板主檢舉    61.229.1.159 (?)  



yem
訪客


   Re: 請問不同檔案的資料複製
&laquo; 回覆文章 #6 於: 2005-04-12, 11:49:55 &raquo;      

--------------------------------------------------------------------------------
引用自: cjc 於 2005-04-12, 10:52:21
感謝 lenchou兄回覆
不過由於檔案B的 C ,D 列已經存在,只需將 K 列的空白資料填入,須要怎麼修改呢?
謝謝!


C,D資料已存在,
這麼好啊~~
那用公式更方便了

K1公式
=INDIRECT("[Book1]Sheet1!R"&MATCH(D1,[Book1]Sheet1!$A$1:$A$11,0)&"C" &MATCH(C1,[Book1]Sheet1!$A$1:$E$1,0),0)



公式中:
BooK1換成檔案A的名字,
$A$1:$A$11,及$A$1:$E$1就要視真正的資料改變範圍長度了

向板主檢舉    218.175.222.56 (?)  



cjc
訪客


   Re: 請問不同檔案的資料複製
&laquo; 回覆文章 #7 於: 2005-04-12, 12:52:36 &raquo;      

--------------------------------------------------------------------------------
感謝 yem 兄回覆
我將公式套入k1-k5,所得到的答案都是一樣
如果有上千筆的資料,可以將公式一次套入嗎?

向板主檢舉    61.229.1.159 (?)  



yem
訪客


   Re: 請問不同檔案的資料複製
&laquo; 回覆文章 #8 於: 2005-04-12, 13:38:48 &raquo;      

--------------------------------------------------------------------------------
引用自: cjc 於 2005-04-12, 12:52:36
感謝 yem 兄回覆
我將公式套入k1-k5,所得到的答案都是一樣
如果有上千筆的資料,可以將公式一次套入嗎?


這是k1的公式,k2~k5要從k1往下拉哦!!  

向板主檢舉    218.175.222.56 (?)  



leonchou
論壇維護群

離線

文章: 1214


     Re: 請問不同檔案的資料複製
&laquo; 回覆文章 #9 於: 2005-04-12, 23:41:45 &raquo;      

--------------------------------------------------------------------------------
引用自: oobird 於 2005-04-12, 08:21:38
lenchou兄:很好的變量範例。小弟不懂後面的rb = rb + 1,及Next r、Next c與 只有寫"Next "的差別,能啟蒙一下嗎?謝謝。


就是照制式的用法而已...

節錄自VBA輔助說明 --

一. For...Next 陳述式

以特定次數來重複執行一段陳述式。

語法
For counter = start To end [Step step]
[其他陳述式]
[Exit For]
[其他陳述式]

Next [counter]

附註 如果您省略 Next 陳述式中的計數器,仍可以執行迴圈,但如果 Next 陳述式比它相對應的 For 陳述式先執行,則會產生錯誤。

二. For Each...Next 陳述式

針對一個陣列或集合中的所有元素,重複執行一段陳述式。

語法
For Each element In collection
[其他陳述式]
[Exit For]
[其他陳述式]

Next [element]

附註 如果您省略 Next 陳述式中的元素,仍可以執行迴圈,但如果 Next 陳述式比它相對應的 For 陳述式先執行,則會產生錯誤。

--------------------------------------------------------------------------------

我倒還沒遇過 "Next 陳述式比它相對應的 For 陳述式先執行" 而發生錯誤的情形,
所以我一向只在 For...Next 後面加 counter ,以和 For Each...Next 陳述式有所區別而已,如同Help所說:除非遇到錯誤,否則加與不加都沒差。
如果要說加有什麼好處,大概就是不易出錯,而且如此例中使用多個 For ... Next 的巢狀迴圈時,較容易分辨哪個是哪個。
使程式碼較易於閱讀,是個好習慣。

把輔助說明有的東西拿來發教學文章,如果沒有值得一書的心得,沒什麼意思對吧?

忘了說 rb = rb + 1 的意思...
rb 是做為 B檔案列號的變數,一列一列接著往下填入資料。
A檔案已有 For ... Next 的計數變量做為欄列號,
B檔案的欄號是固定,而列號與 A檔不同,所以另設變數。

&laquo; 最後編輯時間: 2005-04-12, 23:46:32 由 leonchou &raquo;  向板主檢舉    203.79.168.37 (?)

回復 1# Hsieh


    老師好利害哦...

我好想學寫vba,但是很多不明白,希望老師可以詳細解釋一下
有一個表如下,我想將REF#+PLT NO,再計算TOTAL CTNS.   IE:J0507001-01  TOTAL1 CTN 後再SHEET2表達出來好下2
SHEET1
A                 B                  C
plt  no1         RE#             CTN
01        J0507001               1
01        J0507001         0
01        J0507002                1
01        J0507002        2
02        J0507003               3
02        J0507013       6
02        J0507014                5
02        J0507014                 7


-SHEET2---------------------------------------------
      A                          B
REF+PL NO        TOTAL CTN
J0507001-01        1
J0507002-01        3
J0507003-02        3
J0507013-02        9
J0507014-02        12

TOP

回復 2# john2006168
  1. Sub nn()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. With Sheet1
  4. d(.[A1] & .[B1]) = .[C1]
  5. For Each a In .Range(.[A2], .[A65536].End(xlUp))
  6.    d(a & a.Offset(, 1)) = d(a & a.Offset(, 1)) + a.Offset(, 2)
  7. Next
  8. End With
  9. With Sheet2
  10. .Columns("A:B") = ""
  11. .[A1].Resize(d.Count, 1) = Application.Transpose(d.keys)
  12. .[B1].Resize(d.Count, 1) = Application.Transpose(d.items)
  13. End With
  14. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 3# Hsieh


    但是我的case是想把 檔案B 轉為 檔案A ………

   不知道高手可不可以幫幫我,我怎麼都改不出來 囧

  謝謝!

TOP

回復 4# Adela
如2樓 的SHEET2 轉回為SHEET1格式 嗎 但無法轉回如原來的SHEET1內容
試試看
  1. Sub Ex()
  2. Dim Rng As Range, Ar(), E As Range, i%
  3. With Sheet2
  4.     Set Rng = .Range(.[A2], .[A65536].End(xlUp))
  5.     ReDim Ar(1 To Rng.Count)
  6.     For i = 1 To UBound(Ar)
  7.         Ar(i) = Array(Split(Rng(i), "-")(1), Split(Rng(i), "-")(0), Rng(i, 2))
  8.     Next
  9. End With
  10. With Sheet1
  11. .Columns("A:C") = ""
  12. .[A1].Resize(UBound(Ar), 3) = Application.Transpose(Application.Transpose(Ar))
  13. End With
  14. End Sub
複製代碼

TOP

在一楼的基础上添只足哈,就是可能好多术语不一样,我只把“循环”改成了“回圈”:

结构化的程序设计包含三种基本结构:顺序结构、选择结构和回圈结构。
回圈结构是指在执行程序时,根据条件的真假,来判断是否重复执行其中某段代码。要满足某个条件,就一直重复执行这段代码,直到不满足条件为止。包括:For……Next、For Each……Next、Do……loop、while…… Wend四种回圈语句。
1. For…Next语句
For…Next回圈属于计数型回圈,程序按照该结构中指定的回圈次数来执行回圈体部分。

For……Next语句的格式如下:
    For回圈变量=初始值 TO终值 [Step步长]
       [回圈体]
    Next [回圈变量]
如果省略 Next语句中的[回圈变量],就像[回圈变量]存在时一样执行。
    在此格式中,使用了这样几个概念:
    (1)回圈变量:用于统计回圈次数的变量,回圈的过程就是该变量是从某个值变化到另一个值的过程。
    (2)初始值:用于设置回圈变量的初始取值。
    (3)终值:用于设置回圈变量的最后取值。
    (4)步长:用于决定回圈变量每次回圈时变化的数值,即回圈变量在变化时的增值。如果省步长的话,其默认值为1。步长的取值可以为正,也可以为负。若初始值小于终值,则必将步长设为正值才有可能执行回圈体;若初始值大于终值,则必须将步长设为负值才有可能行回圈体。
    (5)回圈体:需要重复执行的代码部分,可以是一个或多个语句。
    (6)Next[回圈变量]:用于结束一次For回圈,根据终值和现在回圈变量的值的大小关系决定是否执行下一次回圈。其中的回圈变量的名称必须与回圈开始时的回圈变量名称相同。

For…Next语句回圈的执行过程(工作原理):
先将回圈变量取为初始值,然后检验回圈变量的取值是否超出终值,若回圈变量没有超出终值,则执行一次回圈体语句,然后将回圈变量加上步长赋值给回圈变量本身,再与终值进行比较,直到回圈变量超出终值时,退出回圈,执行后面的语句。所谓超出终值是指:若步长为正值,则检验回圈变量是否大于终值;若步长为负值,则检验回圈变量的取值是否小于终值。
For…Next语句结束后会返回[回圈变量]的值,但它一定不等于[终值]:
Sub t()
Dim i
For i=1 to 10
Next
End  sub
最后i是多少呢?不管是多少,它一定不是10:
Sub t1()
    Dim i, j
    For i = 1 To 10
        j = j + 1
        MsgBox "步长值为1,第" & j & "次回圈[回圈变量]的值:" & i
    Next
    MsgBox "回圈次数:" & j & Chr(13) & "最后[回圈变量]的值:" & i
End Sub

Sub t2()
    Dim i, j
    For i = 1 To 10 Step 1.6
        j = j + 1
        MsgBox "步长值为1.5,第" & j & "次回圈[回圈变量]的值:" & i
    Next
    MsgBox "回圈次数:" & j & Chr(13) & "最后[回圈变量]的值:" & i
End Sub
在回圈体中也可以改变[回圈变量]的值,但这会使程序代码的阅读和调试变得非常困难,一般不提倡这样做:
Sub t3()
    Dim i, j
    For i = 1 To 10
        i = i + 1
        j = j + 1
        MsgBox "步长值为1.5,第" & j & "次回圈[回圈变量]的值:" & i
    Next
    MsgBox "回圈次数:" & j & Chr(13) & "最后[回圈变量]的值:" & i
End Sub

在For…Next回圈中,只要步长不为0,就永远不会出现死回圈。因为只要步长不为0,无论始值和终值之间相差多么大,总可以经过有限次的回圈,使始值超出终值,从而跳出回圈。由此可见,For…Next适用于预先知道回圈次数的情况。
在某些情况下,可能需要在回圈变量没有超出终值之前就跳出回圈,这时可以用Exit For语句,当满足某种特殊的条件时,就提前跳出回圈。

从For…Next语句的格式中可以看到:其中的回圈体是可选的。若省略了回圈体,即For回圈的回圈体内没有任何具体的语句,则其只是起到延时的作用。因为当回圈了一定次数后虽不执行任何操作,但却花费了一定时间,故可作为延时工具使用。但要注意的是由于现在计算机的速度都比较快了,如果回圈次数比较少的话将不会达到预期的效果,因此要适当选择回圈次数。

2.For Each…Next语句
FOR……Next语句与For…Next语句有些类似,但它们有很大的区别:前者是由指定或集合中的元素来控制回圈,而后者是由回圈变量来控制回圈过程。由此可见,For Each…语句是不需要预先知道回圈次数的,指定数组或集合中的元素个数就是回圈次数。该语句的使用格式为:
    For Each回圈变量In数组或集合
        回圈体
    Next回圈变量
    这里的回圈变量必须是变体型(Variant)或对象型(Object)的。对于数组,回圈变量必须是变体型的;对于集合,如果集合中包含对象,则回圈变量应该是对象型,当然也可以是变体型。
当某一数组或集合里的所有元素进行同一操作时,就需要使用该语句了。
同样的可以用Exit For语句,当满足某种特殊的条件时,就提前跳出回圈。

For Each…Next语句结束后,不会返回[回圈变量],这与For…Next语句不一样:
Sub t4()
    Dim c
    For Each c In Array(1, 2, "aa")
    Next
    MsgBox TypeName(c)
End Sub
Sub t5()
    Dim r As Range
    For Each r In [a1:a4]
    Next
    MsgBox TypeName(r)
End Sub

3.Do…Loop语句
    Do…Loop回圈是根据某个条件是否成立来决定是否回圈。它并不限制回圈的次数,只要满足条件就继续回圈,直到不满足条件时跳出回圈。注意要在回圈中改变条件,否则的话可能会陷入死回圈。

    Do…Loop语句有四种形式:
形式1:
DO
回圈体
Loop While 条件
这种形式的执行过程是:先执行一遍回圈体,然后再判断条件是否成立,若条件成立, 继续下一次回圈;否则,就退出回圈。

形式2:
Do While 条件
回圈体
Loop
这种形式是把“While条件”放在回圈体的前面,也就是说它的执行过程是先判断条件是立,再决定是否继续回圈。

形式3:
DO
回圈体
Loop Until 条件
这种形式和第一种形式有些类似,也是先执行回圈体,然后再判断条件。与第一种形式不同,这种形式只有当条件不成立才会继续回圈,否则就退出回圈。

形式4:
DO Until 条件
回圈体
Loop
这种形式和第二种形式有些类似,先判断条件,再决定是否继续回圈。与之不同的是,这种形式也是当条件不成立才会继续回圈。

由上面四种形式的格式可以看出:
    第一种和第三种形式是先执行回圈体,然后再判断条件,条件成立与否,至少执行一次回圈体;第二种和第四种形式,则是先判断条件,如果条件当,回圈体可能一次也没有执行。且“While”和“Until”正好相反,前者是条件成立时入回圈,而后者则是条件不成立时才进入回圈。使用时可根据需要选择最适当的形式。

    在前面For…Next语句中介绍的Exit语句也适用于DO…Loop语句,只是把“Exit For”改成“Exit Do”即可,它们的作用是一样的,都是用来提前跳出回圈的。

资料来源:微软帮助

TOP

回復 6# et5323
謝謝et5323前輩提供如此精闢的文章
本站繁中版本的會員也不在少數,翻成繁中字體讓大家容易閱讀

    在一樓的基礎上添只足哈,就是可能好多術語不一樣,我只把“迴圈”改成了“回圈”:

結構化的程式設計包含三種基本結構:順序結構、選擇結構和回圈結構。
回圈結構是指在執行程式時,根據條件的真假,來判斷是否重複執行其中某段代碼。要滿足某個條件,就一直重複執行這段代碼,直到不滿足條件為止。包括:For……Next、For Each……Next、Do……loop、while…… Wend四種回圈語句。
1. For…Next語句
For…Next回圈屬於計數型回圈,程式按照該結構中指定的回圈次數來執行回圈體部分。

For……Next語句的格式如下:
    For回圈變數=初始值 TO終值 [Step步長]
       [回圈體]
    Next [回圈變數]
如果省略 Next語句中的[回圈變數],就像[回圈變數]存在時一樣執行。
    在此格式中,使用了這樣幾個概念:
    (1)回圈變數:用於統計回圈次數的變數,回圈的過程就是該變數是從某個值變化到另一個值的過程。
    (2)初始值:用於設置回圈變數的初始取值。
    (3)終值:用於設置回圈變數的最後取值。
    (4)步長:用於決定回圈變數每次回圈時變化的數值,即回圈變數在變化時的增值。如果省步長的話,其預設值為1。步長的取值可以為正,也可以為負。若初始值小於終值,則必將步長設為正值才有可能執行回圈體;若初始值大於終值,則必須將步長設為負值才有可能行回圈體。
    (5)回圈體:需要重複執行的代碼部分,可以是一個或多個語句。
    (6)Next[回圈變數]:用於結束一次For回圈,根據終值和現在回圈變數的值的大小關係決定是否執行下一次回圈。其中的回圈變數的名稱必須與回圈開始時的回圈變數名稱相同。

For…Next語句回圈的執行過程(工作原理):
先將回圈變數取為初始值,然後檢驗回圈變數的取值是否超出終值,若回圈變數沒有超出終值,則執行一次回圈體語句,然後將回圈變數加上步長賦值給回圈變數本身,再與終值進行比較,直到回圈變數超出終值時,退出回圈,執行後面的語句。所謂超出終值是指:若步長為正值,則檢驗回圈變數是否大於終值;若步長為負值,則檢驗回圈變數的取值是否小於終值。
For…Next語句結束後會返回[回圈變數]的值,但它一定不等於[終值]:
Sub t()
Dim i
For i=1 to 10
Next
End  sub
最後i是多少呢?不管是多少,它一定不是10:
Sub t1()
    Dim i, j
    For i = 1 To 10
        j = j + 1
        MsgBox "步長值為1,第" & j & "次回圈[回圈變數]的值:" & i
    Next
    MsgBox "回圈次數:" & j & Chr(13) & "最後[回圈變數]的值:" & i
End Sub

Sub t2()
    Dim i, j
    For i = 1 To 10 Step 1.6
        j = j + 1
        MsgBox "步長值為1.5,第" & j & "次回圈[回圈變數]的值:" & i
    Next
    MsgBox "回圈次數:" & j & Chr(13) & "最後[回圈變數]的值:" & i
End Sub
在回圈體中也可以改變[回圈變數]的值,但這會使程式碼的閱讀和調試變得非常困難,一般不提倡這樣做:
Sub t3()
    Dim i, j
    For i = 1 To 10
        i = i + 1
        j = j + 1
        MsgBox "步長值為1.5,第" & j & "次回圈[回圈變數]的值:" & i
    Next
    MsgBox "回圈次數:" & j & Chr(13) & "最後[回圈變數]的值:" & i
End Sub

在For…Next回圈中,只要步長不為0,就永遠不會出現死回圈。因為只要步長不為0,無論始值和終值之間相差多麼大,總可以經過有限次的回圈,使始值超出終值,從而跳出回圈。由此可見,For…Next適用於預先知道回圈次數的情況。
在某些情況下,可能需要在回圈變數沒有超出終值之前就跳出回圈,這時可以用Exit For語句,當滿足某種特殊的條件時,就提前跳出回圈。

從For…Next語句的格式中可以看到:其中的回圈體是可選的。若省略了回圈體,即For回圈的回圈體內沒有任何具體的語句,則其只是起到延時的作用。因為當回圈了一定次數後雖不執行任何操作,但卻花費了一定時間,故可作為延時工具使用。但要注意的是由於現在電腦的速度都比較快了,如果回圈次數比較少的話將不會達到預期的效果,因此要適當選擇回圈次數。

2.For Each…Next語句
FOR……Next語句與For…Next語句有些類似,但它們有很大的區別:前者是由指定或集合中的元素來控制回圈,而後者是由回圈變數來控制回圈過程。由此可見,For Each…語句是不需要預先知道回圈次數的,指定陣列或集合中的元素個數就是回圈次數。該語句的使用格式為:
    For Each回圈變數In陣列或集合
        回圈體
    Next回圈變數
    這堛漲^圈變數必須是變體型(Variant)或物件型(Object)的。對於陣列,回圈變數必須是變體型的;對於集合,如果集合中包含物件,則回圈變數應該是物件型,當然也可以是變體型。
當某一陣列或集合堛漫狾酗葛懦i行同一操作時,就需要使用該語句了。
同樣的可以用Exit For語句,當滿足某種特殊的條件時,就提前跳出回圈。

For Each…Next語句結束後,不會返回[回圈變數],這與For…Next語句不一樣:
Sub t4()
    Dim c
    For Each c In Array(1, 2, "aa")
    Next
    MsgBox TypeName(c)
End Sub
Sub t5()
    Dim r As Range
    For Each r In [a1:a4]
    Next
    MsgBox TypeName(r)
End Sub

3.Do…Loop語句
    Do…Loop回圈是根據某個條件是否成立來決定是否回圈。它並不限制回圈的次數,只要滿足條件就繼續回圈,直到不滿足條件時跳出回圈。注意要在回圈中改變條件,否則的話可能會陷入死回圈。

    Do…Loop語句有四種形式:
形式1:
DO
回圈體
Loop While 條件
這種形式的執行過程是:先執行一遍回圈體,然後再判斷條件是否成立,若條件成立, 繼續下一次回圈;否則,就退出回圈。

形式2:
Do While 條件
回圈體
Loop
這種形式是把“While條件”放在回圈體的前面,也就是說它的執行過程是先判斷條件是立,再決定是否繼續回圈。

形式3:
DO
回圈體
Loop Until 條件
這種形式和第一種形式有些類似,也是先執行回圈體,然後再判斷條件。與第一種形式不同,這種形式只有當條件不成立才會繼續回圈,否則就退出回圈。

形式4:
DO Until 條件
回圈體
Loop
這種形式和第二種形式有些類似,先判斷條件,再決定是否繼續回圈。與之不同的是,這種形式也是當條件不成立才會繼續回圈。

由上面四種形式的格式可以看出:
    第一種和第三種形式是先執行回圈體,然後再判斷條件,條件成立與否,至少執行一次回圈體;第二種和第四種形式,則是先判斷條件,如果條件當,回圈體可能一次也沒有執行。且“While”和“Until”正好相反,前者是條件成立時入回圈,而後者則是條件不成立時才進入回圈。使用時可根據需要選擇最適當的形式。

    在前面For…Next語句中介紹的Exit語句也適用於DO…Loop語句,只是把“Exit For”改成“Exit Do”即可,它們的作用是一樣的,都是用來提前跳出回圈的。

資料來源:微軟説明
學海無涯_不恥下問

TOP

版主:一.依你的程式碼...d(a & a.Offset(, 1)) = d(a & a.Offset(, 1)) + a.Offset(, 2)
這一段 好像會出現是"01J0507001",而不是"J0507001-01",我試著把它改成d(a.Offset(, 1)&"-"+a) = d(a.Offset(, 1)&"-"&a) + a.Offset(, 2)二.要請教你的是:d(.[A1] & .[B1]) = .[C1] 呈現的是"PL NOREF",如果我把它改成 d(.[B1] &"-"& .[A1]) = .[C1],那呈現就會是"REF-PL NO",那接下來我想把SHEET2上的B欄名也更改為"TOTAL CNT",那要如何修改

TOP

回復 8# aa7551


    d(.[B1] &"-"& .[A1]) ="TOTAL CNT"
學海無涯_不恥下問

TOP

謝謝版主,受教了,又可以往下研究,這文章有好大半還沒弄懂

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題