
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- 統計学 機械学習(最適化問題)のプログラムで、以下の2つの関数がどんな関数なのかご存知の方はおりますか? d 5 2022/06/23 00:35
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) セルの値からファイルを複数作りたい2 3 2022/10/07 15:54
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- C言語・C++・C# データの外挿について 3 2023/06/13 20:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で3次元配列の課題をして...
-
配列プロパティをREDIMする方法...
-
パソコンキーボードで時分秒を...
-
Sourcearrayの読み方を教えてく...
-
変数を動的に作るには?
-
IF関数でEmpty値を設定する方法。
-
VBA 配列数式的に一括してR...
-
動的配列が存在(要素が有る)か...
-
配列の宣言について
-
配列通しのOR演算
-
遅延バインディングを使用でき...
-
VBAで配列の計算
-
JSPでHTMLの表示が優先されてし...
-
初心者です。教えてください!
-
オブジェクトのフィールドのコ...
-
参照・値渡しについて
-
continue文以外で・・・
-
日本語が文字コードによっては...
-
DOMでXMLからデータを抽出する...
-
【AWT】別ウィンドウのLabel設...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
パソコンキーボードで時分秒を...
-
変数を動的に作るには?
-
VBでbyte配列型のインスタンス...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
ラジオボタンのチェックをEnter...
-
C言語 重複しない4ケタの乱数...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
Visual C++ でコントロールを...
-
C++、クラスメンバの構造体配列...
-
遅延バインディングを使用でき...
-
int型配列の一括初期化
おすすめ情報
VBAだと符号無し整数が使えないので
これはできないのではないでしょうか?
すいません、間違いました
一つの要素が2バイトで4つの要素からなる配列です。
9223372036854775807までは格納できるのですが
これを超えた場合にはVBAでどのように扱えば良いかを教えていただきたいのですが
一度double型に変換してから計算するしかないでしょうか?
http://homepage1.nifty.com/rucio/main/kiso/DataT …
上記ページの値をコピペしたのですが
このページが間違っていました。
-2147483648 ~ 2147483647
が正解です。とりあえず問題は自己解決しました。