Excel VBA質問箱 IV

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

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


4499 / 13646 ツリー ←次へ | 前へ→

【56136】構成式から計算結果を求めるには 大学一年生 08/6/4(水) 10:22 質問[未読]
【56137】Re:構成式から計算結果を求めるには kanabun 08/6/4(水) 11:17 発言[未読]
【56140】Re:構成式から計算結果を求めるには Yuki 08/6/4(水) 13:33 発言[未読]
【56295】Re:構成式から計算結果を求めるには 大学一年生 08/6/12(木) 16:41 発言[未読]
【56297】Re:構成式から計算結果を求めるには Yuki 08/6/12(木) 17:09 発言[未読]
【56298】Re:構成式から計算結果を求めるには 大学一年生 08/6/12(木) 17:10 お礼[未読]

【56136】構成式から計算結果を求めるには
質問  大学一年生  - 08/6/4(水) 10:22 -

引用なし
パスワード
   おはようございます。
 以下の問題に直面しているが、どのように対処すればクリアできるのか?を
迷っています。私の考え方だと、計算式でやっていこうと思いますが、その構成式の
基数と数字から数字・基数を分離することができなくて、挫折しています。
ご指導ください。
計算の仕組みは基数(I、II、III、IV、V、A〜Z)を元にして、構成式から所定の位置
を探し出して、所定位置からの係数の掛け算を計算する。
もし構成式には基数を含まない場合は、構成式の最後の係数とする。

基数 構成式             結果
I  2I×4.1II×1.1III×10IV×2V  180.4 ・・・・>2×4.1×1.1×10×2 
II  2I×4.1II×1.1III×10IV×2V  90.2 ・・・・>  4.1×1.1×10×2
III  2V×4.1II×1.1III×10IV×2I  22  ・・・・>    1.1×10×2
IV  2II×4.1I×1.1III×10IV×2V  20  ・・・・>       10×2
V  2III×4.1II×1.1I×10IV×2V  2   ・・・・>          2
A  2I×4.1II×1.1III×10IV×2V  2   ・・・・>          2
B  2III×4.1II×1.1I×10IV×2V  2   ・・・・>          2




【56137】Re:構成式から計算結果を求めるには
発言  kanabun  - 08/6/4(水) 11:17 -

引用なし
パスワード
   ▼大学一年生 さん:
おはようございます。
>基数と数字から数字・基数を分離することができなくて、挫折しています。

基数とか 構成式 とか さっぱり門外漢なのですが、

正規表現でよくつかわれる こんなの参考になりませんか

Sub とりあえず数値部分を()
 Dim ss As String
 Dim c
 Dim i As Long
 
 ss = "2I×4.1II×1.1III×10IV×2V"
 With CreateObject("VBScript.RegExp")
   .Pattern = "[\d\.]+"
   .Global = True
   For Each c In .Execute(ss)
    i = i + 1
    Debug.Print i; ")"; Val(c.Value)
   Next
 End With
End Sub


Sub とりあえず基数部をとりだす() '数値でなくxでない文字列をとりだす
 Dim ss As String
 Dim c
 Dim i As Long
 
 ss = "2I×4.1II×1.1III×10IV×2V"
 With CreateObject("VBScript.RegExp")
   .Pattern = "[^\d\.×]+"
   .Global = True
   For Each c In .Execute(ss)
    i = i + 1
    Debug.Print i; ")"; c.Value
   Next
 End With
End Sub

【56140】Re:構成式から計算結果を求めるには
発言  Yuki  - 08/6/4(水) 13:33 -

引用なし
パスワード
   ▼大学一年生 さん:
こんな感じですか?
Sub TEST()
  Debug.Print Num_Proc("III", "2V×4.1II×1.1III×10IV×2I")
End Sub

Function Num_Proc(CN As String, sType As String) As Double
  Dim vD   As Variant
  Dim vF   As Variant
  Dim i    As Long
  Dim dD   As Double
  Dim strD  As String
  Dim sVi   As Long
  
  vD = Split(sType, "×")
  If UBound(vD) = 0 Then Exit Function
  dD = 1
  sVi = 99999
  For i = 0 To UBound(vD)
    strD = CStr(Val(vD(i)))
    If Replace(vD(i), strD, "") = CN Then sVi = i
    If i >= sVi Then dD = dD * Val(vD(i))
  Next
  If sVi = 99999 Then dD = Val(vD(UBound(vD)))
  Num_Proc = dD
End Function

【56295】Re:構成式から計算結果を求めるには
発言  大学一年生  - 08/6/12(木) 16:41 -

引用なし
パスワード
   Yukiさん
返事が遅くなりました。すみません。
 Visual Basic Editorへコピーし、基数、構成式の内容を換えて実行した結果は
すべて正しいです。
 Excelのワークシートに、以下のようにやると、「#NAME?」エラーがでます。
使い方はどこかに誤りがあると思います。
教えていただけませんか?
  A    B               C
1 III   2V×4.1II×1.1III×10IV×2I  =Num_Proc(A1,B1)
 

Function Num_Proc(CN As String, sType As String) As Double
  Dim vD   As Variant
  Dim vF   As Variant
  Dim i    As Long
  Dim dD   As Double



Num_Proc = dD
End Function

【56297】Re:構成式から計算結果を求めるには
発言  Yuki  - 08/6/12(木) 17:09 -

引用なし
パスワード
   ▼大学一年生 さん:

下記プロシージャは標準モジュールに書かれていますか?
         ^^^^^^^^^^^^^^
>Function Num_Proc(CN As String, sType As String) As Double
>  Dim vD   As Variant
>  Dim vF   As Variant
>  Dim i    As Long
>  Dim dD   As Double
>・
>・
>・
>Num_Proc = dD
>End Function

【56298】Re:構成式から計算結果を求めるには
お礼  大学一年生  - 08/6/12(木) 17:10 -

引用なし
パスワード
   ありがとうございました。
問題解決です!!

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