Hỏi bài toán tổng vùng được chọn bằng vba (2 người xem)

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

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

onecry

Thành viên mới
Tham gia
30/1/13
Bài viết
43
Được thích
0
Chào các Thầy trên diễn đàn
hiện tại em có một bài toán mong được các thầy giúp đỡ
em cần dùng vba để giải quyết một vấn đề

ví dụ: khi em dùng chuột chọn vùng từ A1 đến vùng B3

thì em sẽ được 2 cột kết quả

1 : tổng giá trị cột a là: ( = tổng từ A1 đến A3)
2 : tổng giá trị cột b là: ( = tổng từ B1 đến B3)

và khi em dùng chuột thay đổi vùng chọn thì kết quả cũng thay đổi theo vùng em chọn.

cảm ơn các thầy.
 

File đính kèm

Chào các Thầy trên diễn đàn
hiện tại em có một bài toán mong được các thầy giúp đỡ
em cần dùng vba để giải quyết một vấn đề

ví dụ: khi em dùng chuột chọn vùng từ A1 đến vùng B3

thì em sẽ được 2 cột kết quả

1 : tổng giá trị cột a là: ( = tổng từ A1 đến A3)
2 : tổng giá trị cột b là: ( = tổng từ B1 đến B3)

và khi em dùng chuột thay đổi vùng chọn thì kết quả cũng thay đổi theo vùng em chọn.

cảm ơn các thầy.
Xin hỏi mục đích để làm gì?
Làm vầy được không?
Click phải chuột vào status bar của excel (Thanh trạng thái của excel ở dưới cùng), check vào dòng "Sum"
Giờ cứ lấy chuột quét chọn vùng nào đó thì ở thanh trạng thái nó hiện lên Sum: ketqua
với ketqua = tổng giá trị vùng quét chọn.
 
Upvote 0
Xin hỏi mục đích để làm gì?
Làm vầy được không?
Click phải chuột vào status bar của excel (Thanh trạng thái của excel ở dưới cùng), check vào dòng "Sum"
Giờ cứ lấy chuột quét chọn vùng nào đó thì ở thanh trạng thái nó hiện lên Sum: ketqua
với ketqua = tổng giá trị vùng quét chọn.
Bạn ấy muốn quét 1 lần đc luôn 2 kết quả cơ anh ạ
 
Upvote 0
1. mục đích công việc em cần như thế, giải thích dài dòng lắm ạ
2. em đang cần kết quả 2 cột khác nhau, thanh trạng thái bên dưới chỉ cho 1 kết quả,
3. kết quả này cần hiển thị giá trị trong 1 cell, em còn dùng để kết hợp vs công thức khác nữa ạ.
 
Upvote 0
1. mục đích công việc em cần như thế, giải thích dài dòng lắm ạ
2. em đang cần kết quả 2 cột khác nhau, thanh trạng thái bên dưới chỉ cho 1 kết quả,
3. kết quả này cần hiển thị giá trị trong 1 cell, em còn dùng để kết hợp vs công thức khác nữa ạ.
Gớm vậy cơ ah. Thử vầy xem:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 Then Sheet1.Range("E1").Value = WorksheetFunction.Sum(Target.Value)
If Target.Column = 2 Then Sheet1.Range("E2").Value = WorksheetFunction.Sum(Target.Value)
End Sub
 
Upvote 0
đúng cái em cần, nhưng thầy sửa lại giúp em, nó thiếu thiếu gì nên kết quả chưa đúng ạ, em cảm ơn
 
Upvote 0
đúng cái em cần, nhưng thầy sửa lại giúp em, nó thiếu thiếu gì nên kết quả chưa đúng ạ, em cảm ơn
Thiếu gì cơ?
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Columns.Count > 3 Then Exit Sub
On Error Resume Next
If Target.Column < 3 Then
If Target.Columns.Count = 1 Then Sheet1.Range("E" & Target.Column).Value = WorksheetFunction.Sum(Target.Columns(1).Value)
If Target.Columns.Count = 2 Then
Sheet1.Range("E1").Value = WorksheetFunction.Sum(Target.Columns(1).Value)
Sheet1.Range("E2").Value = WorksheetFunction.Sum(Target.Columns(2).Value)
End If: End If
End Sub
 
Upvote 0
1. mục đích công việc em cần như thế, giải thích dài dòng lắm ạ
2. em đang cần kết quả 2 cột khác nhau, thanh trạng thái bên dưới chỉ cho 1 kết quả,
3. kết quả này cần hiển thị giá trị trong 1 cell, em còn dùng để kết hợp vs công thức khác nữa ạ.
Code này vậy
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, tonga, tongb As Double
If Target.Column < 3 Then
    For Each cel In Target
        If cel.Column = 1 Then
            tonga = tonga + cel
        Else
            tongb = tongb + cel
        End If
    Next
    [e1] = tonga: [e2] = tongb
End If
End Sub
 
Upvote 0
Code này vậy
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, tonga, tongb As Double
If Target.Column < 3 Then
    For Each cel In Target
        If cel.Column = 1 Then
            tonga = tonga + cel
        Else
            tongb = tongb + cel
        End If
    Next
    [e1] = tonga: [e2] = tongb
