Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2116 / 13645 ツリー ←次へ | 前へ→

【69861】初心者ですみません はじめてのVBA 11/9/7(水) 17:56 質問[未読]
【69862】Re:初心者ですみません momo 11/9/8(木) 10:47 発言[未読]
【69863】Re:初心者ですみません はじめてのVBA 11/9/8(木) 12:10 質問[未読]
【69864】Re:初心者ですみません momo 11/9/8(木) 13:11 発言[未読]
【69865】Re:初心者ですみません はじめてのVBA 11/9/8(木) 17:44 お礼[未読]

【69861】初心者ですみません
質問  はじめてのVBA  - 11/9/7(水) 17:56 -

引用なし
パスワード
   はじめまして。
はじめてVBAでシートを作成することになったのですが、誰にも聞けないため申し訳ありませんがどなたか下記についてご教示していただけないでしょうか。

内容は
下記のAに数式を入力後、ワークシート上で+、-、×、÷、べき乗(上付き表示)、√、πに変更表示し、答えをDに算出する桁数を自由にしたいのですが。
     A1         B1       C1       D1  E1
     数式      小数桁数     式       答え
3 (0.80^2*Pi())/4     2    (0.80^2×π)÷4   0.50

4 SQRT(2)         3    √(2)        1.412
5
n

すみませんがよろしくお願いいたします。

【69862】Re:初心者ですみません
発言  momo  - 11/9/8(木) 10:47 -

引用なし
パスワード
   ▼はじめてのVBA さん:
はじめまして。

厳密に考えると、もっともっと条件が沢山ありそうですが・・・
とりあえず叩き台として

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myFml As String
Dim myPlc As Integer
Dim Ans  As Double
If Not Application.Intersect(Target, Me.Range("A3:B30")) Is Nothing Then
 With Target.EntireRow
  myFml = .Cells(1).Value
  myPlc = .Cells(2).Value
  Ans = Application.Evaluate(myFml)
  Application.EnableEvents = False
  If IsError(Ans) Then
   .Cells(3).Value = "数式を確認"
   .Cells(4).Value = "Err"
  Else
   RepFormula .Cells(3), myFml
   .Cells(4).NumberFormatLocal = IIf(myPlc = 0, "0", "0." & String(myPlc, "0"))
   .Cells(4).Value = Ans
  End If
  Application.EnableEvents = True
 End With
End If
End Sub

Private Sub RepFormula(myRng As Range, myStr As String)
Dim myReg As Object
Dim i   As Long
myStr = StrConv(myStr, vbLowerCase)
myStr = Replace(myStr, "+", "+")
myStr = Replace(myStr, "-", "−")
myStr = Replace(myStr, "*", "×")
myStr = Replace(myStr, "/", "÷")
myStr = Replace(myStr, "pi()", "π")
myStr = Replace(myStr, "sqrt", "√")
With CreateObject("VBScript.RegExp")
 .Global = True
 .Pattern = "\^-*\d+"
 Set myReg = .Execute(myStr)
 myStr = Replace(myStr, "^", "")
 myRng.Value = myStr
 For i = 1 To myReg.Count
  With myReg.Item(i - 1)
   myRng.Characters(.firstindex + 2 - i, .Length - 1).Font.Superscript = True
  End With
 Next i
End With
End Sub

【69863】Re:初心者ですみません
質問  はじめてのVBA  - 11/9/8(木) 12:10 -

引用なし
パスワード
   ▼momo さん:

momoさんありがとうございます。
動きました。

もう一点教えて下さい。
D1で得られた値の計算式を
=round(An,Bn)で行い、小数点以下をBnで丸めたいのですが。

済みませんが、教えて下さい。

【69864】Re:初心者ですみません
発言  momo  - 11/9/8(木) 13:11 -

引用なし
パスワード
   ▼はじめてのVBA さん:
>もう一点教えて下さい。
>D1で得られた値の計算式を
>=round(An,Bn)で行い、小数点以下をBnで丸めたいのですが。

.Cells(4).NumberFormatLocal = IIf(myPlc = 0, "0", "0." & String(myPlc, "0"))
.Cells(4).Value = Ans
の部分で表示形式で丸めていますが、実際の値も丸めるという事ですね

単にワークシート関数でRoundするだけなので
.Cells(4).Value = Ans
の所を
.Cells(4).Value = Application.WorksheetFunction.Round(Ans, myPlc)
に変更するだけで出来ると思います。

【69865】Re:初心者ですみません
お礼  はじめてのVBA  - 11/9/8(木) 17:44 -

引用なし
パスワード
   momoさん

ありがとうございました。

まだまだ解らないことがあります。
また教えて下さい。

助かりました。

2116 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free