Lọc theo tiền tệ trong Excel


1

Tôi gặp tình huống này trong Microsoft Excel:

Dữ liệu

Các ô được định dạng bằng cách sử dụng "Định dạng ô" và đặt Tiền tệ theo cách thủ công cho từng ô. Vì vậy, chúng không phải là chuỗi đơn giản. Tôi sẽ tổng hợp lọc theo tiền tệ. Điều đó có thể không? Làm sao?

Cảm ơn.

Câu trả lời:


2

VBA

Vì bạn đã sử dụng tùy chọn "định dạng" để định dạng các ô này, định dạng không được chứa trong giá trị của ô, vì vậy chúng tôi sẽ cần xác định hàm trong VBA. Đặt ( nguồn ) này trong một mô-đun mới:

Public Function sumFormats(rng As Range) As String
Application.Volatile
Dim cell As Range, dblDollar#, dblPound#
dblDollar = 0: dblPound = 0
For Each cell In rng
If Len(cell.Value) > 0 Then
If Left(cell.Text, 1) = "$" Then
dblDollar = dblDollar + cell.Value
Else
dblPound = dblPound + cell.Value
End If
End If
Next cell
sumFormats = "Sum of currency: $" & dblDollar & "; Sum of Pounds: " & ChrW(163) & dblPound
End Function

Sau đó sử dụng hàm mới =sumFormats(A1:A20)cho bất kỳ ô nào bạn muốn và nó sẽ cung cấp cho bạn tổng trên 1 dòng. Nếu bạn cần tổng phụ trên các dòng khác nhau, chúng tôi sẽ cần sửa đổi đầu ra của hàm.


Không phải VBA

Nếu bạn không muốn gây rối với VBA, bạn sẽ cần một cột trợ giúp bên cạnh các số của bạn. Trong cột đó sử dụng hàm =cell("format",A1)và điều này sẽ trả về ,2£ và C2cho $. Sau đó chạy một =sumifhàm cho tổng phụ.

=sumif(helpcolumncell,"C2",currencycell)để tính tổng đô la, và thay thế C2bằng ,2bảng Anh. Bạn luôn có thể ẩn cột người trợ giúp nếu bạn không thích nó. Trong trường hợp này, chúng tôi sẽ giả sử dữ liệu của bạn ở Cột B và người trợ giúp là Cột C.

A             B    C

             Data  Format
              $1    =cell("format",B2) = C2
              £2    =cell("format",B3) = ,2  
              £3    =cell("format",B4) = ,2
              $4    =cell("format",B5) = C2 
sum dollar =sumif($C$2:$C$4,"C2",$B$2:$B$4) = 5

sum pound  =sumif($C$2:$C$4,",2",$B$2:$B$4) = 5

Sau đó, bạn sẽ cần định dạng các ô sumif này để có được ký hiệu tiền tệ hoặc thêm vào một =concatenate("$"&sumif(...))hàm


Tôi đã thử cả hai phương pháp. Với VBA, tôi luôn kết thúc khối ELSE (pound) cho mọi ô. Sử dụng phương pháp không phải VBA, =cell("format",A1)luôn trả về 2...
lorenzo-s

bạn đã thay đổi phạm vi di động thành phạm vi của bạn phải không? Và bạn đã sử dụng định dạng tiền tệ được xác định? Cả hai đều hoạt động khi tôi sử dụng chúng, hãy tìm ra sự khác biệt
Raystafarian

Tôi đang sử dụng € và HKD.
lorenzo-s

Tôi không biết tại sao, nhưng Excel đặt một khoảng trống (ASCII 32) trước ký hiệu tiền tệ. Vì vậy, giá trị tế bào là một cái gì đó như ␢€␢1234.56. Vì vậy, tôi đã sử dụng Mid(cell.Text, 2, 1)thay vì Left(cell.Text, 1)trong mã VBA, và tôi đã giải quyết. Cảm ơn bạn.
lorenzo-s

Vui mừng bạn đã nhận ra nó!
Raystafarian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.