[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/12/03(Fri) 21:25
投稿者名:西田
Eメール:
URL :
タイトル:
英数字混合の計算方法
こんばんは。(^^)v
毎回、皆様方のアドバイスを参考にさせてもらっている、西田と申します。
どうか、皆様方の良きアドバイス、お願いします。

実は、タイトルにも記載してるのですが、英数字混合の計算が出来なくて困っています。
この英数字に+1ずつ足していって、計算を行いたい。
※但し、”9”の次は ”A”、”Z”の次は ”0”と計算したい。

例えば、3桁の英数字があると仮定します。
199 ⇒ 199+1=19A
19Z ⇒ 19Z+1=1A0
1ZZ ⇒ 1ZZ+1=200 という風に計算させたいのです。

どなたか、英数字混合でしかもある程度制限付きの計算方法が分かる方がおられましたら、
どうか、アドバイスして頂きたい。
よろしくお願いします。

投稿時間:2004/12/04(Sat) 02:26
投稿者名:しゅう
Eメール:
URL :
タイトル:
Re: 英数字混合の計算方法
提示されている式は下記で確認しました。
細かな例外処理は考慮していません。

'入力式
A = "19Z+1"

B = Len(A)

'計算
For i = B To 1 Step -1
    C = Mid(A, i, 1)
    If C = "+" Then
        D = 0
        E = False
    Else
        E = True
        F = Asc(C)
        If 48 <= F And F <= 57 Then
            G = F - 48
        Else
            '小文字入力対応
            If 65 <= F And F <= 90 Then
                G = F - 55
            Else
                If 97 <= F And F <= 122 Then
                    G = F - 87
                End If
            End If
        End If
    End If
    If E Then
        H = H + G * 36 ^ D
        D = D + 1
    End If
Next

'出力(4桁)
For i = 0 To 3
    Y = H Mod 36
    If 0 <= Y And Y <= 9 Then
        Z = Chr(Y + 48) + Z
    Else
        Z = Chr(Y + 55) + Z
    End If
    H = H \ 36
Next
MsgBox Z

投稿時間:2004/12/06(Mon) 08:19
投稿者名:西田
Eメール:
URL :
タイトル:
お礼
しゅうさん、アドバイスありがとうございました。
返事が遅くなってしまい、申し訳ございませんでした。

しゅうさんのアドバイスを元に、対応してみたいと思います。
本当にありがとうございました。
これからも、よきアドバイスの程、お願いします。

投稿時間:2004/12/05(Sun) 12:20
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: 英数字混合の計算方法
> こんばんは。(^^)v
> 毎回、皆様方のアドバイスを参考にさせてもらっている、西田と申します。
> どうか、皆様方の良きアドバイス、お願いします。
>
> 実は、タイトルにも記載してるのですが、英数字混合の計算が出来なくて困っています。
> この英数字に+1ずつ足していって、計算を行いたい。
> ※但し、”9”の次は ”A”、”Z”の次は ”0”と計算したい。
>
> 例えば、3桁の英数字があると仮定します。
> 199 ⇒ 199+1=19A
> 19Z ⇒ 19Z+1=1A0
> 1ZZ ⇒ 1ZZ+1=200 という風に計算させたいのです。
>
> どなたか、英数字混合でしかもある程度制限付きの計算方法が分かる方がおられましたら、
> どうか、アドバイスして頂きたい。
> よろしくお願いします。

英数字混合というより36進数の計算ですね。
ただ1足すだけでしたらこんな感じでも出来ます。

Private Sub Command1_Click()
    Dim strNumber As String
    Dim i As Integer
    Dim intC As Integer
    Dim intAdd As Integer
    
    strNumber = "1ZZ"
    strNumber = StrConv(strNumber, vbUpperCase) '大文字に変換
    intAdd = 1
    For i = Len(strNumber) To 1 Step -1
        intC = Asc(Mid$(strNumber, i, 1))
        If intAdd = 1 Then
            Select Case intC
            Case vbKey0 To vbKey8
                Mid$(strNumber, i, 1) = Chr$(intC + intAdd)
                intAdd = 0
            Case vbKey9
                Mid$(strNumber, i, 1) = "A"
                intAdd = 0
            Case vbKeyA To vbKeyY
                Mid$(strNumber, i, 1) = Chr$(intC + intAdd)
                intAdd = 0
            Case vbKeyZ
                Mid$(strNumber, i, 1) = "0"
                intAdd = 1
            End Select
        End If
    Next i
    
    MsgBox strNumber
End Sub

投稿時間:2004/12/06(Mon) 08:23
投稿者名:西田
Eメール:
URL :
タイトル:
お礼
LESIAさん、アドバイスありがとうございました。
返事が遅くなってしまい、申し訳ございませんでした。

LESIAさんのアドバイスを元に、対応してみたいと思います。
36進数の計算なんて、全く考えなかったし分からなかったので、
これを機会に、こういうやり方もあるんだ。と言うことを頭にインプットしたいと思います。
本当にありがとうございました。
これからも、よきアドバイスの程、お願いします。