Thêm hàng và tính tổng

Trạng thái
Không mở trả lời sau này.

HungVinh

Yêu THVBA
Xin chào các anh chị,
anh chị giúp em làm file đính kèm với ạ.
em đang tìm hiểu VBA nên câu hỏi chắc ngu ngơ với đơn giản, hơi kém trình bày. Mong mọi người giúp đỡ.
mong muốn làm được như sheet " Edit" bằng VBA
thêm dòng + điền công thức tính Sum
em cảm ơn
P/S: mà có cách nào attach file ko phải upload gg drive ko mọi người?
 

tuhocvba

Administrator
Thành viên BQT
Không thể nói là không code được nhưng thiết kế như bạn nêu là gây khó khăn cho người code.
Bạn cần đăng nhập để thấy hình ảnh

Khi chèn dòng vào để ghi kết quả, thì dòng cuối của bảng dữ liệu bị thay đổi. Đây là việc gây khó khăn cho người code.
Nếu thay đổi thiết kế, không yêu cầu chèn dòng, ghi kết quả vào cột I, thì việc code sẽ dễ dàng hơn.
Bạn cần đăng nhập để thấy hình ảnh


Tuy nhiên, bài toán của bạn, không nhất thiết phải dùng Code VBA, vì Excel đã hỗ trợ tốt rồi, bạn sử dụng .
Sau khi tạo Privot Table, tích chọn vào số lượng quà và ghi chú, sẽ ra phần kết quả bạn muốn theo dõi.
Bạn cần đăng nhập để thấy hình ảnh
 

HungVinh

Yêu THVBA
em cám ơn anh đã chia sẻ 1 cách.
em muốn tìm hiểu về VBA ạ
em cũng thử code mà Last row cứ nhảy nên em nghĩ sẽ có thủ thuật khác để em tham khảo
ví dụ có thể copy hoặc cut sang 1 sheet khác ấy ạ.
anyway, em cám ơn
 

Euler

Administrator
Thành viên BQT
Đã nói là thiết kế không tốt thì bạn nên suy nghĩ thay đổi thiết kế. Chứ không ai nói là không code được, nhưng tính hiệu quả không cao.
Giả thiết đây là mệnh lệnh bắt buộc phải làm, thì nhìn chung vẫn làm được.
Việc chuyển dữ liệu sang sheet khác là việc vạn bất đắc dĩ, vì nó gây chậm chương trình không thể nào tả nổi.

Một cách nữa là ghi vào mảng, kích thước mảng tăng liên tục sau mỗi dòng dữ liệu. Bạn cũng có thể thêm dòng để ghi kết quả. Tốc độ sẽ ổn hơn, nhưng cũng gây rườm rà cho người code.

Một cách khác là ghi vào dictionary với key chính là cái cột H, Item là số lượng-tự tính khỏi cần dùng công thức SUM.
Sau đó thì quay lại insert dòng và ghi kết quả vào.

Cách nữa, đó là cứ chạy insert dòng trống trước.
Cuối cùng mới xác định dòng cuối của dữ liệu, và thực thi ghi kết quả.

Bạn chú ý, mỗi bài viết trên diễn đàn có mức độ ưu tiên khác nhau, vì không ai thừa thời gian.
Làm giúp-tức là tính cấp thiết cao, công việc phải hoàn thành.
Muốn tìm hiểu-tức là có thời gian thì tìm hiểu chơi.

Nếu ngay từ đầu topic, bạn nói chỉ là muốn tìm hiểu, thì hay hơn.
 

HungVinh

Yêu THVBA
em cám ơn anh đã chia sẻ một số gợi ý cũng như chú ý trong khi post bài
 

giaiphapvba

Administrator
Thành viên BQT
Cố làm thì vẫn được. Nhưng đúng là ý tưởng của bạn là không tốt.
Mã:
'Thong ti ung ho dien dan tuhocvba.net
'Ngan hang thuong mai co phan ngoai thuong viet nam Vietcombank
'So tai khoan: 0011003264055
'Chi nhanh ngan hang: Quan Hoan Kiem, Ha Noi
'Chu tai khoan: Pham Minh Hoang
Sub tuhocvba()
    Dim i           As Long, rend As Long, r1 As Long, r2 As Long, n1 As Long, n2 As Long
    Dim shn         As String
    Dim s1          As String, s2 As String, s3 As String
    Const rstart    As Long = 2
    Const coth      As Integer = 8
    Const cotg      As Integer = 7
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    shn = ThisWorkbook.ActiveSheet.Name
    
    rend = ThisWorkbook.Sheets(shn).Cells(Rows.Count, 1).End(xlUp).Row
    If rend <= (rstart + 1) Then Exit Sub
    'Dan dong
    For i = rend To rstart + 1 Step -1
        s1 = ThisWorkbook.Sheets(shn).Cells(i, coth)
        s2 = ThisWorkbook.Sheets(shn).Cells(i - 1, coth)
        
        If s1 <> "" And s2 <> "" And s1 <> s2 Then
            ThisWorkbook.Sheets(shn).Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
        
    Next i
    
    'Ghi cong thuc
    rend = ThisWorkbook.Sheets(shn).Cells(Rows.Count, 1).End(xlUp).Row
    For i = rstart + 1 To rend Step 1
        s1 = ThisWorkbook.Sheets(shn).Cells(i, coth)
        s2 = ThisWorkbook.Sheets(shn).Cells(i + 1, coth)
        s3 = ThisWorkbook.Sheets(shn).Cells(i - 1, coth)
        
        If s1 <> s3 And s1 <> "" Then r1 = i
        If s1 <> s2 And s2 = "" Then
            r2 = i
            'Ghi cong thuc
            n1 = r1 - (i + 1)
            n2 = r2 - (i + 1)
            ThisWorkbook.Sheets(shn).Cells(i + 1, cotg).FormulaR1C1 = "=SUM(R[" & n1 & "]C:R[" & n2 & "]C)"
        End If
    Next i
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
 

HungVinh

Yêu THVBA
Em cám ơn nhiều
ý tưởng không tốt nên làm bài toán phức tạp quá. Em chú ý hơn
cám ơn Adm đã hỗ trợ nhiệt tình
 

giaiphapvba

Administrator
Thành viên BQT
Không có gì, tôi chỉ code lại ý tưởng ở #4 của anh Euler. Chúng tôi đều học hỏi từ admin tuhocvba, việc code cho bạn cũng chỉ đơn thuần là để luyện tập lại kỹ năng code.
 
Trạng thái
Không mở trả lời sau này.
Top