Excel VBA質問箱 IV

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

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


18304 / 76732 ←次へ | 前へ→

【63871】Re:桁数が多いと勝手に指数で計算してうまく判定できない
質問  pon  - 09/12/24(木) 18:40 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます

>>Q2
で解説いただいた内容は

Mid 関数
文字列から指定した文字数分の文字列を返します。
を踏まえて
値      右
文字列    左
MIDで文字列    左
'+で数値      右
'&で文字    左
は了解ですが下記わかりません

= は参照先が数値なら 右 、文字列なら 左
でした
いまさらながらですが、動作としてわかりましたが
この動作のhelpみたいなものはあるのでしょうか
調べてみましたが見つかりませんでした
単純一般機能として理解すればいいような気もしますが・・・・


>>B8が指数で左寄せ
>これは、??? B1は、文字列ですよね?
>(再現できないので、さらに再現手順を詳細に記述してください)
ですが
下記で再現できます
C4が指数表示で右寄せ
C7が指数表示なのに左寄せとなっています
ただ 参照先が 
C4は、MID関数式
C7は、等号式?
の違いがありますが・・・・・
何か有りましたらよろしくお願い致します


Sub cell_set2()
  
  Cells.Delete Shift:=xlUp
  
  Range("B2").Value = "V2_I173 35051000100001000100002000000000402"
  
  Range("C2").Formula = "= MID(B2, FIND("" "", B2)+1, 100)"
  Range("C3").Formula = "=C2"
  Range("C4").Formula = "=C2+1"
  
  Range("B6").NumberFormatLocal = "@"
  Range("B6").Value = "35051000100001000100002000000000402"
  
  Range("C6").Formula = "=B6"
  Range("C7").Formula = "=B6+1"
  
  Columns("B:C").EntireColumn.AutoFit

  Range("B2").Select
  
End Sub


足し算 引き算 の コード ありがとうございます
>これは、昔やった縦書きの足し算(加法の場合)をVBAでコード化するのですよ

やっと文字列操作の方法がイメージがつかめましたが
ムム〜 このタイプのコードなんでか苦手で自力ではかけません 
作成し始めるといつも何をしているか迷子になってギブアップみたいな・・
何でなんでしょ
一応動作はわかるのですが・・多分自力では書けない・・
フローチャート?が書けるようになればいいのかな?
(自慢ではありませんが書いたことはありません)
アホだからでもいいですが、何かアドバイス頂けると一歩進めるような気がします
なにかありましたらよろしくお願いします

後、
足し算の If g3 > 0 Then
の意味が下記で確認してもなぜいるのかよくわからないのですが・・・
アドバイス頂けるとうれしいです
よろしくお願いいたします


>その時も平方根の計算をシュミレートすれば という投稿を
>したと思いました
▼【32873】マクロで平方根を・・・・・
tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=32873;id=excel
ありがとうございます
別途勉強させて頂きます


初心者さんの場合は同じような人がいるかもしれませんので
一応下記書いてみました
頂いたコードを下記のようにしてステップ実行すると動作だけはわかると思います

足し算
Option Explicit
'================================================================
Sub test()
  Dim s1 As String
  Dim s2 As String
  s1 = "123"
  s2 = "29"
  [a1].Value = "'" & stradd(s1, s2)
  s1 = "3505100010000100010000200000402111111111"
  s2 = "35"
  [a2].Value = "'" & stradd(s1, s2)
End Sub
'=================================================================
Function stradd(ByVal str1 As String, str2 As String) As String
  Dim l1 As Long
  Dim l2 As Long
  Dim g0 As Long
  Dim g1 As Long
  Dim g2 As Long
  Dim g3 As Long
  l1 = Len(str1)
  l2 = Len(str2)
  g3 = 0
  Do While l1 > 0 Or l2 > 0
    If l1 > 0 Then g1 = Val(Mid(str1, l1, 1)) Else g1 = 0
    If l2 > 0 Then g2 = Val(Mid(str2, l2, 1)) Else g2 = 0
    g0 = g1 + g2 + g3
    g3 = g0 \ 10
    stradd = CStr((g0 Mod 10)) & stradd
    l1 = l1 - 1
    l2 = l2 - 1
   
    Debug.Print stradd  'ブレークポイントセット
   
  Loop
  
  If g3 > 0 Then  'ブレークポイントセット
    
    Debug.Print
    Debug.Print CStr(g3)
    Debug.Print stradd

    stradd = CStr(g3) & stradd
    
  Else  'ブレークポイントセット
  
    Debug.Print
    Debug.Print CStr(g3)
    Debug.Print stradd
    
  End If
  
End Function


引き算
Option Explicit

'===================================================================
Sub test2()
  Dim s1 As String
  Dim s2 As String
  s1 = "131"
  s2 = "145"
  [a1].Value = "'" & strsub(s1, s2)
  s1 = "3505100010000100010000200000402111111111"
  s2 = "35"
  [a2].Value = "'" & strsub(s1, s2)
End Sub
'=================================================================
Function strsub(ByVal str1 As String, ByVal str2 As String) As String
  Dim l1 As Long
  Dim l2 As Long
  Dim g0 As Long
  Dim g1 As Long
  Dim g2 As Long
  Dim g3 As Long
  Dim wk As String
  Dim hugo As String
  g0 = mystrcomp(str1, str2)
  hugo = ""
  If g0 = -1 Then
    wk = str1
    str1 = str2
    str2 = wk
    hugo = "-"
  End If
  If g0 = 0 Then
    strsub = "0"
  Else
    l1 = Len(str1)
    l2 = Len(str2)
    g3 = 0
    Do While l1 > 0 Or l2 > 0
     If l1 > 0 Then g1 = Val(Mid(str1, l1, 1)) Else g1 = 0
     If l2 > 0 Then g2 = Val(Mid(str2, l2, 1)) Else g2 = 0
     g0 = g1 - g2 - g3
     If g0 < 0 Then
       g0 = 10 + g0
       g3 = 1
     Else
       g3 = 0
     End If
     strsub = CStr(g0) & strsub
     l1 = l1 - 1
     l2 = l2 - 1
     
     Debug.Print strsub  'ブレークポイントセット
     
    Loop
   
    Debug.Print
   
    For g0 = 1 To Len(strsub)
     
     Debug.Print Mid(strsub, g0, 1)
   
     If Mid(strsub, g0, 1) <> "0" Then
       strsub = Mid(strsub, g0)
       Exit For
     End If
    Next
    strsub = hugo & strsub
   
    Debug.Print
    Debug.Print strsub  'ブレークポイントセット (str2>str1でも試す)
   
  End If
End Function
'=======================================================================
Function mystrcomp(ByVal strnum1 As String, ByVal strnum2 As String) As Long
'  mystrcomp   1  strnum1>strnum2
'          0  strnum1=strnum2
'         -1  strnum1<strnum2

  Dim x As String
  Dim y As String
  x = Space(Application.Max(Len(strnum1), Len(strnum2)))
  y = x
  Rset x = strnum1
  Rset y = strnum2
  mystrcomp = StrComp(x, y)
End Function

1 hits

【63725】桁数が多いと勝手に指数で計算してうまく判定できない pon 09/12/3(木) 16:00 質問
【63726】Re:桁数が多いと勝手に指数で計算してうま... ichinose 09/12/3(木) 17:40 発言
【63787】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/15(火) 12:33 お礼
【63788】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/15(火) 12:49 質問
【63789】Re:桁数が多いと勝手に指数で計算してうま... Jaka 09/12/15(火) 13:42 発言
【63792】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/15(火) 16:52 質問
【63794】Re:桁数が多いと勝手に指数で計算してうま... よろずや 09/12/15(火) 19:34 回答
【63853】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/22(火) 15:26 質問
【63854】Re:桁数が多いと勝手に指数で計算してうま... Yuki 09/12/22(火) 15:50 発言
【63855】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/22(火) 16:58 質問
【63856】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/22(火) 19:07 お礼
【63857】Re:桁数が多いと勝手に指数で計算してうま... ichinose 09/12/22(火) 22:09 発言
【63867】Re:桁数が多いと勝手に指数で計算してうま... よろずや 09/12/23(水) 23:45 発言
【63870】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/24(木) 18:36 お礼
【63868】Re:桁数が多いと勝手に指数で計算してうま... ichinose 09/12/24(木) 7:35 発言
【63871】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/24(木) 18:40 質問
【63874】Re:桁数が多いと勝手に指数で計算してうま... ichinose 09/12/25(金) 7:25 発言
【63880】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/25(金) 15:00 お礼
【63797】Re:桁数が多いと勝手に指数で計算してうま... ichinose 09/12/15(火) 21:58 発言
【63802】Re:桁数が多いと勝手に指数で計算してうま... Yuki 09/12/16(水) 13:33 発言
【63881】Re:桁数が多いと勝手に指数で計算してうま... pon 09/12/25(金) 15:01 お礼

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