LỰA CHỌN NHIỀU DỊCH VỤ MỘT LÚC ĐỂ TÍNH TIỀN

Liên hệ QC

vt8victory

Thành viên mới
Tham gia
30/7/10
Bài viết
5
Được thích
0
Em có một vấn đề như sau, hiện em đang làm một file tính tổng những dịch vụ khách hàng đã sử dụng và ra số tiền. Ví dụ: Bảng giá dịch vụ như sau:
- Dịch vụ A: 15.000
- Dịch vụ B: 20.000
- Dịch vụ C: 30.000
- Dịch vụ D: 50.000
Mỗi khách hàng vào em để thành một dòng, bao gồm 1 cột ghi tổng tên các dịch vụ sử dụng, 1 cột ghi tổng số tiền phải thanh toán. Hiện em chỉ nghĩ ra được cách duy nhất là ở cột tên các dịch vụ thì gõ tay theo cấu trúc có sẵn và cột tổng số tiền thì dùng sumif để tính toán.
Tuy nhiên cách này thì lúc sử dụng cũng hơi khó cho nhân viên, nếu gõ không chính xác theo cấu trúc thì sẽ không ra được kết quả. Các bác cho em hỏi có cách nào làm khi click vào ô tên các dịch vụ sẽ xổ ra 1 list các dịch vụ, nhân viên chỉ cần click chọn các dịch vụ, kết quả ra ô tổng số tiền các dịch vụ cần thanh toán không?

P/S: Gửi các bác file mẫu của em.
 

File đính kèm

sheet "DANH SACH BENH NHAN" bị "bệnh" rồi bạn
 
Em có một vấn đề như sau, hiện em đang làm một file tính tổng những dịch vụ khách hàng đã sử dụng và ra số tiền. Ví dụ: Bảng giá dịch vụ như sau:
- Dịch vụ A: 15.000
- Dịch vụ B: 20.000
- Dịch vụ C: 30.000
- Dịch vụ D: 50.000
Mỗi khách hàng vào em để thành một dòng, bao gồm 1 cột ghi tổng tên các dịch vụ sử dụng, 1 cột ghi tổng số tiền phải thanh toán. Hiện em chỉ nghĩ ra được cách duy nhất là ở cột tên các dịch vụ thì gõ tay theo cấu trúc có sẵn và cột tổng số tiền thì dùng sumif để tính toán.
Tuy nhiên cách này thì lúc sử dụng cũng hơi khó cho nhân viên, nếu gõ không chính xác theo cấu trúc thì sẽ không ra được kết quả. Các bác cho em hỏi có cách nào làm khi click vào ô tên các dịch vụ sẽ xổ ra 1 list các dịch vụ, nhân viên chỉ cần click chọn các dịch vụ, kết quả ra ô tổng số tiền các dịch vụ cần thanh toán không?

P/S: Gửi các bác file mẫu của em.
Có thể cái bạn cần giống như File trong Link ở bài viết sau:
http://www.giaiphapexcel.com/dienda...ruy-vấn-đơn-thuốc-nơi-phòng-khám-bệnh.126073/
 
Bạn kiểm tra file đính kèm xem sao.
Còn gì mai tính tiếp
Wow, thanks bạn, gần đạt như mình yêu cầu luôn rồi. Bạn hướng dẫn giúp mình cách làm được không vì mình muốn thêm vào 2 tính năng nữa:
- Sửa sai khi nhân viên click nhầm dịch vụ.
- Khi thêm dịch vụ vào sheet bảng giá dịch vụ thì sẽ tự cập nhật qua.
 
Wow, thanks bạn, gần đạt như mình yêu cầu luôn rồi. Bạn hướng dẫn giúp mình cách làm được không vì mình muốn thêm vào 2 tính năng nữa:
- Sửa sai khi nhân viên click nhầm dịch vụ.
- Khi thêm dịch vụ vào sheet bảng giá dịch vụ thì sẽ tự cập nhật qua.
Nhấn alt + F11 bạn sẽ thấy đoạn code dưới đây
Đoạn code này viết nhanh nên chỉ tính tới trường hợp chèn thêm hoặc xóa. Mấy yêu cầu trên, đại khái có thể giải quyết thế này :
+ Với công việc này : "- Khi thêm dịch vụ vào sheet bảng giá dịch vụ thì sẽ tự cập nhật qua."
Nếu chỉ thêm dịch vụ mới, không thay đổi các dịch vụ cũ thì không phải sửa code, miễn là dữ liệu trong bảng giá dịch vụ phải liên tục
Bảng giá dịch vụ nằm trong mảng DArr
+ "- Sửa sai khi nhân viên click nhầm dịch vụ."
OVal = Nội dung cũ
NVal = Nội dung chèn thêm
Để đáp ứng yêu cầu của bạn, có lẽ bạn làm 2 bước :
- So sánh chiều dài "Nội dung trước khi sửa" với "Nội dung sau khi sửa"
- Kiểm tra tồn tại của các dịch vụ trong NVal xem có tồn tại trong DArr hay không, sau đó tính lại giá thành.

Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Dim OVal, NVal
Dim DArr, i, j, k
DArr = Sheet2.Range("A2", Sheet2.Range("B1000000").End(xlUp))
If Target.Column = 10 Then
    NVal = Target.Value
    If NVal <> "" Then
        Application.Undo
        OVal = Target.Value
        If OVal = "" Then
            Target = NVal
        Else
            If InStr(" " & OVal & " ", " " & Trim(NVal) & " ") = 0 Then
                Target.Value = OVal & ", " & NVal
            Else
                Target = OVal
            End If
        End If
    End If
  
    If Target <> "" Then
        For i = 1 To UBound(DArr)
            For Each j In Split(Target, ",")
                If Trim(j) = Trim(DArr(i, 1)) Then k = k + DArr(i, 2)
            Next j
        Next i
      
        Target.Offset(, 2) = k
    Else
            Target.Offset(, 2) = ""
    End If
End If
Application.EnableEvents = True
End Sub
 
Không liên quan nhưng cũng cần phải góp ý: File của tác giả sẽ rất nặng vì đã cố tình border cả triệu dòng
Xài bao nhiêu format bấy nhiêu mới là cách làm tốt nhất
 
Web KT

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

Back
Top Bottom