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

お世話になります
エクセルの16進と2進の扱いに関して教えてください

DEC2HEX,DEC2BIN,HEX2BIN,BIN2HEX等を使って、
相互に数値を変換し表記する場合
(1) 16進の扱い時、0xを付ける、もしくは認識させる方法
(2) 16進の扱い時、2桁ずつ区切り-を間に入れた表記にする方法
(3) 2進の扱い時、4桁ずつ区切り空白を間に入れた表記にする方法
(4) 2進で扱える値をもっと大きくしたい(現在は255(ff)との2進変換まで)
(とりあえず32Bitまででもできればたすかります)

このような時、セルの書式設定等はどのように設定すればよろしいのでしょうか、
ご存知の方、ご教授お願いいたします。

A 回答 (5件)

こんばんは。



前回、同じような質問がありましたが、VBAのユーザー定義関数でお作りなったらいかがでしょうか?もともと、これらは、ひじょうに良く知られた関数です。

検索すれば、VB系でそれなりものはいくつか見つかるかと思いますので、その中で、VB6 が作動するものなら、そのままExcelに入れられると思いますから、後、空白を入れるとかというのは、Mid関数などで行えばよいと思います。

頭から切り分けるなら、2桁ずつなら、

For i = 1 To Len(出力値) Step 2
 buf = buf & " " & Mid$(出力値, i, 2)
Next
buf = Mid$(buf, 2)

0x で認識させるとかいうのは、もともと、同じプログラム中で、他と数値と区別するためのものですから、それ自体を認識させるというのは、関数を使う限りは、意味はないと思います。

この回答への補足

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

補足日時:2006/02/23 20:01
    • good
    • 0

私も自作するのが良いと思います。


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

参考URL:http://okwave.jp/kotaeru.php3?qid=1036425

この回答への補足

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

補足日時:2006/02/23 20:05
    • good
    • 0

こんばんは。


#1のWendy02です。

>類似の事で悩んでいる方が多いようなので、ニーズはあるから、マクロ等を公開されている方がいるのではと思いまして。

あまりにメジャーになりすぎましたね。いずれにしても、インターネット検索してみてください。

もともと、16進や2進を使う人は、ある程度プログラミングの心得がある人なので、コードを出すまでには至らないのです。そういう私も、少し、VBAに慣れた段階で、自作で、Dec2Hex を作っていますが、VBA習いたてでも、掲示板で聞くほどのレベルではありませんでしたね。単に、VBA関数を再利用するだけですから。

Dec2Bin は、再利用は出来ないようですが、これも、ある意味で、VBAではなくて、一般プログラマ(私は、本業ではありませんが)の最低常識で、2進計算は、手書きで商と余りを出す計算を、単に、プログラムに移植するだけですから、そんなに、難しいものばありません。

この回答への補足

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

補足日時:2006/02/23 21:48
    • good
    • 0

usami33様 Wendy02です。



今、もう一度、昔買った情報処理入門の本を読み直している最中です。ちょっと本が古すぎて、32Bit 対応ではありませんが、私は、偉そうなことを言ったわりには、古い知識しかありませんでした。

昨日、「桁が足りない」という言葉で、もう一度、インターネット検索をして、今は、VBも、VB.Netの32Bit対応になっているのに、Excel,VB6 は16Bit で、そういう不都合な面をご指摘なさっているのかなって思い始めています。

本日、やっと、Dec2Bin だけを見直しました。Excelは、ほとんどこなしているつもりでも、そちらの方面は、ふだんやっていないので、理解するまで時間が掛かります。

ふつうは、16進などは、上位桁と下位桁を分けて処理するはずなので、あまり問題にはならないはずなのですが、そういう私も、もう長い間、Excel以外で、こんな勉強をしたことがありません。

>(参照側は自動認識で、出力側は個別に用意)のマトリックス分のマクロなので、かなりの数になりますよね。
つまり、一括対応させることですか?

もし、時間的余裕があれは、私もじっくりと考えていきたいと思っています。

よろしかったら、お返事ください。なお、補足側に書いた旨を、お礼側に、少しでも書いていたたげたら、直接メールされますので、フィードバックしやすいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/24 13:35

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/24 21:50

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