Tính tổng đến dòng cuối trong cột

Liên hệ QC

nvh611

Thành viên thường trực
Tham gia
20/5/17
Bài viết
228
Được thích
42
Anh em chỉ dẫn cách tính tổng từ 1 ô đến ô có dữ liệu cuối cùng trong 1 cột
 

File đính kèm

  • Tính tổng đến dòng cuối.xlsx
    8.4 KB · Đọc: 43
Thường thì bạn không nhập dữ liệu theo hứng: lúc nhập vào C10, lúc nhập vào C1000000, sau đó lại vào C500000. Vậy hãy chọn 1 con số đủ lớn, vd. 1000, 10000, 30000. Và
Mã:
=SUM(C4:C<số đủ lớn>)
Và hãy quên mọi thao tác với cả cột đi.
 
Mã:
=SUM(C4:INDEX(C:C,LOOKUP(10^6,C:C,ROW(C:C))))
Hoặc là sum cả cột tùy theo file thực tế
Cảm ơn bạn!Công thức hơi dài và khó nhớ bạn à
Bài đã được tự động gộp:

Thường thì bạn không nhập dữ liệu theo hứng: lúc nhập vào C10, lúc nhập vào C1000000, sau đó lại vào C500000. Vậy hãy chọn 1 con số đủ lớn, vd. 1000, 10000, 30000. Và
Mã:
=SUM(C4:C<số đủ lớn>)
Và hãy quên mọi thao tác với cả cột đi.
Cảm ơn bạn, như vậy thì không hiệu quả cho lắm
Trước tôi có đọc trên diễn đàn có dạng bài này và công thức rất ngắn gọn
Kiểu như :=SUM(C4:"C:"&?????) như nào đó???
Tôi nhớ mang máng nhưng tìm mãi không thấy đâu?
 
Cảm ơn bạn!Công thức hơi dài và khó nhớ bạn à
Bài đã được tự động gộp:


Cảm ơn bạn, như vậy thì không hiệu quả cho lắm
Trước tôi có đọc trên diễn đàn có dạng bài này và công thức rất ngắn gọn
Kiểu như :=SUM(C4:"C:"&?????) như nào đó???
Tôi nhớ mang máng nhưng tìm mãi không thấy đâu?

Nếu công thức bạn đã xác định ô đầu thì công thức lookup trên là tối ưu rồi, không thì bạn ước lượng khoảng data sử dụng mà set ô cuối không thì chọn luôn ô 1,000,000 cho nhanh chứ công thức =SUM(C4:"C:"&?????) (hàm này phải thêm indirect vào không sao chạy được) làm gì? cái "?????" bạn phải dùng hàm tìm dòng của ô cuối có dữ liệu thì chả có cách nào nhanh hơn dùng lookup đâu.
Còn nếu dùng VBA thì bạn làm 1 marco dùng nhiều lần, tôi gửi bạn 1 đoạn tham khảo tự đặt tính tổng lên đầu cột của vùng cần đặt phép tinh, bạn gán vào shortcut hay 1 nút nào đó dùng cho tiện:
Mã:
Sub subtotalFirstCell()
    Dim CellTg As Range, rng As Range, lr As Long
        Set CellTg = ActiveCell
        Columns(CellTg.Column).Select
        Set rng = Selection
        lr = rng.Cells(rng.Rows.Count, 1).End(xlUp).Row
        CellTg.FormulaR1C1 = "=SUBTOTAL(9,R[1]C:R[" & lr - CellTg.Row & "]C)"
        CellTg.Select
End Sub
 
Lần chỉnh sửa cuối:
Nếu công thức bạn đã xác định ô đầu thì công thức lookup trên là tối ưu rồi, không thì bạn ước lượng khoảng data sử dụng mà set ô cuối không thì chọn luôn ô 1,000,000 cho nhanh chứ công thức =SUM(C4:"C:"&?????) (hàm này phải thêm indirect vào không sao chạy được) làm gì? cái "?????" bạn phải dùng hàm tìm dòng của ô cuối có dữ liệu thì chả có cách nào nhanh hơn dùng lookup đâu.
Còn nếu dùng VBA thì bạn làm 1 marco dùng nhiều lần, tôi gửi bạn 1 đoạn tham khảo tự đặt tính tổng lên đầu cột của vùng cần đặt phép tinh, bạn gán vào shortcut hay 1 nút nào đó dùng cho tiện:
Mã:
Sub subtotalFirstCell()
    Dim CellTg As Range, rng As Range, lr As Long
        Set CellTg = ActiveCell
        Columns(CellTg.Column).Select
        Set rng = Selection
        lr = rng.Cells(rng.Rows.Count, 1).End(xlUp).Row
        CellTg.FormulaR1C1 = "=SUBTOTAL(9,R[1]C:R[" & lr - CellTg.Row & "]C)"
        CellTg.Select
End Sub
Code này là chuẩn rồi...
 
Hãy thử áp dụng Code sau
Cách dùng : =SumDown(C4)
Copy code vào một module và save thành xls / xlsm / xlsb
PHP:
Function SumDown&(Rng As Range)
  SumDown = Application.Sum(Range(Rng, Rng.End(xlDown)))
End Function
 
Lần chỉnh sửa cuối:
Bạn thử áp dụng Code sau
Cách dùng : =SumDown(C4)
Copy code vào một module và save thành xls / xlsm / xlsb
PHP:
Function SumDown&(Rng As Range)
  SumDown = Application.Sum(Range(Rng, Rng.End(xlDown)))
End Function
Dữ liệu không liên tiếp thì sao bạn.Có dùng được không.
 
Dữ liệu không liên tiếp thì sao bạn.Có dùng được không.
Có nhiều cách tiếp cận:
Cách 1: Dùng EndXL
+ xlUp: Nếu dữ liệu rời rạc
PHP:
Function SumDown(Rng As Range)
  SumDown = Application.Sum(Range(Rng, Cells(Rows.Count, Rng.Column).End(xlUp)))
End Function
+ xlDown: nếu dữ liệu liền kề
PHP:
Function SumDown(Rng As Range)
  SumDown = Application.Sum(Range(Rng, Rng.End(xlDown)))
End Function
Cách 2: Dùng Phương thức Find
PHP:
Function SumDown(Rng As Range)
  Dim LRow As Range
     Set LRow = Columns(Rng.Column).Find("*", _
                  LookIn:=xlFormulas, LookAt:=xlPart, _
                  SearchDirection:=xlPrevious, _
                  SearchOrder:=xlByRows, _
                  MatchCase:=False)
  SumDown = Application.Sum(Range(Rng, LRow))
End Function

Và một số phương thức khác:
PHP:
Sub HangCuoi()
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ActiveSheet
  LastRow = sht.Cells.SpecialCells(xlCellTypeLastCell).Row
  LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
  LastRow = sht.ListObjects("Table1").Range.Rows.Count
  LastRow = sht.Range("MyNamedRange").Rows.Count
  LastRow = sht.Range("A1").CurrentRegion.Rows.Count
End Sub
 
Lần chỉnh sửa cuối:
Có nhiều cách tiếp cận:
Cách 1: Dùng EndXL
+ xlUp: Nếu dữ liệu rời rạc
PHP:
Function SumDown(Rng As Range)
  SumDown = Application.Sum(Range(Rng, Cells(Rows.Count, Rng.Column).End(xlUp)))
End Function
+ xlDown: nếu dữ liệu liền kề
PHP:
Function SumDown(Rng As Range)
  SumDown = Application.Sum(Range(Rng, Rng.End(xlDown)))
End Function
Cách 2: Dùng Phương thức Find
PHP:
Function SumDown(Rng As Range)
  Dim LRow As Range
     Set LRow = Columns(Rng.Column).Find("*", _
                  LookIn:=xlFormulas, LookAt:=xlPart, _
                  SearchDirection:=xlPrevious, _
                  SearchOrder:=xlByRows, _
                  MatchCase:=False)
  SumDown = Application.Sum(Range(Rng, LRow))
End Function

Và một số phương thức khác:
PHP:
Sub HangCuoi()
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ActiveSheet
  LastRow = sht.Cells.SpecialCells(xlCellTypeLastCell).Row
  LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
  LastRow = sht.ListObjects("Table1").Range.Rows.Count
  LastRow = sht.Range("MyNamedRange").Rows.Count
  LastRow = sht.Range("A1").CurrentRegion.Rows.Count
End Sub
CẢM ƠN BẠN
HeSanbi
 
Web KT
Back
Top Bottom