Hỏi công thức mảng kiểm tra bằng ấn F9, hàm mảng VBA làm cách nào để biết kết quả?

Liên hệ QC

Dauthivan

Thành viên tiêu biểu
Tham gia
15/8/08
Bài viết
565
Được thích
327
Trước kia khi học công thức mảng em rất lúng túng, khi được sư phụ ndu chỉ muốn biết thành phần nào kêt quả như thế nào chỉ việc bôi đen rồi ấn F9 là xong. Rất dễ kiểm soát.

Vất đề của em bây giờ em muốn học VBA, xem đoạn Code này ý nghĩa thế nào, viết thế nó sẽ tác động đến phần nào, sai hay đúng thì có cách nào kiểm soát được nó không?

Em thấy có bài toán trên diễn đàn, đề bài của nó như thế này:

TongTPbangVBA.jpg


Em chạy Code của bác nmhung49, kết quả rất chuẩn nhưng em không biết ý nghĩa của đoạn Cells(kqrow + 1, 3).Value = arrkq trong đoạn sau:
PHP:
Sub testtong()
Dim arr, arrkq, lRow As Long, kqrow As Long
Range("c2,c6").ClearContents
arr = Range("c2:c10").Value
For lRow = 1 To UBound(arr, 1)

    If arr(lRow, 1) = "" Then
        kqrow = lRow
        arrkq = 0
    End If
    
    arrkq = arrkq + arr(lRow, 1)
    Cells(kqrow + 1, 3).Value = arrkq
    
Next

End Sub
có nghĩa là gì?

Em thắc mắc Câu lệnh nào thể hiện điền giá trị vào 2 ô C2, C10?
(Khi lRow=4 tức nó đang xét ở dòng 5, tại sao nó lại dùng kết quả đó quay lại điền ở ô C2 nhỉ?)

Em rất muốn trau rồi kiến thức VBA, nếu có thể xin mọi người giải thích giúp em những đoạn Code trên với.

Em xin cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Em cũng đang ngu ngơ như bạn Dauthivan chỗ này tại Code trong bài #9 sư phụ ndu viết:

Range("C2:C10").Formula = sArray

Em hiểu là đổ mảng kết quả đã xử lý trong sArray ra bảng tính nhưng sao lại là Range("C2:C10").Formula (Trong sArray đang chứa value mà) vậy sao không phải là Range("C2:C10").Value, em thử thấy 2 cách code chạy vẫn ngon.
Mong các sư phụ giải thích giúp em hai cái đó có khác nhau không, trường hợp
nào thay thế được cho nhau mà không ảnh hưởng đến kết quả của CODE.
Xin cảm ơn!

Trường hợp 1: Range("C2:C10").Formula = sArray
a. sArray = value: Công thức mà không có dấu = thì vẫn là value
b. sArray = formula (có dấu bằng): Gán xuống cell mà có dấu bằng thì là công thức.

Trường hợp 2: Range("C2:C10") = sArray
a. sArray = value: Value thì vẫn là value
b. sArray = formula (có dấu bằng): Gán xuống cell 1 giá trị chuỗi mà có dấu bằng thì biến thành công thức.

Tóm lại đối với bảng tính, có dấu bằng (hoặc dấu cộng, trừ) là công thức, không có dấu bằng, là value

kết luận: khi gán xuống sheet, xài cái gì cũng được.
 
Upvote 0
Từ hôm qua đến nay theo dõi Topic này thấy hay quá!
Em cũng đang ngu ngơ như bạn Dauthivan chỗ này tại Code trong bài #9 sư phụ ndu viết:

Range("C2:C10").Formula = sArray

Em hiểu là đổ mảng kết quả đã xử lý trong sArray ra bảng tính nhưng sao lại là Range("C2:C10").Formula (Trong sArray đang chứa value mà) vậy sao không phải là Range("C2:C10").Value, em thử thấy 2 cách code chạy vẫn ngon.
Mong các sư phụ giải thích giúp em hai cái đó có khác nhau không, trường hợp
nào thay thế được cho nhau mà không ảnh hưởng đến kết quả của CODE.
Xin cảm ơn!
Nếu dùng Formula thì sẽ lấy luôn công thức... cách này thường áp dụng ở trường hợp mà dữ liệu có công thức sẵn, nếu dùng Value để "đổ" vào thì công thức trước đó sẽ bị mất
Riêng với bài này thì Formula hay Value gì cũng được, chẳng qua trong quá trình thí nghiệm tôi sơ suất nên đã để lại chữ "Formula"
Giả định rằng vùng C2:C10 có công thức (chẳng hạn là =IF(G2="","",G2)...) và ta muốn rằng sau khi "đổ" dữ liệu vào sẽ bảo toàn luôn công thức trước đó thì sẽ dùng Formula thế này:
PHP:
Sub Test()
  Dim vArr, fArr, lR As Long, tmp As Double
  On Error Resume Next
  fArr = Range("C2:C10").Formula
  vArr = Range("C2:C10").Value
  For lR = UBound(fArr, 1) To 1 Step -1
    tmp = tmp + vArr(lR, 1)
    If vArr(lR, 1) = "" Then
      fArr(lR, 1) = tmp
      tmp = 0
    End If
  Next
  Range("C2:C10").Formula = fArr
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom