それで急いで作った美しくないやつは・・、
=IF(LEN(INT(定価*掛け率))<=3,INT(定価*掛け率)*1,IF(LEN(INT(定価*掛け率))=4,LEFT(定価*掛け率,3)*10,IF(LEN(INT(定価*掛け率))=5,LEFT(定価*掛け率,3)*100,IF(LEN(INT(定価*掛け率))=6,LEFT(定価*掛け率,3)*1000,IF...))))
といういつになっても終わらない超ネスト状態のまことに醜い関数。
そしてあまりに醜いので作ったのが次の「ユーザー定義関数」
Function nHNet(tEika, k)
Dim nH As Long
nH = Int(tEika * k)
Application.Volatile
Select Case Len(nH)
Case Is <= 3
nHNet = nH * 1
Case 4
nHNet = Left(nH, 3) * 10
Case 5
nHNet = Left(nH, 3) * 100
Case 6
nHNet = Left(nH, 3) * 1000
Case 7
..
Case ..
..
Case Else
nHNet = "高すぎる!"
End Select
End Function
見た目は=nHNet(定価,掛け率)とすっきりしていますがどんな桁数にも対応できるというものではありません、それにやはり実体は醜いままです。
これじゃあまりにお情けないので昨日「自宅」というまったく違ったゆっくりと没頭できる環境で作ったのがこれです。
=IF(LEN(INT(定価*掛け率))<=2,INT(定価*掛け率),INT(LEFT(INT(定価*掛け率),3)*10^(LEN(INT(定価*掛け率))-3)))
これでもいいのだが見た目がやはりごてごてしているのでそれを「ユーザー定義関数」にしたのがこれです。
Function nHNet(tEika, k)
Dim nH As Long
nH = Int(tEika * k)
Application.Volatile
If Len(nH) <= 2 Then '有効数字桁数が「2」以下か
nHNet = nH 'そのまま出力
Else
'べき乗を使うことでどんな桁にも対応
'10^0=1 10^1=10 になることに着目
nHNet = Left(nH, 3) * 10 ^ (Len(nH) - 3)
End If
End Function
どうです?これですっきりしたでしょ。
=IF(LEN(INT(定価*掛け率))<=3,INT(定価*掛け率)*1,IF(LEN(INT(定価*掛け率))=4,LEFT(定価*掛け率,3)*10,IF(LEN(INT(定価*掛け率))=5,LEFT(定価*掛け率,3)*100,IF(LEN(INT(定価*掛け率))=6,LEFT(定価*掛け率,3)*1000,IF...))))
といういつになっても終わらない超ネスト状態のまことに醜い関数。
そしてあまりに醜いので作ったのが次の「ユーザー定義関数」
Function nHNet(tEika, k)
Dim nH As Long
nH = Int(tEika * k)
Application.Volatile
Select Case Len(nH)
Case Is <= 3
nHNet = nH * 1
Case 4
nHNet = Left(nH, 3) * 10
Case 5
nHNet = Left(nH, 3) * 100
Case 6
nHNet = Left(nH, 3) * 1000
Case 7
..
Case ..
..
Case Else
nHNet = "高すぎる!"
End Select
End Function
見た目は=nHNet(定価,掛け率)とすっきりしていますがどんな桁数にも対応できるというものではありません、それにやはり実体は醜いままです。
これじゃあまりにお情けないので昨日「自宅」というまったく違ったゆっくりと没頭できる環境で作ったのがこれです。
=IF(LEN(INT(定価*掛け率))<=2,INT(定価*掛け率),INT(LEFT(INT(定価*掛け率),3)*10^(LEN(INT(定価*掛け率))-3)))
これでもいいのだが見た目がやはりごてごてしているのでそれを「ユーザー定義関数」にしたのがこれです。
Function nHNet(tEika, k)
Dim nH As Long
nH = Int(tEika * k)
Application.Volatile
If Len(nH) <= 2 Then '有効数字桁数が「2」以下か
nHNet = nH 'そのまま出力
Else
'べき乗を使うことでどんな桁にも対応
'10^0=1 10^1=10 になることに着目
nHNet = Left(nH, 3) * 10 ^ (Len(nH) - 3)
End If
End Function
どうです?これですっきりしたでしょ。