chèn công thức Sum tỉnh tổng các ô rời rạc bằng VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vanmanhvcu

Thành viên chính thức
Tham gia
27/3/11
Bài viết
85
Được thích
10
mình có bài toán sau đây cần các bạn chỉ giúp
đối tượng Num 1 có các loại hàng "core" và "FACE" nằm xem kẽ
nếu dùng công thức SUMIF trong Excel thì tính ngay ra được tổng "core", tổng "FACE" tại ô D2, E2
nhưng mình muốn xây dựng bài toán VBA phức tạp hơn.
đó là kiểm tra điều kiện cells(i,2) nếu là "core" hoặc"FACE" thì vị trí Cells(i,3) sẽ được đưa vào công thức SUM tại ô D2 và E2
mong các bạn chỉ giúp !tongO.jpg
 

File đính kèm

mình có bài toán sau đây cần các bạn chỉ giúp
đối tượng Num 1 có các loại hàng "core" và "FACE" nằm xem kẽ
nếu dùng công thức SUMIF trong Excel thì tính ngay ra được tổng "core", tổng "FACE" tại ô D2, E2
nhưng mình muốn xây dựng bài toán VBA phức tạp hơn.
đó là kiểm tra điều kiện cells(i,2) nếu là "core" hoặc"FACE" thì vị trí Cells(i,3) sẽ được đưa vào công thức SUM tại ô D2 và E2
mong các bạn chỉ giúp !View attachment 157950
Bài của bạn có thể dùng công cụ Consolidation, chỉ mất nhiều là 30 giây là cho kết quả.
Muốn có VBA, thử dùng thứ thô thiển nhất này xem sao
PHP:
Sub abc()
    Range("H4").FormulaR1C1 = "=SUMIF(C[-6],""core"",C[-5])"
    Range("H5").FormulaR1C1 = "=SUMIF(C[-6],""FACE"",C[-5])"
End Sub
 

File đính kèm

Upvote 0
xin cám ơn 2 bạn hpkhuongphulien1902
nhưng vẫn không đúng yêu cầu mình cần hỏi
có bạn nào viết được code như mình yêu cầu, xin hãy giúp đỡ !
 
Upvote 0
Upvote 0
Là tại bạn tự làm khó mình thôi ... tại sao lại bắt buộc phải làm như vậy
Đó là rèn luyện kỹ năng chứ ko phải làm khó cả
còn việc bắt buộc làm vậy là do yêu cầu công việc bạn nhé !
Mình ko giải quyết đc nên cần những người biết giúp đỡ
 
Upvote 0
Code thì bạn xem và tự tùy biến
Mã:
Sub BlaBla()
    Dim Cls As Range
    Dim strCore As String, strFACE As String
    For Each Cls In [B2:B16]    'Thay doi vung du lieu
        If Cls = "core" Then
            strCore = strCore & Cls.Offset(, 1).Address & ","
        End If
        If Cls = "FACE" Then
            strFACE = strFACE & Cls.Offset(, 1).Address & ","
        End If
    Next
    strCore = Replace(Left(strCore, Len(strCore) - 1), "$", "")
    [D3] = "=Sum(" & strCore & ")"
    strFACE = Replace(Left(strFACE, Len(strFACE) - 1), "$", "")
    [E3] = "=Sum(" & strFACE & ")"
End Sub
 
Upvote 0
xin cám ơn 2 bạn hpkhuongphulien1902
nhưng vẫn không đúng yêu cầu mình cần hỏi
có bạn nào viết được code như mình yêu cầu, xin hãy giúp đỡ !


Nếu muốn phức tạp thì có phức tạp đây.
PHP:
Public Sub SumSum()
Dim Rng As Range, Cll As Range, Arr(1), Cor As String, Fac As String
Set Rng = Range("B2:B16")
Cor = UCase(Range("D1"))
Fac = UCase(Range("E1"))
For Each Cll In Rng
    If UCase(Cll) = Cor Then
        Arr(0) = Arr(0) & Cll.Offset(, 1).Address & ","
    Else
        Arr(1) = Arr(1) & Cll.Offset(, 1).Address & ","
    End If
