返回列表 上一主題 發帖

[發問] [發問] VBA填入公式

[發問] [發問] VBA填入公式

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

VBA寫入公式.png (37.65 KB)

VBA寫入公式.png

試試

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

TOP

回復 2# rouber590324


    感謝Rouber大 !

TOP

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

TOP

回復 4# ABK


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

VBA寫的好應該不需要太久才是,寫函數保證更慢,更卡
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 4# ABK


    用陣列處理應該會比每個儲存格分別處理來得快

TOP

本帖最後由 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
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 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幾個工作表做完

TOP

回復 1# ABK


    在 B 攔填入公式:

    cells(2,"B").formula = "= LEFT(A2,3)"
    cells(3,"B").formula = "= LEFT(A3,3)"

TOP

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

回復 8# Scott090


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

[B2].Resize([A1].End(4).Row-1) = "=LEFT(A2,3)"
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題