Chèn thêm dòng vào bảng tính (2 người xem)

  • Thread starter Thread starter hendiv
  • Ngày gửi Ngày gửi
Liên hệ QC

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

hendiv

Thành viên mới
Tham gia
10/1/11
Bài viết
9
Được thích
0
Chào anh chị GPE,

Em đang đang tập tành viết VBA nhưng viết mãi k xong đề bài này. Mong anh chị giúp đỡ.

Đề bài: Sheet Đơn giá hiện tại đang có một số sp nhất định. Bây giờ muốn:
- Thêm vào N dòng mã hàng ( giá, chi phí,số lượng...) vào sheet ĐƠN GIÁ
- Sau đó tự copy những dòng thêm vào -> vào trên dòng có chữ " Tổng" tất cả các sheet từ T1-T12
- Và tính lại tổng mới

Ps:
E đã search mấy bài trong room nhưng vẫn k làm dc, mong các bác giúp em với. Em cám ơn.
 

File đính kèm

Chào anh chị GPE,

Em đang đang tập tành viết VBA nhưng viết mãi k xong đề bài này. Mong anh chị giúp đỡ.

Đề bài: Sheet Đơn giá hiện tại đang có một số sp nhất định. Bây giờ muốn:
- Thêm vào N dòng mã hàng ( giá, chi phí,số lượng...) vào sheet ĐƠN GIÁ
- Sau đó tự copy những dòng thêm vào -> vào trên dòng có chữ " Tổng" tất cả các sheet từ T1-T12
- Và tính lại tổng mới

Ps:
E đã search mấy bài trong room nhưng vẫn k làm dc, mong các bác giúp em với. Em cám ơn.

Không cần chèn thêm dòng có được không?
 
Không cần chèn thêm dòng có được không?
E k hiểu kỹ ý bác lắm nhưng nhìn chung là khi cập nhật thêm sản phẩm ở sheet này, chỉ cần chạy code update một cái là danh sách sản phẩm ở các sheet khác cũng dc cập nhật bác ạ.
bác xem qua file e đính kèm lên giúp e với
 
Trước khi tiến hành, xin cho fép được tỏ vài điều:

1./ Ở các trang "Txx" có nhiều dòng chứa từ 'Tổng'
Vậy ta fải thêm hết trên nó hay sao?

2./ Bài này có áp dụng vô thực tế công việc hay chỉ là tìm giải thuật đơn thuần để nâng cao trình độ VBA?

3./ Khi thêm như vậy, cột 'SoLuong' ở các trang 'Txx' sẽ là những số ngẫu nhiên hay sao?
 
Trước khi tiến hành, xin cho fép được tỏ vài điều:

1./ Ở các trang "Txx" có nhiều dòng chứa từ 'Tổng'
Vậy ta fải thêm hết trên nó hay sao?

2./ Bài này có áp dụng vô thực tế công việc hay chỉ là tìm giải thuật đơn thuần để nâng cao trình độ VBA?

3./ Khi thêm như vậy, cột 'SoLuong' ở các trang 'Txx' sẽ là những số ngẫu nhiên hay sao?

1/ Vâng đúng c ạ.
Chị hình dung như việc thống kê số lượng hàng bán từng ngày trong tháng, ngày nào cũng chỉ có mấy sp đó, bán dc thì ghi số, k bán dc thì ghi 0

2/ Cả hai chị ạ
- Em mới tập tành vba, cũng tham khảo các thớt khác nhưng hiện tại vẫn k viết đc nên post bài nhờ trợ giúp.
- Áp dụng luôn vào công việc của em

3/ Vâng, là số ngẫu nhiên
Chỉ cần copy dc công thức ở các sheet 'Txx" thì nó sẽ tự nhận giá trị theo sheet ' Đơn giá'
 
Lần chỉnh sửa cuối:
1/ Vâng đúng c ạ.
Chị hình dung như việc thống kê số lượng hàng bán từng ngày trong tháng, ngày nào cũng chỉ có mấy sp đó, bán dc thì ghi số, k bán dc thì ghi 0

2/ Cả hai chị ạ
- Em mới tập tành vba, cũng tham khảo các thớt khác nhưng hiện tại vẫn k viết đc nên post bài nhờ trợ giúp.
- Áp dụng luôn vào công việc của em

3/ Vâng, là số ngẫu nhiên
Chỉ cần copy dc công thức ở các sheet 'Txx" thì nó sẽ tự nhận giá trị theo sheet ' Đơn giá'

Bạn thử đoạn sau.
Lưu ý: Tên Folder, tên file, tên sheet thì không nên đặt là chữ có dấu.
Mã:
Sub ThemMon()
Application.ScreenUpdating = False
Dim m0 As Long, so As Long, i As Byte, r As Long, er As Long, MON(), k As Integer
On Error Resume Next
m0 = Sheets("T1").Range("A19").End(xlDown).Row - 19
so = Sheet1.Range("A1").End(xlDown).Row - m0
If so <= 0 Then Exit Sub
MON = Sheet1.Range("A" & m0 + 1).Resize(so, 2).Value
For i = 1 To 12
    With Sheets("T" & i)
        er = .Range("B65000").End(xlUp).Row
        For r = er To 19 Step -m0
            For k = 1 To so
                .Rows(r).Insert Shift:=xlDown
            Next k
                .Range("B" & r).Resize(UBound(MON, 1), 2).Value = MON
                .Range("D" & r - 1).Resize(UBound(MON, 1) + 1, 8).FillDown
        Next r
    End With
Next i
Application.ScreenUpdating = True
End Sub
p/s: Mình đi ăn phở ở cửa hàng nhà bạn có được iu tiên gì hông?
 
Bạn thử đoạn sau.
Lưu ý: Tên Folder, tên file, tên sheet thì không nên đặt là chữ có dấu.
Mã:
Sub ThemMon()
Application.ScreenUpdating = False
Dim m0 As Long, so As Long, i As Byte, r As Long, er As Long, MON(), k As Integer
On Error Resume Next
m0 = Sheets("T1").Range("A19").End(xlDown).Row - 19
so = Sheet1.Range("A1").End(xlDown).Row - m0
If so <= 0 Then Exit Sub
MON = Sheet1.Range("A" & m0 + 1).Resize(so, 2).Value
For i = 1 To 12
    With Sheets("T" & i)
        er = .Range("B65000").End(xlUp).Row
        For r = er To 19 Step -m0
            For k = 1 To so
                .Rows(r).Insert Shift:=xlDown
            Next k
                .Range("B" & r).Resize(UBound(MON, 1), 2).Value = MON
                .Range("D" & r - 1).Resize(UBound(MON, 1) + 1, 8).FillDown
        Next r
    End With
Next i
Application.ScreenUpdating = True
End Sub
p/s: Mình đi ăn phở ở cửa hàng nhà bạn có được iu tiên gì hông?
Chà tuyệt vời. Chỉ cần điều chỉnh để tổng tự tính lại nữa là quá tuyệt./-*+/

Ps: K phải quán của nhà mình đâu, nhưng b đến đó chắc chắn có nhiều đồ ngon giá hạt rẻ lắm hehe
 
Bác befaint ơi e chạy file nhưng gặp vấn đề sau:
- Dòng màu vàng , tính tổng nó k tự chỉnh, nó chỉ tính tổng 7 sp đầu
- Khi chạy code lần 1, sang lần 2 xóa dòng đi update lại thì những dòng bị xóa sẽ hiện #N/A
Em đã thử k chạy code, khi em xóa 1 dòng sp ở đơn giá thì cũng xảy ra hiện tg trên

Rất mong các bác giúp e hoàn thiện file này với ạ &&&%$R
 
Hướng dẫn sử dụng file:
Sang trang tính 'DonGia'
Dùng chuột chọn vùng từ [A8:G9] (là vùng 2 SF mới thêm) & bấm chuột tiếp vô biểu tượng;

Macro chỉ mới thao tác với 'T1'
Bạn xem & kiểm kết quả ở trang 'GPE'
 

File đính kèm

- Dòng màu vàng , tính tổng nó k tự chỉnh, nó chỉ tính tổng 7 sp đầu
Bạn thử lại đoạn sau:
PHP:
Sub ThemMon()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim m0 As Long, so As Long, i As Byte, r As Long, er As Long, MON(), k As Integer
On Error Resume Next
m0 = Sheets("T1").Range("A19").End(xlDown).Row - 19
so = Sheet1.Range("A1").End(xlDown).Row - m0
If so <= 0 Then Exit Sub
MON = Sheet1.Range("A" & m0 + 1).Resize(so, 2).Value
For i = 1 To 12
    With Sheets("T" & i)
        er = .Range("B65000").End(xlUp).Row
        For r = er To 19 Step -m0
            For k = 1 To so
                .Rows(r).Insert Shift:=xlDown
            Next k
                .Range("B" & r).Resize(UBound(MON, 1), 2).Value = MON
                .Range("D" & r - 1).Resize(UBound(MON, 1) + 1, 8).FillDown
                .Range("D" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
                .Range("F" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
                .Range("J" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
                .Range("K" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
        Next r
    End With
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

- Khi chạy code lần 1, sang lần 2 xóa dòng đi update lại thì những dòng bị xóa sẽ hiện #N/A
Em đã thử k chạy code, khi em xóa 1 dòng sp ở đơn giá thì cũng xảy ra hiện tg trên
Bạn thiết kế cấu trúc và sử dụng công thức/ hàm như thế nên tất nhiên, khi bạn xóa dữ liệu nguồn đi thì cái tham chiếu tới nó không tìm thấy và báo #N/A (hàm vlookup). Khắc phục: Ghi giá trị trực tiếp vào, không dùng hàm Vlookup nữa.
Dữ liệu ở sheet "Don gia" là cơ sở để tính toán cho cả bảng thì phải giữ lại, xóa đi thì lấy gì mà tính toán?

Ngoài ra, xin hỏi bạn:
- Tại sao lại chèn thêm vào tất cả các tháng? Dữ liệu tháng trước đó (quá khứ) đã hoàn thành rồi mà.

Vậy nha. Chúc bạn thành công!
 
Bạn thử lại đoạn sau:
PHP:
Sub ThemMon()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim m0 As Long, so As Long, i As Byte, r As Long, er As Long, MON(), k As Integer
On Error Resume Next
m0 = Sheets("T1").Range("A19").End(xlDown).Row - 19
so = Sheet1.Range("A1").End(xlDown).Row - m0
If so <= 0 Then Exit Sub
MON = Sheet1.Range("A" & m0 + 1).Resize(so, 2).Value
For i = 1 To 12
    With Sheets("T" & i)
        er = .Range("B65000").End(xlUp).Row
        For r = er To 19 Step -m0
            For k = 1 To so
                .Rows(r).Insert Shift:=xlDown
            Next k
                .Range("B" & r).Resize(UBound(MON, 1), 2).Value = MON
                .Range("D" & r - 1).Resize(UBound(MON, 1) + 1, 8).FillDown
                .Range("D" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
                .Range("F" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
                .Range("J" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
                .Range("K" & r + so).FormulaR1C1 = "=SUM(R[-" & m0 - 1 + so & "]C:R[-1]C)"
        Next r
    End With
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub


Bạn thiết kế cấu trúc và sử dụng công thức/ hàm như thế nên tất nhiên, khi bạn xóa dữ liệu nguồn đi thì cái tham chiếu tới nó không tìm thấy và báo #N/A (hàm vlookup). Khắc phục: Ghi giá trị trực tiếp vào, không dùng hàm Vlookup nữa.
Dữ liệu ở sheet "Don gia" là cơ sở để tính toán cho cả bảng thì phải giữ lại, xóa đi thì lấy gì mà tính toán?

Ngoài ra, xin hỏi bạn:
- Tại sao lại chèn thêm vào tất cả các tháng? Dữ liệu tháng trước đó (quá khứ) đã hoàn thành rồi mà.

Vậy nha. Chúc bạn thành công!
Dạ cám ơn bác rất nhiều.
Em làm file mẫu để áp dụng cho năm sau thôi bác ạ
 
Web KT

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

Back
Top Bottom