- ベストアンサー
Excel VBAでByte型に「0」を付ける方法
- Excel VBAを使用してセルの値をByte型の16進数に変換する際に、変換後の値の前に「0」が付かない問題に困っています。
- バイナリエディタで表示した時に「111」ではなく「010101」と表示させたいのですが、他の方法も含めてご教示いただけませんか。
- Excel VBAにおいて、セルの値をByte型に変換し、変換後の値の前に「0」を付ける方法について知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 やや混乱があるようなので、お邪魔します。 なんか、思い違いもあるようで、 それでいて問題を局面だけで考えようとして、 局面だけを説明するのはうまくいかないことが 多いですね。解決できるものも出来ないのでは? ご自分でなさりたい事を普通の言葉で表現すること 今やっていることを今後に生かす意味でも 大切なんじゃないでしょうか。 Byte型なら16進2桁 01 Integer型なら4桁 0001 Long型なら8桁 0000 0001 セルにある16進数は何桁あって、 何型で出力することを【求められている】のか、 がまず先決、だと思いますけれど。 セルの桁数で決まることではなくて、 最終的に何を求められているか、確認できないと。 さておき、 バイナリファイルとして出力すれことさえ出来れば、 問題クリア、ということでしたら、 原形を残すとしてこんな感じで如何でしょうか? ' ' // 例えばA列にあるByte型16進数を連続で出力するサンプル。 ' ' // 自Bookのあるフォルダーにバイナリファイルとして出力します。 Sub Re9335202() Dim sFile As String Dim i As Long Dim nFree As Integer Dim bb As Byte ' As Integer ' As Long sFile = ThisWorkbook.Path & "\" & "bimtest.dat" nFree = FreeFile Open sFile For Binary As #nFree For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row bb = Val("&H" & Cells(i, 1)) Put #nFree, , bb Next Close #nFree End Sub ' ' // でもこれ、セルが3桁以上であれば、Byte型ではないので、 当然エラーになります。 最大の桁数を確認して、適宜、数値変数の型を変えれば、 お望み通りには出来ると思いますけど。 また、 バイナリファイルで出力する以外に、 VBA上で内容を確認する方法は多々ありますが、 今はとりあえず、バイナリで出力してから、 そのファイルをVBAでバイナリで読み込んで 確認するようにして、入出力に慣れるように 一旦落ち着いてみては如何でしょう。 一応、リンク先のサンプルにも目を通してみて下さいね。 IntegerやLongで上位2桁下位2桁が入れ替わることとかも、 確認した方がよいでしょうから。 以上です。
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
Private Sub CommandButton1_Click() Dim a As Byte Dim b As String 'セル内容を16進2桁と想定して、その値を '「10進の数値」にして、aに格納 a = Val("&H" & Cells(1, 1)) 'aの内容(数値)をHexで16進文字列に変換し '先頭に"0"を付加して、右から2桁をbに格納 b = Right("0" & Hex(a), 2) MsgBox "10進数=""" & a & """" & vbCrLf & "16進数=""" & b & """" End Sub
お礼
解決できました。 ありがとうございました。
補足
ご回答ありがとうございます。 この場合、bもByte型にした上で"01"としたいのですが。 セルに入力した値(16進数)を16進数で記述したバイナリファイル として出力したいのでByte型でと考えたんですが、型には こだわっておらずセルの16進数の値をバイナリファイルで 出力できれば方法は何でもかまいません。
お礼
解決できました。 ありがとうございました。
補足
ご回答ありがとうございます。 すみません、勘違いしておりまして Byte型で出力されたバイナリファイルや、ローカルウィンドウで 確認した値が"00"になっていなかったので、質問いたしましたが エディタで確認するとちゃんと変換されていました。 いただいたコードがまさにやりたかったことで、 入力したデータからコマンドを生成して、それをバイナリに 出力したいということになります。 ただ桁数が3桁以上になるので、MIDで2桁ずつ変換しながら という方法を取りました。