Tìm dòng tổng cộng ?

Liên hệ QC

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,894
Được thích
1,213
Xin chào các Bạn,
Hiện OT đang có dữ liệu như ảnh (tập tin gửi kèm), nhờ các Bạn xem & giúp đỡ OT trường hợp "code tự tìm dòng tổng và điền công thức vào các dòng tổng cộng màu vàng" với ạ.
Chúc cả nhà ngày mới ngập tràn niềm vui.
Untitled.jpg
 

File đính kèm

  • TongCong.xlsx
    70 KB · Đọc: 16
Xin chào các Bạn,
Hiện OT đang có dữ liệu như ảnh (tập tin gửi kèm), nhờ các Bạn xem & giúp đỡ OT trường hợp "code tự tìm dòng tổng và điền công thức vào các dòng tổng cộng màu vàng" với ạ.
Chúc cả nhà ngày mới ngập tràn niềm vui.
View attachment 236550
Ý chị là tìm dòng nào chứa dòng chữ tổng cộng và sau đó sum từ trên xuống phải không?
 
Upvote 0
Xin chào các Bạn,
Hiện OT đang có dữ liệu như ảnh (tập tin gửi kèm), nhờ các Bạn xem & giúp đỡ OT trường hợp "code tự tìm dòng tổng và điền công thức vào các dòng tổng cộng màu vàng" với ạ.
Chúc cả nhà ngày mới ngập tràn niềm vui.
View attachment 236550
Bài này OT tự viết code được mà. Duyệt một vòng lặp for next, r đầu tiên= 2, sau đó r= i+1 khi xác định dòng cần tính tổng. Thử đi
 
Upvote 0
Upvote 0
Xin chào các Bạn,
Hiện OT đang có dữ liệu như ảnh (tập tin gửi kèm), nhờ các Bạn xem & giúp đỡ OT trường hợp "code tự tìm dòng tổng và điền công thức vào các dòng tổng cộng màu vàng" với ạ.
Chúc cả nhà ngày mới ngập tràn niềm vui.
View attachment 236550
Hỏi bài trong Box Lập trình, thử chạy Sub này xem sao:
PHP:
Public Sub s_Gpe()
Dim Rng As Range, I As Long, K As Long, R As Long
Set Rng = Range("B2", Range("B2").End(xlDown)).Resize(, 2)
    R = Rng.Rows.Count
For I = 1 To R - 1
    If Not Rng(I, 1) Like "Tong*" Then
        K = K + 1
    Else
        Rng(I, 2) = "=SUM(R[-" & K & "]C:R[-1]C)"
        K = 0
    End If
Next I
Rng(R, 2) = "=SUMIF(R2C[-1]:R[-1]C[-1],""Tong*"",R2C:R[-1]C)"
End Sub
 
Upvote 0
Xin chào các Bạn,
Hiện OT đang có dữ liệu như ảnh (tập tin gửi kèm), nhờ các Bạn xem & giúp đỡ OT trường hợp "code tự tìm dòng tổng và điền công thức vào các dòng tổng cộng màu vàng" với ạ.
Chúc cả nhà ngày mới ngập tràn niềm vui.
Theo tôi thì không cần dòng tổng, khi sử dụng Subtotal thì nó tự động insert dòng tổng.
 
Upvote 0
Hỏi bài trong Box Lập trình, thử chạy Sub này xem sao:
PHP:
Public Sub s_Gpe()
Dim Rng As Range, I As Long, K As Long, R As Long
Set Rng = Range("B2", Range("B2").End(xlDown)).Resize(, 2)
    R = Rng.Rows.Count
For I = 1 To R - 1
    If Not Rng(I, 1) Like "Tong*" Then
        K = K + 1
    Else
        Rng(I, 2) = "=SUM(R[-" & K & "]C:R[-1]C)"
        K = 0
    End If
Next I
Rng(R, 2) = "=SUMIF(R2C[-1]:R[-1]C[-1],""Tong*"",R2C:R[-1]C)"
End Sub
Ùi, đơn giản vậy mà OT loay hoay mãi mà không viết được ạ,dạ vâng đúng là con cần xử lý vấn đề bằng code Thầy ạ
Xin cảm ơn Thầy Ba Tê & các Anh/Chị đã quan tâm & giúp đỡ OT ạ.
 
