
Excel2003で、16進どうしの乗算をしたいです。もちろん関数は知っています(Sheet,VBA共に)。
しかしデータが掛ける数掛けられる数どちらも64bitあるので計算が出来ません。
そこでVBAを使ってコードを書いて計算しました。
でも私はその結果を64bitにしたいので、私の書いたコードでは10進数になってしまい、うまく行きません。
64bitにするというのは、Windowsについている電卓のように切り捨て処理をしたいからです。
頭を使って考えましたが、どうしても結局は10進数になってしまいます。Excelだからでしょうか。
ちなみに、64bitの数のうち、1つは固定された数です。
文章が汚くて解りづらいかも知れませんが、どうかお願いします。
*16進数の乗算をして2進数または16進数で結果を出す方法か、10進数でxxbitに揃える方法でお願いします。(それ以外でもやりたいことが出来れば気にしません。)
No.2ベストアンサー
- 回答日時:
cyo_k08さん
はじめまして。
> でも私はその結果を64bitにしたいので…
> 私の書いたコードでは10進数になってしまい…
正直、何をしたいのかが分からないですが、勝手に回答させていただきます。
64ビットでも、浮動小数点、固定小数点、整数もあり、また整数でもサインあり、
サインなしがあります。
多分、整数で64ビットの計算をしたいとのことだと思いますがEXCEL(VBA)での問題点や
可能性を整理する必要があります。
【64ビットの整数の範囲】
サイン(+-)あり -9223372036854775808~+9223372036854775807
サイン(+-)なし 0 ~ 18446744073709551615
【数値で計算できるデータ型の選択】
整数型 (Integer) 2 バイト
長整数型 (Long) 4 バイト
単精度浮動小数点数型 (Single) 4 バイト
倍精度浮動小数点数型 (Double) 8 バイト
通貨型 (Currency) 8 バイト
10 進型 (Decimal) 14 バイト
※64ビット=8バイトなので、8バイト以上が必要です、浮動小数点、固定小数点(通貨型)
ではだめなので、結果【10 進型】が64ビット計算に使えると思われます。
※Decimalのデータ型を宣言できませんのでVariant型にし、計算する時Decimalの型変換する
必要があります。
【16進数の表現】
VBAには16進数数値を記述することは可能です。
&HFFFFFFFF
問題は長整数(Longの32ビット)しか指定できないので64ビットなら自分で16進数変換が必要になります。
以上を踏まえて下記の通りプログラムを作成しました。
Sub テストメイン()
Debug.Print HEXtoDEC("7FFFFFFFFFFFFFFF")
Debug.Print HEXtoDEC("8000000000000000")
Debug.Print HEXtoDEC("FFFFFFFFFFFFFFFF")
Debug.Print DECtoHEX(CDec("-1") * CDec(164))
Debug.Print DECtoHEX(HEXtoDEC("FFFFFFFFFFFFFFFF") * HEXtoDEC("A4"))
End Sub
Function HEXtoDEC(HEX As String) As Variant
Dim I As Long
Dim DEC As Variant
If Len(HEX) < 16 Or Val("&H" & Left(HEX, 1)) < 8 Then
For I = 1 To Len(HEX)
DEC = DEC * CDec(16) + CDec(Val("&H" & Mid(HEX, I, 1)))
Next I
HEXtoDEC = DEC
Else
For I = 1 To Len(HEX)
DEC = DEC * CDec(16) + (CDec(15) - CDec(Val("&H" & Mid(HEX, I, 1))))
Next I
HEXtoDEC = -DEC - 1
End If
End Function
Function DECtoHEX(ByVal DEC As Variant) As String
Dim I As Long
Dim sHEX As String
If DEC >= 0 Then
For I = 1 To 16
sHEX = HEX$(DEC - Int(DEC / CDec(16)) * CDec(16)) & sHEX
DEC = Int(DEC / CDec(16))
If DEC = 0 Then Exit For
Next I
DECtoHEX = sHEX
Else
DEC = Abs(DEC + CDec(1))
For I = 1 To 16
sHEX = HEX$(CDec(15) - (DEC - Int(DEC / CDec(16)) * CDec(16))) & sHEX
DEC = Int(DEC / CDec(16))
Next I
DECtoHEX = sHEX
End If
End Function
お試しください。
イミディエイトで確認した所、17桁以降が切り捨てられ16桁になっていました。電卓の結果と一致です。本当にありがとうございました。
10進数を16進数に変換するのをどうしたら良いかよく解らなかったのですが(どのように実装するか、です。変換方法自体は知っていました。)、このコードから学ぶ事が出来ます。
No.1
- 回答日時:
どういう意味で64bitという言葉を使っているんでしょうか?
符号なしの2進数なら64bit=64桁ですが、16進数なら64bit=16桁になります。
16桁の16進数にしたいということなんでしょうか?
>64bitにするというのは、Windowsについている電卓のように切り捨て処理をしたいからです。
これはどいう意味?
切り捨て処理とは小数点以下切り捨てのこと?
それなら16進とか64bitとかは関係ないと思うんですが。
10進数を16進数にするにはHex関数を使えばできます。
それを16桁にしたいなら、頭に必要な分だけ0を付ければいいでしょう。
ただし、A~Fが入っていない16進数をExcelのセルに表示すると10進数とみなされるので、
セルの表示形式を文字列にするか、先頭に引用符(')を付ける必要があります。
この回答への補足
済みません。かなり説明が欠けていました。calc.exeは、16進モードだと16桁まで表示されます。
例えば0xFFFF FFFF FFFF FFFFと入力して、1以上の数を加算すると17桁目以降を切り捨てて(小数点の意ではありません)16桁まで表示します。それの処理をしたいと思っています。(0xFFFFFFFFFFFFFFFF+1=10000000000000000で、表示できない桁を取って0になります)
ちなみに乗算で小数は絶対に出ることが無いです。(2つの数がどちらも非負整数)
説明不足本当に済みませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Visual Studio Code 関数の使い方について 3 2023/05/31 13:15
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- Excel(エクセル) エクセル・スプレッドシートで、一定数を超えたらゼロから再累計する方法 8 2022/05/28 03:52
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- 計算機科学 インド式かんたん計算法について 2 2022/06/02 04:27
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) 【詳しい方教えて下さい】EXCEL条件に一致する値の複数抽出 9 2022/04/29 10:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ICカードデータサイズ比較
-
5000KBytes/sをbitに変換するには
-
おねがいします。
-
Stirlingについて
-
GB.KB.MBとは?
-
何Mバイトになりますか?
-
転送スピード
-
JIS、SHIFT-JIS、EUCはなぜでき...
-
メガバイト/秒、バイト/秒、キ...
-
バイト と ビット
-
バイトって
-
2バイト文字を一括削除するマクロ
-
GB と Gbの違いの意味
-
K KB MB について詳し...
-
1Mバイトって何バイト?
-
動画容量10Gを50Mpdsでアップロ...
-
単位の違いを教えてください。
-
byteの語源
-
新聞1ページは何バイトですか?...
-
oracle11gで、PL/SQLにてAとい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELでの16進数取り出し、上...
-
携帯電話の略語であるMBって英...
-
文字の容量(サイズ)についての...
-
実行計画の「COST」と「BYTE」...
-
アルファベット30文字は何バイ...
-
KBのMB違いって
-
CSV データのバイト数を調べる...
-
GB と Gbの違いの意味
-
1Mバイトって何バイト?
-
KBとMB
-
Excel_VBAで改行コードの無いフ...
-
Pingについてご教授ください。
-
おねがいします。
-
K KB MB について詳し...
-
32bit = 4GB(バイト)?
-
Oracle AL32UTF8でのバイトサイ...
-
2バイト文字を一括削除するマクロ
-
16進数どうしの乗算
-
5000KBytes/sをbitに変換するには
-
byte、KB、MB の単位の変換につ...
おすすめ情報