柔軟性を保つために、いくつかのカスタム コードを使用してこれを行います。Microsoft はローマ数字変換を行うコードをいくつか持っているので、これを適応させます。
必要なカスタム コードを追加しましょう。整数をローマ数字に変換する関数と、提供する数字の種類を計算する関数です。
Function PageNumber(page As Integer, startArabic As Integer) As String
If page <= startArabic Then
PageNumber = IntegerToRoman(page)
Else
PageNumber = (page - startArabic).ToString()
End If
End Function
Function IntegerToRoman (ByVal N As Integer) As String
Const Digits = "ivxlcdm"
Dim I As Integer
Dim Digit As Integer
Dim Temp As String
I = 1
Temp = ""
Do While N > 0
Digit = N Mod 10
N = N \ 10
Select Case Digit
Case 1
Temp = Mid(Digits, I, 1) & Temp
Case 2
Temp = Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp
Case 3
Temp = Mid(Digits, I, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp
Case 4
Temp = Mid(Digits, I, 2) & Temp
Case 5
Temp = Mid(Digits, I + 1, 1) & Temp
Case 6
Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Temp
Case 7
Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp
Case 8
Temp = Mid(Digits, I + 1, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Mid(Digits, I, 1) & Temp
Case 9
Temp = Mid(Digits, I, 1) & Mid(Digits, I + 2, 1) & Temp
End Select
I = I + 2
Loop
IntegerToRoman = Temp
End Function
レポートをより柔軟にするために、いつアラビア数字に戻すかを指定するパラメーターを追加します (レポートが長くなる段階で 10 個以上のローマ数字が必要になる場合に備えて)。それを呼び出してみましょう。@StartArabic
デフォルト値が の整数になります10
。したがって、ページ番号の式は次のようになります。
="Page " & Code.PageNumber(Globals!PageNumber, Parameters!StartArabic.Value)