Upvote 0
Hỏi bài trong Box Lập trình, thử chạy Sub này xem sao:
PHP:
Public Sub s_Gpe()
Dim Rng As Range, I As Long, K As Long, R As Long
Set Rng = Range("B2", Range("B2").End(xlDown)).Resize(, 2)
    R = Rng.Rows.Count
For I = 1 To R - 1
    If Not Rng(I, 1) Like "Tong*" Then
        K = K + 1
    Else
        Rng(I, 2) = "=SUM(R[-" & K & "]C:R[-1]C)"
        K = 0
    End If
Next I
Rng(R, 2) = "=SUMIF(R2C[-1]:R[-1]C[-1],""Tong*"",R2C:R[-1]C)"
End Sub

Phiền Thầy & các Bạn chỉ giúp OT nếu viết công thức theo dạng này :
"=SUM(C2:C4)"
"=SUMIF(B$2:B25,""Tong*"",C$2:C25)"

Thì:
"=SUM(R[-" & K & "]C:R[-1]C)"
"=SUMIF(R2C[-1]:R[-1]C[-1],""Tong*"",R2C:R[-1]C)"
Sẽ phải sửa lại như thế nào ạ.
 
Upvote 0
Xin chào các Bạn,
Hiện OT đang có dữ liệu như ảnh (tập tin gửi kèm), nhờ các Bạn xem & giúp đỡ OT trường hợp "code tự tìm dòng tổng và điền công thức vào các dòng tổng cộng màu vàng" với ạ.
Chúc cả nhà ngày mới ngập tràn niềm vui.
View attachment 236550
Mã:
Sub Cong_Tong()
Dim sArr(), i As Long, r As Long
sArr = Range("A2", [A65536].End(3)(3)).Resize(, 3).Value
r = 2
For i = 1 To UBound(sArr)
   If sArr(i, 2) Like "Tong*" Then
      sArr(i, 3) = "=sum(R" & r & "C:R[-1]C)"
      r = i + 2
   End If
Next
sArr(UBound(sArr), 3) = "=sum(R2C:R[-1]C)/2"
[A2].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
Một kiểu viết khác cho vui
Nói nhỏ chuyện này chút cho có chuyện bàn nha. OT tham gia nay cũng lâu rồi, thỉnh thoảng thấy chọt luôn đến ADO, vậy là code cơ bản này không chịu tự viết hén. Hay là cũng tạo topic cho có bài viết để cho mọi người mau lên sao *****
 
Lần chỉnh sửa cuối:
Upvote 0
Dữ liệu không bị đục lỗ thì Auto Sum thôi là được mà.
Ở đây, hễ người ta đã hỏi VBA thì ngừoi ta không chấp nhận cách khác.

...Nói nhỏ chuyện này chút cho có chuyện bàn nha. OT tham gia nay cũng lâu rồi, thỉnh thoảng thấy chọt luôn đến ADO, vậy là code cơ bản này không chịu tự viết hén. Hay là cũng tạo topic cho có bài viết để cho mọi người mau lên sao *****
Access Query lấy SubTotals cùng với chi tiết không đơn giản lắm.
Gợi ý: nếu là tôi làm với ADO bài này thì dùng 1 query lấy Sunbtotals. Đọc từng dòng của recordset và nhét vào mảng kết quả. Xong nhét thêm dòng GrandTotal ở dưới.

@các tác giả bài #6 và #8:
Code duyệt từng dòng có "chỗ mượt" (sweet spots) tuỳ thuộc vào dữ liệu. Nói cách khác, độ mượt của code tuỳ theo tình trang thực tế của dữ liệu.
Nếu chi tiết nhiều so với số mã hàng thì cách duyệt từng dòng sẽ không hữu hiệu bằng dùng hàm Find hoặc Match để tìm vị trí các dòng chứa từ "tong cong"
Bạn có thể thử test tốc độ của tỷ số 5/1, 10, 50, 100,... để tìm khoảng mượt của code. (5/1 là trung bình 5 chi tiết cho một mã hàng). Tôi đoán là điểm mượt sẽ bắt đầu giảm khoảng tỷ số trên 10.
Phân tích hiệu quả của code với thực trạng dữ liệu là một kỹ thuật mà các lập trình chuyên nghiệp nên trau giồi.
 
Upvote 0
Góp vui bằng phương thức FIND():
PHP:
Sub TongCongTheoFIND()
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 Dim Rw As Long, HDg As Long
 
 Set Rng = Range([B2], [B65500].End(xlUp))
 Rw = 2
 Set sRng = Rng.Find("Tong cong ", , xlFormulas, xlPart)
 If Not sRng Is Nothing Then
    MyAdd = sRng.Address
    Do
        HDg = sRng.Row - Rw
        sRng.Offset(, 1).FormulaR1C1 = "=SUM(R[" & -HDg & "]C:R[-1]C)"
        Rw = sRng.Row + 1
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
    Set sRng = [C65500].End(xlUp):              Rw = sRng.Row - 1
    HDg = sRng.Row - 2
    sRng.FormulaR1C1 = "=SUM(R[" & -HDg & "]C:R[-1]C)/2"
End Sub
$$$$@
 
Upvote 0
Câu SQL cho ADO, theo tinh thần bài #13 là
(Select maHang, SUM(field1) As STtl1, SUM(field2) As Sttl2, ... From [cái gì đó'] Group By maHang
Union All
Select 'zzz' Grand Total', SUM(field1) As STtl1, SUM(field2) As Sttl2, ... From [cái gì đó']) Order by maHang

Chú thích: vừa sửa câu, bỏ dấu ) cuối cùng: dư
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub Cong_Tong()
....
End Sub
Một kiểu viết khác cho vui
Nói nhỏ chuyện này chút cho có chuyện bàn nha. OT tham gia nay cũng lâu rồi, thỉnh thoảng thấy chọt luôn đến ADO, vậy là code cơ bản này không chịu tự viết hén. Hay là cũng tạo topic cho có bài viết để cho mọi người mau lên sao *****
Hic anh quanghai1969 ơi , Ot muốn viết lắm nhưng cảm thấy không đủ tự tin và tư duy thực sự không thể nghĩ ra nên không làm được anh ạ.
Anh cứ nói chạm chọt đến ADO mọi người tưởng ghê gớm lắm, hễ va gì OT hỏi nấy thôi , nếu trong vòng cỡ một tuần OT không nghĩ đến là quên và không thể làm đc ji luôn annh ah.
Có thời điểm OT nghĩ mình bờ rồ lắm nhưng sau thời gian nghỉ dài(nghỉ sinh) là đâu vào đó T_T.. huhu
Có bí quyết ji nhớ lâu không anh ?
Bài đã được tự động gộp:

Câu SQL cho ADO, theo tinh thần bài #13 là
(Select maHang, SUM(field1) As STtl1, SUM(field2) As Sttl2, ... From [cái gì đó'] Group By maHang
Union All
Select 'zzz' Grand Total', SUM(field1) As STtl1, SUM(field2) As Sttl2, ... From [cái gì đó']) Order by maHang

Chú thích: vừa sửa câu, bỏ dấu ) cuối cùng: dư

Con cảm ơn Bác VetMini nhiều ạ, đúng là hiện giờ con đang hướng tới và được phép sử dụng dữ liệu trong SQL tại máy chủ (do may mắn vì cái tính bala hóng hớt nhiều) Bác ạ.
Thực sự khi biết đến CSDL/Database con cảm thấy khi thiết lập một dữ liệu gì đó nó phải có chuẩn mực kiểu như vầy (không được lôm côm),,, sau đó muốn làm ji cũng được.. công nhận biết đến SQL/ADO như là một cửa sổ mới vậy hihi.
Kính mong nhận được chỉ dẫn & góp ý của Bác a.
Con cảm ơn Bác.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom