
VBAを使って
-9223372036854775808 ~ 9223372036854775807
の数値を要素数が4のバイト型の配列に変換したいと考えています。
まず思いついたのが
dim Length_buf(3) As Byte
dim Text_size1 as long
Length_buf(0) = Text_size1 \ 16777216
Len01 = Text_size1 - Length_buf(0) * 16777216
Length_buf(1) = Len01 \ 65536
Len02 = Len01 - Length_buf(1) * 65536
Length_buf(2) = Len02 \ 256
Length_buf(3) = Len02 - Length_buf(2) * CLng(256)
のようにして普通に10進数を分解する方法です。
しかしこの方法だと正の数の時にはうまくいくのですが
longの上限値を超えて負の数になった時にうまくいきません。
これはどうすれば良いでしょうか?
あともう一つがhex関数を使った方法で
Len_byte01 = Hex(Text_size1)
Len_byte02 = ""
For I = 1 To 8 - Len(Len_byte01)
Len_byte02 = Len_byte02 & "0"
Next I
Len_byte02 = Len_byte02 & Len_byte01
Length_buf(0) = "&H" & Mid(Len_byte02, 1, 2)
Length_buf(1) = "&H" & Mid(Len_byte02, 3, 2)
Length_buf(2) = "&H" & Mid(Len_byte02, 5, 2)
Length_buf(3) = "&H" & Mid(Len_byte02, 7, 2)
のようにすることで負の数であっても、うまくいきます。
しかし8桁の数値にするためにfor文を使っていますが
もっと簡単に8桁に変換することができないでしょうか?
もっと良い方法があれば教えてください。

No.6ベストアンサー
- 回答日時:
>9223372036854775807までは格納できるのですが
>これを超えた場合にはVBAでどのように扱えば良いかを教えていただきたいのですが
要は、9223372036854775807より大きな整数を扱う、四則演算をしたいということでしょうか?
その場合は、多倍長整数を扱うパッケージが必要になります。
参考1:
http://supermab.com/biginteger.html
上記のサイトは、動作環境として
NetFramework4.0 がインストールされている必要があります。
Excel2000以降がインストールされている必要があります。
とうことですが、その要件を満たしているなら利用可能かと思います。
参考2:
http://qiita.com/mmYYmmdd/items/23ad7ce279f2828a …
上記のサイトは、多倍長整数を扱うパッケージを独自に開発されたかたのサイトです。
以上、参考まで。

No.5
- 回答日時:
>一つの要素が2バイトで4つの要素からなる配列です。
これは、変換先のことですか?
>9223372036854775807 これを超えた場合とありますが、
2バイトで4つの要素(=8バイト)の上限は、9223372036854775807です。
これ以上の値を格納できません。格納するには、要素が5以上の配列にしないとだめです。
以下のことを明確にしませんか。
1.入力データ(変換前)の型、及び配列なら、その要素の数
2.出力データ(変換後)の型、及び配列なら、その要素の数
それが、判らないと始まりません。

No.4
- 回答日時:
#3です。
そもそも、元の数値である-9223372036854775808 ~ 9223372036854775807の数値は
何の型の変数に格納されているのでしょうか。
VBAには、上記の範囲の数値を格納できる型はありません。(文字列なら別ですが)
Long型では格納できませんし、Currency型でも格納できません。

No.3
- 回答日時:
9223372036854775807 は16進数で7FFFFFFFFFFFFFFFであり、8バイト必要です。
従って、そもそも、要素数が4のバイト型の配列に格納することは、出来ないと思いますが。
要素数が8のバイト型の配列であれば、格納可能です。
No.2
- 回答日時:
ごめんなさい、正の整数化ではないですね
(unsigned型があったとしても)
ただ、-1の時に0XFFFFFFFFがキチンと返るかと思うのですがどうでしょう?
ちょっと今手元にMacしかないので試せないのですが…
No.1
- 回答日時:
Dim text4Byte as long
text4Byte = Text_size1 AND 0xFFFFFFFF
として、4Byteの正の整数値に切り詰めて最初の計算したらどうでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで配列の途中から(X)M...
-
動的配列が存在(要素が有る)か...
-
VBAで配列の計算
-
変数を動的に作るには?
-
パソコンキーボードで時分秒を...
-
VB.net 引数で配列変数を渡す際...
-
IF関数でEmpty値を設定する方法。
-
遅延バインディングを使用でき...
-
【MFC】GetCount()とGetSize()...
-
配列にある重複要素を削除した...
-
配列の要素数を超えた参照のコ...
-
StrutsでJSPからListを受け取り...
-
JSPやサーブレットでSystem.out...
-
System.err. printlnとSystem.o...
-
eclipseに記述したjavaファイル...
-
System.out.printlnの出力先
-
javaで判別式のプログラミング...
-
JSPでImportエラーになります
-
EclipseでJava
-
プログラミングの問題です。大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
EXCEL VBA で、0から?1から?
-
パソコンキーボードで時分秒を...
-
C#の質問
-
変数を動的に作るには?
-
配列の要素数を超えた参照のコ...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
Visual C++ でコントロールを...
-
VBでbyte配列型のインスタンス...
-
For文と配列
-
複数のテキストボックスに同じ...
-
五目並べのプログラムを配列と...
-
格闘ゲームのコマンド判定について
-
フォームコントロールのチェック
-
遅延バインディングを使用でき...
おすすめ情報
VBAだと符号無し整数が使えないので
これはできないのではないでしょうか?
すいません、間違いました
一つの要素が2バイトで4つの要素からなる配列です。
9223372036854775807までは格納できるのですが
これを超えた場合にはVBAでどのように扱えば良いかを教えていただきたいのですが
一度double型に変換してから計算するしかないでしょうか?
http://homepage1.nifty.com/rucio/main/kiso/DataT …
上記ページの値をコピペしたのですが
このページが間違っていました。
-2147483648 ~ 2147483647
が正解です。とりあえず問題は自己解決しました。