Nuts. I didn't want to have to parse those IIf statements, but once I did, I saw a better way than I originally considered.

Try this as:
= LegalSpeak(Legal_Fee, Gift_Voucher_Fee, CashBack_Fee)
in place of what you had before.

I eliminated Refund_Legal, Refund_GV, and Refund_CB because I am using non-zero amount for the fees instead. If that approach doesn't work for you, you'll have to revise this thing. I liked it because it was simpler for me to deal with.

[VBA]Public Function LegalSpeak(pLegal_Fee, _
pGift_Voucher_Fee, _
pCashBack_Fee) As String

Dim strOut As String 'return value
Dim strBeginning As String
Dim strMiddle As String
Dim strEnd As String
Dim intNumFees As Integer 'number of fees
Dim colFees As Collection 'collection of formatted
'text fragments for fees

Set colFees = New Collection

strBeginning = "Please note that there is "
strEnd = " which shall be borne by the Customer(s). " & _
"In this connection, kindly collect the said sum on " & _
"our behalf. You are advised to execute the document " & _
"only upon receipt of the said sum."

intNumFees = 0

If Nz(pLegal_Fee) > 0 Then
intNumFees = intNumFees + 1
colFees.Add "legal subsidy of " & _
Format(pLegal_Fee, "Currency"), CStr(intNumFees)
End If

If Nz(pGift_Voucher_Fee) > 0 Then
intNumFees = intNumFees + 1
colFees.Add "gift voucher of " & _
Format(pGift_Voucher_Fee, "Currency"), CStr(intNumFees)
End If

If Nz(pCashBack_Fee) > 0 Then
intNumFees = intNumFees + 1
colFees.Add "cashback of " & _
Format(pCashBack_Fee, "Currency"), CStr(intNumFees)
End If

strMiddle = vbNullString
Select Case colFees.Count
Case 1
strMiddle = colFees("1")
Case 2
strMiddle = colFees("1") & " and " & colFees("2")
Case 3
strMiddle = colFees("1") & ", " & colFees("2") & _
" and " & colFees("3")
Case Else
'leave strMiddle as null string
End Select

If Len(strMiddle) > 0 Then
strOut = strBeginning & strMiddle & strEnd
Else
strOut = "No Fees"
End If

Set colFees = Nothing
LegalSpeak = strOut
End Function
[/VBA]