Em hỏi công thức cộng

Liên hệ QC

1975hocmai

Thành viên mới
Tham gia
20/12/07
Bài viết
37
Được thích
1
Cần hỏi lệnh cộng dồn

em muốn hỏi cách cộng dồn như sau : ví dụ ở ô a1 là số 4, khi em nhập số 5 thì ra kết quả là 9, nhập tiếp số 1 ra kết quả là 10. Và cứ nhập tiếp số, sẽ ra kết quả tự động. Ai biét chỉ cho em với
 
Đây là một cách. Nhập số vào ô khác ô A1 sẽ được cộng với ô A1 và đưa kết quả vào ô A1.
 

File đính kèm

Vậy thì cũng ko phải là khó quá... Có thể cộng dồn dc khi ta nhập vào chính cell nguồn ko?
Ví dụ A1 = 5, giờ ta nhập số mới vào A1, chẳng hạn là 4... làm sao đễ A1 bây giờ có kết quả là 9
???
ANH TUẤN
 
chibi đã viết:
Đây là một cách. Nhập số vào ô khác ô A1 sẽ được cộng với ô A1 và đưa kết quả vào ô A1.

Dear các Anh,
Nhân tiện về việc cộng dồn anh giúp em một chút, là vì trước em đã hỏi về cái này, nhưng chưa thỏa mãn lắm, vì khi thay đổi row và cột thì nó bị lệch khỏi bảng tính (trc đây có một chị giúp em bằng VBA về việc cộng dồn), em có một Vd đính kèm mong anh xem và giải giúp em. Cái này rất tiện trong việc hàng ngày update năng để biết đc hàng hóa đến khi nào thì sx xong,còn để xuất khẩu cho khách hàng.


Cảm ơn anh
NHT
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn các anh

Các phương pháp trên của các anh cũng rất hay, em xin cảm ơn. Nhưng nếu có cách + liên tiếp trong 1 ô như em đã nêu thì hay hơn rất nhiều và thuận lợi trong công việc.
Anh chị nào biết chỉ tiếp cho em với
 
m có một Vd đính kèm mong anh xem và giải giúp em. Cái này rất tiện trong việc hàng ngày update năng để biết đc hàng hóa đến khi nào thì sx xong,còn để xuất khẩu cho khách hàng.

Thế thì tốt nhất đặt 2 bảng ở 2 sheet (sheet Dl nhập & Sheet cộng dồn) - như thế khi đó vị trí ô đầu tiên của bảng không đổi khi thêm hàng thêm cột, và yêu cầu dữ liệu lấp đầy bảng (ko có DL thì nhập 0). Đồng thời các mặt hàng để theo đúng thứ tự tương ứng của 2 bảng (hay chí ít tương ứng về cột)

Nếu thế thì dùng VBA để viết là được

Và nữa DL là lớn hay nhỏ (hàng trăm / hay nghìn dòng)?
 
Bạn xem vừa í chưa nha!

Nguyễn Hương Thơm đã viết:
Dear các Anh,
Nhân tiện về việc cộng dồn anh giúp em một chút, . . . vì khi thay đổi row và cột thì nó bị lệch khỏi bảng tính. Em có một Vd đính kèm mong anh xem và giải giúp em. Cảm ơn anh NHT
Nếu còn vấn đề gì, sẽ cùng giải tiếp nha!

(Nếu cần sửa dữ liệu vừa nhập thì nhấn nút Edit (hay CTRL+SHIFT+e)
Còn bình thường cứ nhập thì sẽ được cập nhật qua vùng B; khỏi cần nút trong trường hợp này làm chi!!
)(&&@@
 

File đính kèm

Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Có thể cộng dồn dc khi ta nhập vào chính cell nguồn ko?
Ví dụ A1 = 5, giờ ta nhập số mới vào A1, chẳng hạn là 4... làm sao đễ A1 bây giờ có kết quả là 9???
ANH TUẤN
1975hocmai đã viết:
Nhưng nếu có cách + liên tiếp trong 1 ô như em đã nêu thì hay hơn rất nhiều và thuận lợi trong công việc.

Một ý tưởng rất hay.
 
Chào Hương Thơm!
Về vấn đề cộng dồn thật ra ko phải là chuyện khó.. nhưng gian nan nhất vẫn là khi cấu trúc dử liệu bị thay đỗi.. Nếu là người khá khá 1 chút thì có thể chỉnh sửa code cho phù hợp, nhưng người dùng bình dân thì ko phải ai cũng làm dc.. Đó là chưa nói đến chuyện xem code của người khác thường hay bị hoa mắt... hi... hi...
Anh gữi em code này:
PHP:
Sub Test()
    StartRN = Range("Nguon").Row
    StartCN = Range("Nguon").Column
    StartRD = Range("Dich").Row
    StartCD = Range("Dich").Column
    Rw = Range("Nguon").Rows.Count
    Cw = Range("Nguon").Columns.Count
    NCELL = Range("Nguon").Cells.Count
    MovR = StartRD - StartRN
    MovC = StartCD - StartCN
    For i = 1 To NCELL
        iR = ((i - 1) \ Cw) + StartRN
        iC = (i Mod Cw) + StartCN
        iAdd = Cells(iR + MovR, iC + MovC).Value + Cells(iR, iC).Value
        Cells(iR + MovR, iC + MovC).Value = iAdd
    Next i
End Sub
Việc còn lại duy nhất của em bây giờ là:
1> Copy code vào module
2> Đặt name cho mãng nguồn là NGUON, và đích là DICH
Mai này dử liệu của em có sự thay đỗi cấu trúc, hoặc đơn giản là em kéo các mãng đi nơi khác thì code vẫn hoạt động dc bình thường... thậm chỉ đỗi luôn tên sheet cũng ko có vấn đề...
Phần Edit (hay Undo) thì quá dễ, khi chạy code ta copy DICH sang vùng tạm.. lúc bấm nút Edit thì copy vùng tạm paste vào DICH
Xem file đính kèm: vùng màu vàng là NGUON, vùng màu XANH là DICH.. Em có thể quét chọn các vùng và kéo thả đi đâu tùy thích
(Kỹ thuật định vị tương đối này học của anh SA_DQ.. cảm ơn anh!)
ANH TUẤN
 

File đính kèm

Đã có giải pháp cộng dồn trên 1 ô khi nhập đây rùi

Như mong muốn của
1975hocmai đã viết:
em muốn hỏi cách cộng dồn như sau : ví dụ ở ô a1 là số 4, khi em nhập số 5 thì ra kết quả là 9, nhập tiếp số 1 ra kết quả là 10. Và cứ nhập tiếp số, sẽ ra kết quả tự động. Ai biét chỉ cho em với

anhtuan1066 đã viết:
Có thể cộng dồn dc khi ta nhập vào chính cell nguồn ko?
Ví dụ A1 = 5, giờ ta nhập số mới vào A1, chẳng hạn là 4... làm sao đễ A1 bây giờ có kết quả là 9
???
và thêm nữa
chibi đã viết:
Một ý tưởng rất hay.
Đã có giải pháp đây rùi
theo đúng mong muốn: cứ nhập vào A1 lại cộng dồn, cộng dồn tiếp lun vào:
PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 Static oldValue
  If Not Intersect([A1], Target) Is Nothing Then
     Application.EnableEvents = False
     Target.Value = Target.Value + oldValue
     Application.EnableEvents = True
     oldValue = Target.Value
  End If
End Sub
 
Lần chỉnh sửa cuối:
Nhân tiên Tigertiger làm luôn cái vụ Undo của Hương Thơm luôn đi.. Nếu có cách nào đó mà ko cần vùng tạm thì càng ngon ăn... Nhớ vào 1 vùng nhớ tạm nào đó có dc ko nhỉ?
Tôi đã làm xong phần ADD trong bài #9, nhưng còn phần Undo tôi thấy nếu copy sang vùng tạm thì chưa hay lắm nên cũng chưa làm...
ANH TUẤN
 
Nhân tiên Tigertiger làm luôn cái vụ Undo của Hương Thơm luôn đi.. Nếu có cách nào đó mà ko cần vùng tạm thì càng ngon ăn... Nhớ vào 1 vùng nhớ tạm nào đó có dc ko nhỉ?
Tôi đã làm xong phần ADD trong bài #9, nhưng còn phần Undo tôi thấy nếu copy sang vùng tạm thì chưa hay lắm nên cũng chưa làm...
ANH TUẤN

Được chứ, nhưng chắc nói Hương Thơm chuyển sang chủ đề khác đi, cứ lẫn lộn 2 cái thế này, xem mất cả hứng,

Nhờ MOD SMOD ghé qua chuyển các bài liên quan Hương thơm sang topic mới đi

Còn vụ sheet tạm thì atuan có thể cộng sheet tam rồi unhide sheet này là được
.
 
tigertiger đã viết:
Được chứ, nhưng chắc nói Hương Thơm chuyển sang chủ đề khác đi, cứ lẫn lộn 2 cái thế này, xem mất cả hứng,

Nhờ MOD SMOD ghé qua chuyển các bài liên quan Hương thơm sang topic mới đi

Còn vụ sheet tạm thì atuan có thể cộng sheet tam rồi unhide sheet này là được
.
Uh... tôi cũng đang làm như vậy.. nhưng thấy.. ko hay.. Làm sao mà chẳng có 1 vùng tạm nào cả mới hay (xem như là vùng tạm ảo ko tồn tại thực tế)
 
Đã giải quyết vấn đề undo "Nguyễn Hương Thơm"

Đơn giản thôi undo thì ta lấy giá trị của đích - thay vì + là được mà:
Chỉ lưu ý là chỉ undo 1 lần và bất cứ thay đổi nào trong vùng NGUON hay vùng DICH sau khi cộng dồn (Add) thì nút undo sẽ tự mờ (mất hiệu lực và chỉ có hiệu lực khi nút Add Value lại bấm tiếp)

Và toàn ộ code như sau:

ở module1
PHP:
Option Explicit

Sub AddDL(Optional AdUd1 As Integer = 1)

Dim StartRN As Integer, StartCN As Integer, StartRD As Integer, StartCD As Integer
Dim Rw As Integer, Cw As Integer, MovR As Integer, MovC   As Integer, NCell  As Integer
Dim i As Integer, iR As Integer, iC As Integer, iAdd As Double
    
    StartRN = Range("Nguon").Row
    StartCN = Range("Nguon").Column
    StartRD = Range("Dich").Row
    StartCD = Range("Dich").Column
    Rw = Range("Nguon").Rows.Count
    Cw = Range("Nguon").Columns.Count
    NCell = Range("Nguon").Cells.Count
    MovR = StartRD - StartRN
    MovC = StartCD - StartCN
    For i = 1 To NCell
        iR = ((i - 1) \ Cw) + StartRN
        iC = (i Mod Cw) + StartCN
        iAdd = Cells(iR + MovR, iC + MovC).Value + AdUd1 * Cells(iR, iC).Value
        Cells(iR + MovR, iC + MovC).Value = iAdd
    Next i
End Sub


trong trang code của sheet1 (với CmAdd - nút cộng DL, CmUN - nút undo; xem file gửi kèm)

PHP:
Option Explicit
Private Sub CmAdd_Click()
  Call AddDL
  CmUN.Enabled = True
End Sub

Private Sub CmUN_Click()
    Call AddDL(-1)
    CmUN.Enabled = False
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If (Not Intersect(Range("Nguon"), Target) Is Nothing) Or _
       (Not Intersect(Range("Dich"), Target) Is Nothing) Then _
       CmUN.Enabled = False
End Sub

Chúc thành công - xem file gửi kèm cho hiểu rõ,
 

File đính kèm

Nguyên văn bởi 1975hocmai
Nhưng nếu có cách + liên tiếp trong 1 ô như em đã nêu thì hay hơn rất nhiều và thuận lợi trong công việc.
Bạn xem file thử đúng với yêu cầu chưa. Có gì ta bàn tiếp
 

File đính kèm

Hay nhỉ? Sao chẳng thấy chổ nào thêm bớt công trừ gì cả? Thế sao nó lại Undo dc?
Có 1 chổ tôi đoán chắc là "nó" : Call AddDL(-1)
Mà ko hiểu -1 nghĩa là cái gì?
Tigertiger có thể giãi thích thêm 1 ko?
ANH TUẤN
 
Vấn đề là chỗ này:

iAdd = Cells(iR + MovR, iC + MovC).Value + AdUd1 * Cells(iR, iC).Value

nếu AdUd ko có giá trị nó lấy là 1; còn khi gọi undo thì ta cho nó là AddDL(-1) -> nhân với -1 thì nó lấy kq của đích -nguồn

như vậy k cần dùng dùng sheet tạm nào cả

hic hiiiii
 
Lần chỉnh sửa cuối:
Vẫn chưa nắm bắt dc thuật toán ??? Hic.. sao ta? Hơi bị cao siêu rồi... Có những thứ nếu hiểu tự dưng sẽ hiểu mà ko thể giãi thích tại sao! Giống như OFFSET tôi thấy rất dễ hiểu mà khi giãi thích cho người khác lại vô cùng khó khăn, ko làm sao cho người ta hiểu dc
Dù sao cũng cảm ơn Tigertiger.. đễ tôi từ từ ngâm cứu đã
Nói thật tôi làm xong phần định vị tương đối đã là cố gắng rất lớn rồi... Hoa cả mắt, giờ mà bảo làm lại chưa chắc đã dc... Hic... Món này vì có sự tương quan với công thức Excel như Column(), Row() nên tôi còn hình dung dc mà chuyễn đỗi thành code... Còn cái (-1) của Tigertiger phải hình dung như thế nào đây nhỉ?
ANH TUẤN
 
Lần chỉnh sửa cuối:
tại post#15
Voda đã viết:
Bạn xem file thử đúng với yêu cầu chưa. Có gì ta bàn tiếp

Oh, voda sử dụng 1 vùng tạm để lưu rồi,

bạn xem post#10 đã giải quyết vấn đề này rui, không sd vùng tạm, hic
 
Nguyên văn bởi tigertiger
Oh, voda sử dụng 1 vùng tạm để lưu rồi,
bạn xem post#10 đã giải quyết vấn đề này rui, không sd vùng tạm, hic
Cám ơn tigertiger nhé. Mình bàn một chút nghe. Theo mình, không thể không sử dụng vùng tạm được. Vì khai báo static chỉ lưu biến trong thời gian mở file. Khi ta đóng file, số liệu cộng dồn trước đó biến mất. Bạn có cách gì để khắc phục vấn đề này không?
 
Web KT

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

Back
Top Bottom