Câu trả lời:
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.
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à C2
cho $. Sau đó chạy một =sumif
hàm cho tổng phụ.
=sumif(helpcolumncell,"C2",currencycell)
để tính tổng đô la, và thay thế C2
bằng ,2
bả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
␢€␢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.
=cell("format",A1)
luôn trả về2
...