Next
Arr(0) = Replace(Arr(0), "$", "")
Arr(0) = Left(Arr(0), Len(Arr(0)) - 1)
Arr(0) = "=SUM(" & Arr(0) & ")"
Arr(1) = Replace(Arr(1), "$", "")
Arr(1) = Left(Arr(1), Len(Arr(1)) - 1)
Arr(1) = "=SUM(" & Arr(1) & ")"
Range("D2:E2") = Arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu muốn phức tạp thì có phức tạp đây.
PHP:
Public Sub SumSum()
Dim Rng As Range, Cll As Range, Arr(1), Cor As String, Fac As String
Set Rng = Range("B2:B16")
Cor = UCase(Range("D1"))
Fac = UCase(Range("E1"))
For Each Cll In Rng
    If UCase(Cll) = Cor Then
        Arr(0) = Arr(0) & Cll.Offset(, 1).Address & ","
    Else
        Arr(1) = Arr(1) & Cll.Offset(, 1).Address & ","
    End If
Next
Arr(0) = Replace(Arr(0), "$", "")
Arr(0) = Left(Arr(0), Len(Arr(0)) - 1)
Arr(0) = "=SUM(" & Arr(0) & ")"
Arr(1) = Replace(Arr(1), "$", "")
Arr(1) = Left(Arr(1), Len(Arr(1)) - 1)
Arr(1) = "=SUM(" & Arr(1) & ")"
Range("D2:E2") = Arr
End Sub

Thầy BaTe cho con hỏi : Arr(1) và Arr(0) ở đoạn Code trên cos ý nghĩa là thế nào ạ ?
 
Upvote 0
Giải thích sao bi giờ, nếu bạn tìm "mang" trong GPE sẽ thấy ít nhất là chỗ này:
http://www.giaiphapexcel.com/forum/...về-mảng-trong-VBA-(Array)&p=299781#post299781

Thầy BaTe ơi có phải khi khai báo Arr(1) thì tức là mảng này la mảng 1 chiều và nó chỉ có 2 phần tử. Phần tử thứ nhất

của mảng là Arr(0) và phần tử thứ 2 là Arr(1) phải không ạ. Hiểu như vầy đã đầy đủ và chính xác chưa hay còn gì nữa

hả thầy ...
 
Upvote 0
Thầy BaTe ơi có phải khi khai báo Arr(1) thì tức là mảng này la mảng 1 chiều và nó chỉ có 2 phần tử. Phần tử thứ nhất

của mảng là Arr(0) và phần tử thứ 2 là Arr(1) phải không ạ. Hiểu như vầy đã đầy đủ và chính xác chưa hay còn gì nữa

hả thầy ...

Chưa đầy đủ, và không chính xác
Điển hình, nếu ở đầu module có câu Option Base 1 thì mảng khai như thế chỉ có 1 phần tử.

tb. cái chữ ký của bạn nó nhảy tùm lum, cộng cái hình biểu thị chớp tới chớp lui. Đọc bài của bạn muốn nổ con mắt.
Ở mấy diễn đàn ghêm ghiếc thì vui, nhưng diễn đàn học hỏi nó mệt những người yếu tim như tôi lắm.
 
Upvote 0
tb. cái chữ ký của bạn nó nhảy tùm lum, cộng cái hình biểu thị chớp tới chớp lui. Đọc bài của bạn muốn nổ con mắt.
Ở mấy diễn đàn ghêm ghiếc thì vui, nhưng diễn đàn học hỏi nó mệt những người yếu tim như tôi lắm.
he he ... nếu vậy thì cho em xin lỗi ạ --=0--=0--=0
 
Lần chỉnh sửa cuối:
Upvote 0
cám ơn các tiền bối đã giúp đỡ
em xin cám ơn rất nhiều !
 
Upvote 0
Web KT

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

Back
Top Bottom