VBA巨集請教

敝人手上有一份是計算銀行複利的VBA巨集,
是讓使用者自行輸入參數,
([B1][B2][D1][D2][F2]這幾欄)
其餘欄位會自動產生,
但目前執行上有個問題,
當[A11]大於預設值[D2]
如下圖
VBA巨集請教

要如何讓[A11]大於[D2]時等於[D2],
需要修改的地方是藍色字體的部份...

VBA巨集
Sub P_IR3()
Dim i, j, k, n As Integer
Dim amt As Long
Dim h, l, x As Single
Dim ss, ran1, ran2, ran3, r, c As String
Dim rg1 As Range

ss = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

[A1] = "存款金額"
[C1] = "存款年數"
[A2] = "最低利率"
[C2] = "最高利率"
[E2] = "利率級距"

Set rg1 = Range("B1:D1")
With rg1.Interior.Color = RGB(204, 204, 255)
End With

n = [D1]
l = [B2]
h = [D2]
x = [F2]
amt = [B1]

Range("A3:AZ60").Clear

[A3] = " 年數"+ Chr(10) +" 年利率"


Range("A3").Select
With Selection.Borders(xlDiagonalDown)
.LineStyle = xlContinuous
End With
k = CInt((h - l) / x)

For i = 0 To k
Cells(i + 4, 1) = l + x * i
Next


'ran1 = "A4:A" + CStr(4 + k)
'Range(ran1).Select
r = "A" & 4
c = "A" & (k + 4)
Range(r, c).Select
Selection.Style = "Percent"
Selection.NumberFormatLocal = "0.000%"
ran3 = "B2,D2"
Range(ran3).Select
Selection.Style = "Percent"
Selection.NumberFormatLocal = "0.0%"
Selection.Font.Size = 14
Selection.Font.Color = RGB(0, 0, 255)

If n + 1 <= 26 Then
s1 = Mid(ss, n + 1, 1)
Else
s1 = "A" + Mid(ss, n + 1 - 26, 1)
End If

Range("B:" + s1).Select
Selection.ColumnWidth = 9.5

ran2 = "B4:" + s1 + CStr(4 + k)
Range(ran2).Select
Selection.NumberFormatLocal = "#,##0_ "

For i = 4 To k + 4
For j = 2 To n + 1
Cells(3, j) = j - 1
Cells(i, j) = amt * (1 + Cells(i, 1)) ^ Cells(3, j)
Next
Next

End Sub


Private Sub CommandButton1_Click()
P_IR3
End Sub
2014-03-09 0:57 發佈
文章關鍵字 VBA
你寫的嗎? 你簡化一下吧? 設定的字型 樣式 選擇 刪掉你加了一些格式太花

超過範圍是超過哪一個範圍?
simonni wrote:
你寫的嗎? 你簡化一...(恕刪)

不是我寫的...xd
我還不太懂vb語法..
其實是連EXCEL函數都不是很熟...

超出範圍是指最低利率+利率級距*N超過最高利率時。

目前修改如下,
(紅色字體是我加上去的)
但是似乎還是怪怪的。

Sub P_IR3()
Dim i, j, k, n As Integer
Dim amt As Long
Dim h, l, x As Single
Dim ss, ran1, ran2, ran3, r, c As String
Dim rg1 As Range

ss = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

[A1] = "存款金額"
[C1] = "存款年數"
[A2] = "最低利率"
[C2] = "最高利率"
[E2] = "利率級距"

Set rg1 = Range("B1:D1")
With rg1.Interior.Color = RGB(204, 204, 255)
End With

n = [D1]
l = [B2]
h = [D2]
x = [F2]
amt = [B1]

Range("A3:AZ60").Clear

[A3] = " 年數"+ Chr(10) +" 年利率"


Range("A3").Select
With Selection.Borders(xlDiagonalDown)
.LineStyle = xlContinuous
End With
k = CInt((h - l) / x)

For i = 0 To k
Cells(i + 4, 1) = l + x * i

If (l + x * i) > h Then
Cells(i + 4, 1) = [D2]
End If

Next

'ran1 = "A4:A" + CStr(4 + k)
'Range(ran1).Select
r = "A" & 4
c = "A" & (k + 4)
Range(r, c).Select
Selection.Style = "Percent"
Selection.NumberFormatLocal = "0.000%"
ran3 = "B2,D2"
Range(ran3).Select
Selection.Style = "Percent"
Selection.NumberFormatLocal = "0.0%"
Selection.Font.Size = 14
Selection.Font.Color = RGB(0, 0, 255)

If n + 1 <= 26 Then
s1 = Mid(ss, n + 1, 1)
Else
s1 = "A" + Mid(ss, n + 1 - 26, 1)
End If

Range("B:" + s1).Select
Selection.ColumnWidth = 9.5

ran2 = "B4:" + s1 + CStr(4 + k)
Range(ran2).Select
Selection.NumberFormatLocal = "#,##0_ "

For i = 4 To k + 4
For j = 2 To n + 1
Cells(3, j) = j - 1
Cells(i, j) = amt * (1 + Cells(i, 1)) ^ Cells(3, j)
Next
Next

End Sub


Private Sub CommandButton1_Click()
P_IR3
End Sub
面對壞事的態度,決定了你心情的高度; 做人的態度,決定了你名聲的高度; 做事的態度,決定了你成就的高度。
複利計算,請用 FV() 函數

範例:
=FV(1%,1,,-200000)

年利率 1% , 存1年,金額20萬
滿期可拿回:202000

這樣不就簡單多了
你寫的全刪掉

你原先寫的判斷式如下(你寫的公式 (l + x * i) > h 自改)
If (l + x * i) > h Then
Cells(i + 4, 1) = [D2]
End If

改成下列(藍色 2行自選一行另一行要刪掉或行首 + 單引號 "'")

If (l + x * i) > h Then
Cells(i, j) = h
Cells(i, j) = amt * (1 + Cells(i, 1)) ^ Cells(3, j)

Unload Me
End
End If



先找到下列原程式:下列虛線內變更(這段是將資料寫到儲存格內)
----------------------------------------------------------
For i = 4 To k + 4
For j = 2 To n + 1
Cells(3, j) = j - 1
Cells(i, j) = amt * (1 + Cells(i, 1)) ^ Cells(3, j)
Next
Next
----------------------------------------------------------
改成下列虛線內
----------------------------------------------------------
For i = 4 To k + 4
For j = 2 To n + 1
Cells(3, j) = j - 1

If (l + x * i) > h Then
Cells(i, j) = h
Unload Me
End
End If


Cells(i, j) = amt * (1 + Cells(i, 1)) ^ Cells(3, j)
Next
Next
----------------------------------------------------------
最後發現問題其實是出在
k = CInt((h - l) / x)
我後來改成k = - Int(-CSng((h - l) / x))就解決了。
面對壞事的態度,決定了你心情的高度; 做人的態度,決定了你名聲的高度; 做事的態度,決定了你成就的高度。
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?