End If
End Sub
Chưa bẫy lỗi khi gặp "chữ".
 
Upvote 0
Chưa bẫy lỗi khi gặp "chữ".
Vậy thì thêm cái điều kiện vậy
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, tonga, tongb As Double
If Target.Column < 3 Then
    For Each cel In Target
        If cel.Column = 1 And IsNumeric(cel) Then tonga = tonga + cel
        If cel.Column = 2 And IsNumeric(cel) Then tongb = tongb + cel
    Next
    [e1] = tonga: [e2] = tongb
End If
End Sub
 
Upvote 0
Thiếu gì cơ?
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Columns.Count > 3 Then Exit Sub
On Error Resume Next
If Target.Column < 3 Then
If Target.Columns.Count = 1 Then Sheet1.Range("E" & Target.Column).Value = WorksheetFunction.Sum(Target.Columns(1).Value)
If Target.Columns.Count = 2 Then
Sheet1.Range("E1").Value = WorksheetFunction.Sum(Target.Columns(1).Value)
Sheet1.Range("E2").Value = WorksheetFunction.Sum(Target.Columns(2).Value)
End If: End If
End Sub

Thật vi diệu, vấn đề nan giải của em đã được giải quyết, em chân thành cảm ơn Thầy, chúc Thầy sức khỏe.
 
Upvote 0
Vậy thì thêm cái điều kiện vậy
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, tonga, tongb As Double
If Target.Column < 3 Then
    For Each cel In Target
        If cel.Column = 1 And IsNumeric(cel) Then tonga = tonga + cel
        If cel.Column = 2 And IsNumeric(cel) Then tongb = tongb + cel
    Next
    [e1] = tonga: [e2] = tongb
End If
End Sub
Thử chọn cả bảng tính xem chuyện gì xảy ra?
 
Upvote 0
Em tham gia tí cho xôm nhưng e chỉ làm sub thôi chứ k cho vào Change vì vụ đấy em hơi gà :)
HTML:
Sub tong()
Set myrange = Application.InputBox(prompt:="Vung", Type:=8)
Range("E1").Select
Selection.Formula = "=sum( A" & myrange.Row & ":A" & myrange.Rows.Count & ")"
Range("E2").Select
Selection.Formula = "=sum( B" & myrange.Row & ":B" & myrange.Rows.Count & ")"
End Sub
 
Upvote 0
Hi hi! nếu dữ liệu không nằm trong cột A:B thì teo huyền tèo.
 
Upvote 0

File đính kèm

  • Capture.jpg
    Capture.jpg
    12.8 KB · Đọc: 22
Lần chỉnh sửa cuối:
Upvote 0
em xin phép đào topic này lên cái
ví dụ em cần sum 2 cột 15, 16
theo ngu kiến của em, em sửa code trên nhưng nó không chạy, Thày nào sửa giúp em với

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Columns.Count < 15 And Target.Columns.Count > 16 Then Exit Sub
On Error Resume Next

If Target.Column >= 15 And Target.Column <= 16 Then
If Target.Columns.Count = 15 Then
Sheet1.Range("t1").Value = WorksheetFunction.Sum(Target.Columns(15).Value)
Sheet1.Range("s1").Value = WorksheetFunction.Sum(Target.Columns(16).Value)

If Target.Columns.Count = 16 Then
Sheet1.Range("t1").Value = WorksheetFunction.Sum(Target.Columns(15).Value)
Sheet1.Range("s1").Value = WorksheetFunction.Sum(Target.Columns(16).Value)

End If
End If
End If
End Sub
 
Upvote 0
em xin phép đào topic này lên cái
ví dụ em cần sum 2 cột 15, 16
theo ngu kiến của em, em sửa code trên nhưng nó không chạy, Thày nào sửa giúp em với

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Columns.Count < 15 And Target.Columns.Count > 16 Then Exit Sub
On Error Resume Next

If Target.Column >= 15 And Target.Column <= 16 Then
If Target.Columns.Count = 15 Then
Sheet1.Range("t1").Value = WorksheetFunction.Sum(Target.Columns(15).Value)
Sheet1.Range("s1").Value = WorksheetFunction.Sum(Target.Columns(16).Value)

If Target.Columns.Count = 16 Then
Sheet1.Range("t1").Value = WorksheetFunction.Sum(Target.Columns(15).Value)
Sheet1.Range("s1").Value = WorksheetFunction.Sum(Target.Columns(16).Value)

End If
End If
End If
End Sub

Sửa thì không biết sửa.
bạn tham khảo thêm cái này nhé!
Điều kiện là chọn vùng bất kỳ vời Ô >1 và cột <6( vì sợ rằng nhiều cột quá thì thanh Status bar không hiện hết.
Xem kết quả trên thanh Status bar nhé!
HTML:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim  i As Byte, tong As String
   Application.DisplayStatusBar = True
    Application.StatusBar = ""
    If Target.Cells.Count > 1 Then
       If Target.Columns.Count < 6 Then
            For i = 0 To Target.Columns.Count - 1
               tong = tong & Target.Offset(, i).Resize(, 1).Address(0, 0) & "=" & WorksheetFunction.Sum(Target.Offset(, i).Resize(, 1)) & "; "
            Next
            Application.StatusBar = tong
       End If
   End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom