format関数で桁指定をしたが、指定通りにならない

このQ&Aのポイント
  • VB6.0のformat関数を使用して桁指定をした際、指定通りにならない場合があります。16進数を4桁で表示したい場合、一部のケースで指定した桁数とは異なる表示がされることがあります。また、16進数を10進数に変換してから再び16進数に変換する必要があり、2度手間になってしまいます。
  • 問題点は次の2つです。まず、16進数を一度10進数に変換してから再び16進数に変換する方法がありますが、一度の変換で4桁の16進数を表示させる方法を知りたいです。また、format関数で桁指定をしているにも関わらず、他の桁が表示されることがあります。この問題の解決方法を教えてください。
  • 質問の内容は、VB6.0のformat関数を使用して16進数を4桁で表示する方法に関するものです。一部のケースでは、指定した桁数と異なる表示がされることがあります。また、16進数を10進数に変換してから再び16進数に変換する必要があり、二度手間になってしまいます。問題点は、一度の変換で4桁の16進数を表示する方法と、format関数での桁指定の問題の解決方法です。
回答を見る
  • ベストアンサー

format関数で桁指定をしたが、指定通りにならない

VB6.0 windowsXP 掲題の件ですが、16進数を4桁で表示したいのですが、 たまに指定通りにならないので困っています。 Dim A As Variant A = Format(Hex(&H10D),"0000") 上記のコードを使ってAを表示させると、 010Dになるはずなのですが、10Dになってしまいます。 また、 Dim A As Variant A = Format(Hex(&H3200),"0000") で、表示させると320000となってしまうケースもありました。 また、上記で16進数→10進数→16進数と2度手間になってしまっています。 変数に代入するときに16進数表記だとエラーが出てしまいます。 困っている点は、 (1)上記で16進数→10進数→16進数と2度手間になってしまっているので、一回で表記させる方法を教えて頂きたい。 (2)format関数で桁数を指定しているのに、それ以外の桁が表示されることはあるのか?直す方法は? 以上の2点です。よろしくお願いいたします。

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

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

HEX関数の結果は文字列ですから、 right("0000" & HEX(&H10D),4) のようにされるといいと思います。

yoshi004
質問者

お礼

ありがとうございます。 うまくいきました。

