Board logo

標題: [發問] (已解決)插入一行vba問題 [打印本頁]

作者: freeffly    時間: 2011-1-14 17:38     標題: (已解決)插入一行vba問題

本帖最後由 freeffly 於 2012-2-22 17:06 編輯

下面是人家提供給我的
有幾各地方看不太懂
想問一下為什麼Do While one= two 下面還要加   
      A = A + 1
    two = Cells(A, 3).Value
這兩行?
最後一各loop的上面為何還要加
A = A + 1


Sub 插入一行()
    Dim A As Long, one As Variant, two As Variant
    A = 5
    Do While Cells(A, 3).Value <> ""
    one = Cells(A, 3).Value
    A = A + 1
    two = Cells(A, 3).Value
    Do While one = two
    A = A + 1
    two = Cells(A, 3).Value
    Loop
    ActiveSheet.Rows(A).Insert
    A = A + 1
    Loop
   
End Sub
作者: freeffly    時間: 2011-1-14 17:40

我用這個程式是想要在某一欄編號開始不一樣時插入一行做區隔
別人提供給我的程式看起來很簡單
可是我有點不太理解
麻煩大大解釋一下
作者: Hsieh    時間: 2011-1-14 19:49

本帖最後由 Hsieh 於 2011-1-14 19:53 編輯

回復 2# freeffly
  1. Sub 插入一行()
  2.     Dim A As Long, one As Variant, two As Variant
  3.     A = 5 '開始列
  4.     Do While Cells(A, 3).Value <> "" 'C欄不是空白就繼續迴圈
  5.     one = Cells(A, 3).Value  '起始值
  6.     A = A + 1 '加一列
  7.     two = Cells(A, 3).Value  '第2個C欄值
  8.     Do While one = two  '如果起始值跟下一個C欄值相同就繼續迴圈
  9.     A = A + 1 '下一列
  10.     two = Cells(A, 3).Value '下一個C欄值
  11.     Loop
  12.     ActiveSheet.Rows(A).Insert '遇到不同值時該列插入
  13.     A = A + 1 '下一列,因為已經插入一列必須在往下一列才是不同值的第一個位置
  14.     Loop
  15.    
  16. End Sub
複製代碼
簡化一下你會更清楚邏輯
  1. Sub ex()
  2. r = 5
  3. Do While Cells(r, 3) <> ""
  4. first = Cells(r, 3)
  5. Do While Cells(r, 3) = first
  6.    r = r + 1
  7. Loop
  8. Rows(r).Insert
  9. r = r + 1
  10. Loop
  11. End Sub
複製代碼

作者: linshin1999    時間: 2011-1-14 23:02

回復 3# Hsieh


    Hsieh 版主配服你的耐心,真的一行行的一一加以說明,真的很用心啊!
作者: b9208    時間: 2011-1-15 10:25

感謝版主們無私分享

隨時進來論壇總是可學習到VBA的使用技術

謝謝
作者: freeffly    時間: 2011-1-16 18:29

回復 3# Hsieh


   謝謝解說
  簡化的版本比較容易理解
作者: cji3cj6xu6    時間: 2014-9-5 15:22

我的機器A好像比較老舊,因此,新增一列需要十幾秒的時間,
但機器B則快速許多,請問有辦法可以在機器A上搞定嗎?
都是office2010的版本

謝謝∼
作者: luhpro    時間: 2014-9-5 22:57

本帖最後由 luhpro 於 2014-9-5 23:03 編輯
我的機器A好像比較老舊,因此,新增一列需要十幾秒的時間,
但機器B則快速許多,請問有辦法可以在機器A上搞 ...
cji3cj6xu6 發表於 2014-9-5 15:22

那就只搬動需要搬動的儲存格即可.

簡化版程式碼內第 7 ~ 8 行中間插入 :
c =  ActiveSheet.UsedRange.Columns.Count
第 8 行  Rows(r).Insert 改成 :

Range(Cells(r, 1), Cells(r, c)).Insert xlShiftDown
   或
Cells(r, 1).Resize(, c).Insert xlShiftDown

即可.
作者: cji3cj6xu6    時間: 2014-9-6 21:34

謝謝l大,
下周再看看可行否?
作者: cji3cj6xu6    時間: 2014-9-9 10:56

我想,資料太龐大了,所以,直接用滑鼠按下插入功能,也要花上幾十秒,看來與程式無關。
謝謝提供語法∼




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)