アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBA、初心者です。
以下の記述でつまづいています。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Dim i As Long 'i は行数を For~Nextで変数にしてます
Dim Hbc As Long, Hbc2 As Long 'Hbc は最大11桁の変数
Dim Tsc As Long, Tsc2 As Long 'Tsc は最大5桁の変数
Dim Cd As Long, Cd2 As Long 'Cd は最大4桁の変数
Dim HTC As Long
     |
     |
   長い為、省略
     |
     |
Hbc2 = 100000000000 + Hbc '(1)
Tsc2 = 100000 + Tsc
Cd2 = 10000 + Cd
HTC = Right(Hbc2, 11, 11) & Right(Tsc2, 5, 5) & Right(Cd2, 4, 4)
Wks1.Cells(i, 1).Value = HTC
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Hbc、Tsc、Cd は、データベースから取得した数値が入りますが、
桁数がバラバラな為、頭に0を表示してそれぞれの最大桁数に揃えたいのです。
桁数を揃えた後、3つをつないで HTC とし、i 行目の1列目に表示しようとしています。
下記がつまづいて、解決できないでいるトコロです。

************問題点************
(1)の行の
Hbc2 = 100000000000 + Hbc という記述が
Hbc2 = 10000000000# + Hbc に置き換わってしまいます。
***************************

なにぶん、初心者で、単純な間違いかもしれませんが、
どうかご指導、宜しくお願いします。

A 回答 (4件)

常識的なFormat関数を使えば(使って結果の文字列&で結合する)どういう不都合がありますか。


コードだけ挙げて回答者に考えさせるのでなく、データ例に即して説明して質問すべきです。
    • good
    • 0

まず、


>Dim Hbc As Long, Hbc2 As Long 'Hbc は最大11桁の変数
11桁はlongの数値範囲を超えるので、倍精度浮動小数点型か文字列か通貨型でなければ無理。
100000000000#の#はvbeが「これは倍精度浮動小数点型」と判断したのでつけたもの。
>Dim HTC As Long
これはどの数値形式でも表現できないので文字列型に。
Cellにも数値形式での代入は無理で、文字列型にするしかない。
なので、
Dim Hbc As Double(またはCurrency)
Dim HTC As String
...
HTC = Format(Hbc, "100000000000") & Format(Tsc, "100000") & Format(Cd, "10000")
Wks1.Cells(i, 1).Value =HTC
または
Dim Hbc As Double(またはCurrency)
...
Wks1.Cells(i, 1).Value = Format(Hbc, "100000000000") & Format(Tsc, "100000") & Format(Cd, "10000")
では?
    • good
    • 0

すいません。

No1のやり方だと桁落ちしちゃうんですね。

文字列として処理するなら

htc = hbc2 & Format(tsc, "00000") & Format(cd2, "0000")

ではいかがでしょうか?
    • good
    • 0

HTC = Hbc2*10^9 + Tsc*10^4 + Cd2

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!