関連するQ&A

  • EXCELでの16進数取り出し、上位桁と下位桁取り

    恐れ入ります。詳しい方教えてください。 各セルに2000までの数値があるデータがあり、このデータを16進数表記で、上位2桁と下位2桁に分けたいと考えています。 例) 870  → &h03, &h66 (870は10進数で366が16進数、これを&hを付けて03と66に分けたい) 1926 → &h07, &h86  ="0x"&DEC2HEX(C4, 4)を使って16進数4桁にすることまでは調べたのですが、上位2桁、下位2桁に分けられず悩んでいます。

  • Hex関数

    こんにちは VBでちょっとしたことなんですが、自前の関数を作成するかどうかで悩んでいます。 nバイトの配列データ(dim xx() as Byte と宣言されている)を1バイトあたり2桁で表示したいのですが、Hex関数(あるいはHex$関数)では、0x00 の場合や0~9の場合、"0"や1桁になってしまうんですね。 もし組み込み関数で1バイトを2桁16進数表示できる変換関数があれば、自前のものより高速だし楽だと思い、迷ってます。 「そんなものはないので自分で作れ」とか「こんなのあるよ」とか教えてください。お願いします。

  • VBA Hex関数

    Hex関数を使用して、16進から10進の処理をしようとしてますが 下記※のところで「型が一致しません」と出てしまいます。 色々変数の型を変えても、2つの※のどちらかで出てしまいます。 Dim r As Long Dim H2D As Long Dim CheckSum_Cal As Long For r = 1 To 10  H2D = Hex(Cells(5, r)) ※ CheckSum_Cal = CheckSum_Cal + H2D ※ Next r Cells(5, r)を別の変数に入れても同じ結果になります。 どなたかお詳しい方、ご教示お願いいたします。

  • VBAで4桁の16進数から16桁の2進数変換

    VBAで4桁の16進数(FFFFとか)を2進数(1111 1111 1111 1111とか)に変換して変換した2進数を1桁づつセルに表示させるには、どうしたらいいでしょうか?ワークシート上だと8桁までしか対応してないようで、左右8桁づつわけてHEX2BINを使ってとりあえず変換する事は、できましたがVBAでマクロを組んで行いたいです。例えばA1に16進数を入れA2~P2に2進数を1桁づつ表示させたいです。よろしくお願いします。

  • EXELでの指定桁の数字を返したい関数式

    簡単な関数式だと思うのですが・・・すみません。 A1~Y1の合計数の1桁目(1の位)数字をZ1に返したい(表示したい)のですが・・・・・・ すっかり、忘れてしまいました。 確か、範囲を指定して、指定の欄に1の位なら「1」、少数第1位なら「-1」だった気がするんですが・・・・ 肝心の関数式がわからなくって、 困っています。宜しくお願いいたします。

  • 文字型変数を使って2進数表示すると、最上位ビットに1を立てると値に-記号が入ってしまいます

    VB6.0 WindowsXP 掲題の件ですが以下のコードを使って16進数を2進数表示にしていますが、最上位ビットに1を立てると値がおかしくなってしまいます。 Private Sub Form_Load() Dim dat(5) As Variant Dim i As Variant dat(0) = Right("0000000000000000" & Hex2Bin(Hex(&HFFFF)), 16) dat(1) = Right("0000000000000000" & Hex2Bin(Hex(&HFFFE)), 16) dat(2) = Right("0000000000000000" & Hex2Bin(Hex(&HFF00)), 16) dat(3) = Right("0000000000000000" & Hex2Bin(Hex(&HF000)), 16) dat(4) = Right("0000000000000000" & Hex2Bin(Hex(&HF0F0)), 16) dat(5) = Right("0000000000000000" & Hex2Bin(Hex(&H7FFF)), 16) For i = 0 To 5 Label1.Caption = Label1.Caption & dat(i) & vbCrLf Next Label2.Caption = "FFFF" & vbCrLf & "FFF0" & vbCrLf & "FF00" & vbCrLf & "F000" & vbCrLf & "F0F0" End Sub Public Function Hex2Bin(Hex) Dim Dec Dec = CInt("&H" + Hex) Hex2Bin = Dec2Bin(Dec) End Function Public Function Bin2Hex(Bin) Dim Dec Dec = Bin2Dec(Bin) Bin2Hex = Hex(Dec) End Function Public Function Dec2Bin(ByVal Dec) Do Dec2Bin = CStr(Dec Mod 2) & Dec2Bin Dec = Dec \ 2 Loop Until Dec = 0 End Function Public Function Bin2Dec(Bin) Dim i As Integer For i = 1 To Len(Bin) Bin2Dec = Bin2Dec * 2 + CInt(Mid(Bin, i, 1)) Next End Function なぜこうなってしまうのか、最上位に1を入れても1000000000000 のように表示させるにはどうしたらよいか教えていただきたいです。 よろしくお願いします。

  • Format 関数のバグ?

    今、OS:WindowsXP Pro SP2 VB:6.0 SP6 の環境でアプリケーションを作成しています。 上記の環境で、Format関数に関して質問があります。 今、2桁の文字列のコードをゼロ埋め(0 埋め)にして表示させたいと考えております。そこで、以下の関数を利用いたしました。 Format("19", "00") Format("1A", "00") Format("1B", "00") を呼び出し、"19","1A","1B"と返答結果を期待しているのですが、 実際に実行すると、"19","00","1B"と返答されてしまいます。 なぜ、"1A"だけ、"00"と返答されるのでしょうか。 仕様でしょうか?

  • FORMAT関数で値が変わる

    こんにちは、 Win98でExcel2000のVBAを使用してマクロを組んでいるのですが、FORMAT関数を使っている部分で予想外の結果がでています。 以下、プログラムです。 Private Sub Test() Dim AAA as String AAA = "6P" AAA = FORMAT(AAA,"000") MsgBox AAA End Sub MsgBoxの表示が"06P"になるはずだと思っていたのですが、 なぜが"001"になってしまいます。 他の質問などを見てみると"E"や"D"などでも表示が変わるというものを見ました。"P"も同じようなものなのでしょうか、また"06P"と表示させるにはどうしたらよいでしょうか? どなたかご存知の方がいらっしゃったっらご回答お願い致します。

  • array関数に指定する引数が可変個の場合どうしたらよいでしょうか?

    array関数に指定する引数が可変個の場合どうしたらよいでしょうか? arrValue = Array("a","b","c") 上記のように、array関数を使ってvariant型の変数に格納したいのですが、 arrayに指定する個数が可変個の場合、どうやったらよいのでしょうか? arrayに指定する値は、他のプログラムによって 配列型変数"aaa"に格納済みです。 aaaに格納される配列数は可変個のため、 dim aaa() as string で定義して、取得できた数によって Redim で再定義しています。 aaaの配列数に応じて、if文などで、 配列数が1個だったら、arrValue = Array(aaa(0)) 配列数が2個だったら、arrValue = Array(aaa(0),aaa(1)) とすればできないことはないのですが、何個までを想定すればよいかも わからないため、困っています。 何かよい方法はないでしょうか?

  • EXCEL VBA 指定した数字ごとに表示

    ・1から3までの数字をいれた場合に、9:00から11:00と表示する場合として以下のソースを書きます。(以前にこちらで教えていただきました) ・a = array()の部分について、直接書くのではなく、セルを参照することはできますでしょうか? a = array("cell(1,1)", "cell(1,2)", "cell(1,3)")みたいなイメージです。 よろしくお願い致します。 option base 1 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  dim a as variant  a = array("9:0", "10:0", "11:0") ’1から3  on error resume next  for each h in application.intersect(target, range("D:D"))   if cells(h.row, "F") <> "○" then   if 1=< h.value and h.value <= 3 then  ’1から3   if time >= timevalue(a(h.value)) then    cells(h.row, "F") = a(h.value)   end if   end if   end if  next end sub