• ベストアンサー

エクセルの16進と2進の扱いに関して

お世話になります エクセルの16進と2進の扱いに関して教えてください DEC2HEX,DEC2BIN,HEX2BIN,BIN2HEX等を使って、 相互に数値を変換し表記する場合 (1) 16進の扱い時、0xを付ける、もしくは認識させる方法 (2) 16進の扱い時、2桁ずつ区切り-を間に入れた表記にする方法 (3) 2進の扱い時、4桁ずつ区切り空白を間に入れた表記にする方法 (4) 2進で扱える値をもっと大きくしたい(現在は255(ff)との2進変換まで) (とりあえず32Bitまででもできればたすかります) このような時、セルの書式設定等はどのように設定すればよろしいのでしょうか、 ご存知の方、ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

usami33様 こんばんは。Wendy02です。 #4 のお礼の内容を読ましていただいて、 まず、とっかかりを作らないといけませんね。とりあえず、目がついたところからやってみました。 これは作ったばかりなので、それを見ていただくことにします。 >(3) 2進の扱い時、4桁ずつ区切り空白を間に入れた表記にする方法 10進から2進のコード 一応、暫定的な扱いにしてください。 今後、これらの関数には、小文字のiかt を入れるようにして、オリジナルとは区分けします。また、引数は、10進の数字は、Figure で、それ以外は、Argument にするつもりです。 なお、これを元にしたアドインを作成した場合は、同じ関数名で一般モジュールへの登録の併用はしないようにしてください。 Function DECi2BIN(Figure As Long) As String   Dim Bit As Currency   Dim buf As String   Dim sn As Integer   Const A As String = "1"   Const Z As String = "0"   Dim i As Integer   Dim j As Integer   Dim bufN As String   '   Dim bufO As String '出力用   Dim k As Integer   sn = Sgn(Figure)     Do Until (Abs(Figure) < CDec(2 ^ Bit))    If (Abs(Figure) And 2 ^ Bit) <> 0 Then      buf = A & buf      Else      buf = Z & buf    End If    Bit = Bit + 1   Loop    buf = Format$(CDec(buf), String(16, "0"))   If sn < 0 Then     bufN = Format$(CDec(buf), String(n, "0"))    For i = 1 To Len(bufN)     If Mid$(bufN, i, 1) = A Then     Mid$(bufN, i, 1) = Z     Else     Mid$(bufN, i, 1) = A     End If    Next i    buf = bufN    For j = Len(bufN) To 1 Step -1      If Mid$(bufN, j, 1) = Z Then       Mid$(buf, j, 1) = A       Else       Mid$(buf, j, 1) = Z      End If    If Mid$(bufN, j, 1) = Z Then Exit For    Next   End If   For k = 1 To Len(buf) Step 4   bufO = bufO & " " & Mid$(buf, k, 4)   Next k   DECi2BIN = Mid$(bufO, 2) End Function >(4) 2進で扱える値をもっと大きくしたい(現在は255(ff)との2進変換まで) >(とりあえず32Bitまででもできればたすかります) 2進から16進 BINi2HEX (Excel専用版) (これは、暫定版ですから、非Excel版を考えなくてはなりません。) Function BINi2HEX(Argument As String) As String   Dim buf As String   Dim bufO As String   Dim i As Integer   Dim j As Integer   Argument = Replace(Argument, Space(1), "")   If Len(Argument) < 16 Then    Argument = Format$(CDec(Argument), String(16, "0"))   End If   For i = 1 To 16 Step 4    buf = buf & Evaluate("BIN2HEX(" & Mid$(Argument, i, 4) & ")")   Next i   For j = 1 To 4 Step 2    bufO = bufO & "-" & Mid$(buf, j, 2)   Next j   BINi2HEX = "0x" & Mid$(bufO, 2) End Function

usami33
質問者

お礼

Wendy02様 なんどもなんどもありがとうございました。 ここまでしていただければ、後は自分で拡張してやってみます。 本当にありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

usami33様 Wendy02です。 今、もう一度、昔買った情報処理入門の本を読み直している最中です。ちょっと本が古すぎて、32Bit 対応ではありませんが、私は、偉そうなことを言ったわりには、古い知識しかありませんでした。 昨日、「桁が足りない」という言葉で、もう一度、インターネット検索をして、今は、VBも、VB.Netの32Bit対応になっているのに、Excel,VB6 は16Bit で、そういう不都合な面をご指摘なさっているのかなって思い始めています。 本日、やっと、Dec2Bin だけを見直しました。Excelは、ほとんどこなしているつもりでも、そちらの方面は、ふだんやっていないので、理解するまで時間が掛かります。 ふつうは、16進などは、上位桁と下位桁を分けて処理するはずなので、あまり問題にはならないはずなのですが、そういう私も、もう長い間、Excel以外で、こんな勉強をしたことがありません。 >(参照側は自動認識で、出力側は個別に用意)のマトリックス分のマクロなので、かなりの数になりますよね。 つまり、一括対応させることですか? もし、時間的余裕があれは、私もじっくりと考えていきたいと思っています。 よろしかったら、お返事ください。なお、補足側に書いた旨を、お礼側に、少しでも書いていたたげたら、直接メールされますので、フィードバックしやすいです。

usami33
質問者

お礼

Wendy02様 わざわざ調べていただけるなんて恐縮です。 今、構想として考えているのは、個別に多数用意するものと、参照セルを二つ儲け、一つには元の値、もう一つには変換の形式指定で対応の二種類です。 ま、最初のうちは、個別でコマンドを増やしていって、最終的に統合する方針ですね。 ※ なんでこんな面倒なのが必要かと言うと、各ICメーカー毎にData Sheetが異なるフォーマットで記載されているので、自分の作成したものの資料を残したり、同じソフトでもマイコンの相違によるレジスタの設定値の違いなどを、残し後から続く人に広く使用してもらいたいためなんです。 また、作成した資料も、回路屋、ソフト屋と限定せずに活用してもらうには、それらの方々が容易に変更できるものと考えております ※ この先5年10年と資料は追加していくので、今は、そのタイミングに合わせて、必要な物を自作していこうと考えております。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 #1のWendy02です。 >類似の事で悩んでいる方が多いようなので、ニーズはあるから、マクロ等を公開されている方がいるのではと思いまして。 あまりにメジャーになりすぎましたね。いずれにしても、インターネット検索してみてください。 もともと、16進や2進を使う人は、ある程度プログラミングの心得がある人なので、コードを出すまでには至らないのです。そういう私も、少し、VBAに慣れた段階で、自作で、Dec2Hex を作っていますが、VBA習いたてでも、掲示板で聞くほどのレベルではありませんでしたね。単に、VBA関数を再利用するだけですから。 Dec2Bin は、再利用は出来ないようですが、これも、ある意味で、VBAではなくて、一般プログラマ(私は、本業ではありませんが)の最低常識で、2進計算は、手書きで商と余りを出す計算を、単に、プログラムに移植するだけですから、そんなに、難しいものばありません。

usami33
質問者

補足

Wendy02様、回答アリガトウございます。 検索はしたのですが、見つけたのは全て単純に変換しているだけで、桁数も足らなければ、参照側の制約もあり、今回私が求めている多用途ではなかったんです。 確かに自作もそんなに難しくはないのでしょうが、全てを作るにはちょっとね。 質問にも記載させていただいた条件の有無を含む(参照側は自動認識で、出力側は個別に用意)のマトリックス分のマクロなので、かなりの数になりますよね。 せめて、1/3でもずばりのが見つかれば助かるのですが。 ※質問に記載した以外にも表記に関して多数の改良を加える予定なので、そこまで考慮すると本業の合間ではすまなくなりそうです。 もっとも、全てをすぐに必要なわけではないので、ゆっくり時間かけてつくるかな。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

私も自作するのが良いと思います。 参考URLなんかが参考になるかも。 0xとか表記については、 1パスそういう変換をする手続きをかませばいいと思います。

参考URL:
http://okwave.jp/kotaeru.php3?qid=1036425
usami33
質問者

補足

#1さん#2さん、アドバイスありがとうございます

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 前回、同じような質問がありましたが、VBAのユーザー定義関数でお作りなったらいかがでしょうか?もともと、これらは、ひじょうに良く知られた関数です。 検索すれば、VB系でそれなりものはいくつか見つかるかと思いますので、その中で、VB6 が作動するものなら、そのままExcelに入れられると思いますから、後、空白を入れるとかというのは、Mid関数などで行えばよいと思います。 頭から切り分けるなら、2桁ずつなら、 For i = 1 To Len(出力値) Step 2  buf = buf & " " & Mid$(出力値, i, 2) Next buf = Mid$(buf, 2) 0x で認識させるとかいうのは、もともと、同じプログラム中で、他と数値と区別するためのものですから、それ自体を認識させるというのは、関数を使う限りは、意味はないと思います。

usami33
質問者

補足

やはり自作ですか 類似の事で悩んでいる方が多いようなので、ニーズはあるから、マクロ等を公開されている方がいるのではと思いまして。 また、表現したい表記が多いので、全てを自作するのではなく、できればある程度ベースになる物を見つけて、こちらの用途毎にカスタマイズできればと・・・

関連するQ&A