Board logo

標題: [發問] [發問] VBA填入公式 [打印本頁]

作者: ABK    時間: 2018-12-4 14:28     標題: [發問] VBA填入公式

請教一下  
我想在B欄提取A欄資料的左邊三位字元,
資料檔有時候幾百行,有時候會 2千多行 ,
想使用VBA 在B欄填入公式,要如何寫 ?
作者: rouber590324    時間: 2018-12-4 15:03

試試

Sub TEST()
Sheet1.[B2:B65536].ClearContents
X = Sheet1.[A65536].End(xlUp).Row
Y = Sheet1.[B65536].End(xlUp).Row
  For M = 2 To X
   Sheet1.Cells(Y + 1, 2) = Mid(Sheet1.Cells(M, 1), 1, 3)
   Y = Y + 1
  Next
End Sub
作者: ABK    時間: 2018-12-4 17:14

回復 2# rouber590324


    感謝Rouber大 !
作者: ABK    時間: 2018-12-4 17:19

除了迴圈 還其他的方法嗎?
一個工作簿 有時候要跑 40多個Sheet, 每一個Sheet 都有一兩千行資料,
用迴圈跑要耗一些時間 !
作者: n7822123    時間: 2018-12-5 01:21

回復 4# ABK


40個sheet 每個sheet算2000筆,也才8萬筆資料呀

VBA寫的好應該不需要太久才是,寫函數保證更慢,更卡
作者: Scott090    時間: 2018-12-5 05:45

回復 4# ABK


    用陣列處理應該會比每個儲存格分別處理來得快
作者: n7822123    時間: 2018-12-5 13:38

本帖最後由 n7822123 於 2018-12-5 13:41 編輯

回復 6# Scott090


scotto90 大大所言即是,用陣列會比較快,
因為版大沒有提供檔案,所以我就只寫一個sheet的VBA做為參考

Sub test()
Dim Arr, i%
Arr = Range([A1], Cells(Rows.Count, 1).End(3))
For i = 1 To UBound(Arr): Arr(i, 1) = Left(Arr(i, 1), 3): Next
[B1].Resize(UBound(Arr)) = Arr
End Sub
作者: Scott090    時間: 2018-12-6 14:50

回復 7# n7822123


    假設工作簿內每個工作表的格式都一樣
    且工作表的第一列是欄位名稱
    Sub test()
      Dim Arr, sh
      For Each sh In Sheets
            With sh
                  Arr = Range(.[A2], .[A1].Cells(.Rows.Count, 1).End(3))
                  For i = 1 To UBound(Arr): Arr(i, 1) = Left(Arr(i, 1), 3): Next
                  .[B2].Resize(UBound(Arr)) = Arr
            End With
      Next
   End Sub

  這樣也許可以很快把40幾個工作表做完
作者: Scott090    時間: 2018-12-6 15:21

回復 1# ABK


    在 B 攔填入公式:

    cells(2,"B").formula = "= LEFT(A2,3)"
    cells(3,"B").formula = "= LEFT(A3,3)"
作者: n7822123    時間: 2018-12-7 00:15

本帖最後由 n7822123 於 2018-12-7 00:20 編輯

回復 8# Scott090


喔喔,沒注意到第一列是標題列
用VBA寫函數就更簡單了,不用迴圈,一行解決
函數裡的A2會自動變更為A3,A4,A5

[B2].Resize([A1].End(4).Row-1) = "=LEFT(A2,3)"
作者: Scott090    時間: 2018-12-7 07:12

回復 10# n7822123


    謝謝,我學習了這一招:
         "用VBA寫函數就更簡單了,不用迴圈,一行解決
           函數裡的A2會自動變更為A3,A4,A5"

      我曾經在其他地方寫的模式是把列 用 i 當變數:
         .Cells(i, "B").Formula = "=LEFT(A" & i & ",3)"
作者: ABK    時間: 2018-12-11 11:47

回復 10# n7822123


謝謝阿龍大!
我是每周會有一個Excel 資料檔產生, 要做統計分析一年的資料,
我目前的做法是用一個工作簿用VBA匯入52週的資料建成52工作頁,在每頁匯入完成時順便填入公式做出各列的所屬類別以便統計。
我先置入阿龍大的程式跑跑看,再把檔案PO上來!
作者: ABK    時間: 2018-12-11 11:52

回復 11# Scott090


    感謝Scott大!

   每一個工作頁的格式都一樣, 我來試一下程式,再把檔案補貼上來!




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