Lấy giá trị của công thức bằng VBA

Liên hệ QC

hongphuong1997

Thành viên tiêu biểu
Tham gia
12/11/17
Bài viết
727
Được thích
293
Giới tính
Nữ
Nhờ các thấy cô và các bạn trên diễn đàn làm giúp như file em đính kèm
Em cảm ơn
 

File đính kèm

  • Lấy giá trị từ công thức bằng VBA.xlsm
    14.2 KB · Đọc: 35
Nhờ các thấy cô và các bạn trên diễn đàn làm giúp như file em đính kèm
Em cảm ơn
Dùng code này xem sao bạn. kết quả điền vào b18
Mã:
Sub Giatri_()
Dim Rng As Variant
Dim Res() As Long
Dim i As Long, j As Long
Rng = Sheet1.Range("b2").CurrentRegion
ReDim Res(1 To UBound(Rng) - 1, 1 To UBound(Rng, 2))
For j = 1 To UBound(Rng, 2)
    For i = 2 To UBound(Rng)
        Res(i - 1, j) = Rng(i - 1, j) + Rng(i, j)
    Next i
Next j
Sheet1.Range("b18").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
 
Upvote 0
Dùng code này xem sao bạn. kết quả điền vào b18
Mã:
Sub Giatri_()
Dim Rng As Variant
Dim Res() As Long
Dim i As Long, j As Long
Rng = Sheet1.Range("b2").CurrentRegion
ReDim Res(1 To UBound(Rng) - 1, 1 To UBound(Rng, 2))
For j = 1 To UBound(Rng, 2)
    For i = 2 To UBound(Rng)
        Res(i - 1, j) = Rng(i - 1, j) + Rng(i, j)
    Next i
Next j
Sheet1.Range("b18").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
Em cảm ơn anh @CHAOQUAY
Anh ui, nhưng em muốn lấy giá trị mà vẫn dùng hàm thì làm cách nào hở anh? (Tức là vẫn dùng hàm sum()) anh à
 
Upvote 0
Em cảm ơn anh @CHAOQUAY
Anh ui, nhưng em muốn lấy giá trị mà vẫn dùng hàm thì làm cách nào hở anh? (Tức là vẫn dùng hàm sum()) anh à
Đã dùng code để tính toán thì cần gì phải dùng hàm sẵn có của Excel nữa?
Còn nếu bạn vẫn muốn dùng hàm thì cứ thử record macro với 2 thao tác: Nhập công thức cho vùng --> Copy và Paste values vào vùng vừa nhập công thức.
 
Upvote 0
Đã dùng code để tính toán thì cần gì phải dùng hàm sẵn có của Excel nữa?
Còn nếu bạn vẫn muốn dùng hàm thì cứ thử record macro với 2 thao tác: Nhập công thức cho vùng --> Copy và Paste values vào vùng vừa nhập công thức.
Vâng ạ
Nhưng mà vùng công thức lớn quá thì nó chạy chậm anh à
Như code của em làm trong bài thì phải dùng toàn bộ bằng công thức sau đó mới dán .Value
Chậm lắm anh ui
 
Upvote 0
Vâng ạ
Nhưng mà vùng công thức lớn quá thì nó chạy chậm anh à
Như code của em làm trong bài thì phải dùng toàn bộ bằng công thức sau đó mới dán .Value
Chậm lắm anh ui
Chính code ở bài #2 khắc phục vấn đề chạy chậm rồi đấy, cho vào mảng và tính toán trong đó, rồi gán kết quả lại lên sheet là ngon lành nhất rồi. Vậy mà bạn lại không muốn dùng, lại muốn dùng công thức chứ bộ.
 
Upvote 0
Chính code ở bài #2 khắc phục vấn đề chạy chậm rồi đấy, cho vào mảng và tính toán trong đó, rồi gán kết quả lại lên sheet là ngon lành nhất rồi. Vậy mà bạn lại không muốn dùng, lại muốn dùng công thức chứ bộ.
Vâng ạ!
Nhưng mờ em đang vọc vạch VBA nên em muốn dùng công thức cho nó tiện anh à
Bởi vì trình độ viết code của em chưa thể làm được những điều đó
Em có đọc mấy bài của anh về lấy giá trị của công thức roài
Nhưng với trường hợp của em thì làm như nào hở anh
nghiaphuc
 
Upvote 0
Vâng ạ!
Nhưng mờ em đang vọc vạch VBA nên em muốn dùng công thức cho nó tiện anh à
Bởi vì trình độ viết code của em chưa thể làm được những điều đó
Em có đọc mấy bài của anh về lấy giá trị của công thức roài
Nhưng với trường hợp của em thì làm như nào hở anh
nghiaphuc
Ví dụ như thế này:
Mã:
Sub Test()
    Dim i As Long
    For i = 2 To 14 Step 6
        With Sheet1.Cells(11, i).Resize(6, 4)
            .FormulaR1C1 = "=SUM(R[-9]C:R[-8]C)"
            .Value = .Value
        End With
    Next
End Sub
 
Upvote 0
Thay câu này
Mã:
Res(i - 1, j) = Rng(i - 1, j) + Rng(i, j)
Bằng câu này
Mã:
Res(i - 1, j) = WorksheetFunction.Sum(Rng(i - 1, j), Rng(i, j))
 
Upvote 0
Ví dụ như thế này:
Mã:
Sub Test()
    Dim i As Long
    For i = 2 To 14 Step 6
        With Sheet1.Cells(11, i).Resize(6, 4)
            .FormulaR1C1 = "=SUM(R[-9]C:R[-8]C)"
            .Value = .Value
        End With
    Next
End Sub
Em cảm ơn anh
nghiaphuc
CHAOQUAY

và tất cả các bạn trên diễn đàn
Bài đã được tự động gộp:

Thay câu này
Mã:
Res(i - 1, j) = Rng(i - 1, j) + Rng(i, j)
Bằng câu này
Mã:
Res(i - 1, j) = WorksheetFunction.Sum(Rng(i - 1, j), Rng(i, j))
Anh ơi code của anh chạy được có 1 mảng, còn mấy mảng khác thì như nào hở anh?
 
Upvote 0
Web KT
Back
Top Bottom