• ベストアンサー
  • 困ってます

chr関数の戻り値について質問です。

chr関数を使用して、バイナリレベルで自由なデータを、ファイルに出力したいと思っていますが、一部のデータがうまくいきません。 たとえば以下のようなコードを実行して、バイナリエディタで中身を見てみると、0x81~0x9Fと0xE0~0xFCまでが全て、0x00に変換されて出力されています。 Dim i As Long Dim binHex As String Open fileName For Binary As #1 For i = 0 To 255   binHex = Chr(i)   Put #1, , binHex Next 0x81等をファイルに書き込む良い方法は無いでしょうか? 詳しい方、アドバイスをお願いいたします。

noname#34685
noname#34685

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数135
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.2

Dim i As Long Open Filename For Binary As #1 For i = 0 To 255  Put #1, , CByte(i) Next これでいいのでは?

共感・感謝の気持ちを伝えよう!

質問者からの補足

なんと! Put で直接数値を書き込めたんですね! Putの仕様が分かってませんでした。 有難う御座いました。 これでやりたいことが出来ると思います。

関連するQ&A

  • Chr関数であいうえお順に

    Chr関数であいうえお順に文字をエクセルに書き出そうとしたけど、 単純にはいかないのですかね? Sub test() Dim MyRow As Long Dim i As Long For MyRow = 1 To 51 Cells(MyRow, 1) = Chr(-32096 + i) i = i + 2 Next MyRow End Sub これを実行すると、濁点が入ったりするのですが、 綺麗に「あ~ん」まで取得する方法はありますか? 複雑なコードを作るしかないのですかね?

  • VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいの

    VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいのですが、 例えば、"A"が一文字のみのShift-JIS もしくはunicodeのテキストファイルを作るため、 (下記の確認はShift-jis で行っています。) Dim ByteData As Byte ByteData = AscW("A") Open "C:\A.txt" For Binary Access Write As #1 Put #1, 1, ByteData Close #1 としました。 できあがったファイルをバイナリエディタで確認すると、  41 となっています。 (Unicode は 41 00 2バイト文字でリトルエンディアンのため) この41は、"A" の文字コード(Shift-JIS)「65」の16進表記です。 この「41」という値を使ってバイナリモードでテキストファイルを作成したいのですが、 どのようにすればよいでしょうか? 上記 Put #1, 1, ByteData の部分を、 1.Put #1, 1, 41 としたところ、通常表示はできないファイルができあがったみたいです。 バイナリモードで 「29 00 20 20」でした。 文字コード00 に該当する文字がないためだと思います。 2.Put #1, 1, "41" としたところ、「41 」(バイナリモードで 「34 31 20 20」) (41の後ろは半角空白) で×でした。 3.Put #1, 1, CLng("&H" & 41) としたところ、通常表示はできないファイルができあがったみたいです。 バイナリモードで 「41 00 00 00」でした。 4.ByteData = CLng("&H" & 41) Put #1, 1, ByteData これでやっとできました。 この他にも方法があるのか?と思い、質問させていただきました。 ご指導よろしくお願いいたします。

  • 配列の内容をファイルの書出す

    2次元配列のデーターを書出す方法で困っています。 プログラムを以下のようにして書出したいデーターは x(1,0 To 5) の内容だけ書出したいのですがPut #1,, をどの用に書けばよろしいでしょうか。 Dim x(5,5) as Byte OPEN "C:\AAA" for Binary as #1 Put #1,,xx おねがいします。

その他の回答 (1)

  • 回答No.1

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k06.htm リファレンス見れば、キャラクターコードの変換関数で、制御コード出てくる方がおかしいと思いますが。 バイナリに Chr()からのリターン値って意味が判らんですけど・・・ これは、テキスト形式にやる事ですよね?

共感・感謝の気持ちを伝えよう!

質問者からの補足

回答有難う御座います。 制御コードは出てこないんでしょうか? 0x00~0x1Fとかは出てるんですが・・・出るのと出ないのがある仕様なんでしょうか? 別にchr関数に拘ってる訳ではなく、バイナリレベルで操作したいだけです。 テキストエディタで読める必要はないんです。

関連するQ&A

  • バイナリデーター内の文字を検索

    現在、以下のようなプログラムでバイナリファイルを読込んでいるのですが、そのデーターの中にある文字列の位置を検索したいのですが何かよい方法は無いでしょうか、for ~ next で廻すと一応はできますが、もう少し簡単な方法を探しています。 -------- Dim xBIN() As Byte Dim lngFileLenB As Long lngFileLenB = FileLen("バイナリ.BIN") Open "バイナリ.BIN" For Binary As #1 Get #1, , xBIN ' For i = 0 To lngFileLenB If IJP_DAT1(i) = CLng("&H" & "20") Then stop end if next i ---------- よろしくお願いします。

  • バイナリデータの中からMidのように指定範囲を取得したい

    教えて下さい。 VB6です。 テキストファイルをバイナリモードで開き、Midのように特定の位置から、 必要な分を取得し、ファイルを分割させたいです。 調べてたら、 Open 読込ファイル For Binary As #1 Open 書込ファイル For Binary As #2 ReDim bytData(1 To LOF(1)) Get #1, , bytData() Put #2, , bytData() close #1 close #2 というのを見つけました。これだとそのままコピーします。 ここから、指定された、バイト数目から指定されたバイト数までの データを取得し別のファイルを作りたいのですが、 うまくできません。どうしたら、望むことができるでしょうか? お助け下さい。

  • EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

    EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。 原因と対策を教えて頂きたいです。 ------------------------------------------------------- Dim FileName1 As String Dim FileName2 As String Dim FileNumber1 As Integer Dim FileNumber2 As Integer Dim Data As String FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt") FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") Data = Space(FileLen(FileName1)) FileNumber1 = FreeFile Open FileName1 For Binary As #FileNumber1 Get #FileNumber1, , Data Close #FileNumber1 'この間に"Data"内容を処理するコードを入れる予定 FileNumber2 = FreeFile Open FileName2 For Binary As #FileNumber2 Put #FileNumber2, , Data Close #FileNumber2 ------------------------------------------------------- このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。 "Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。

  • VBAでバイナリエディタを作ろうとしています

    テキストファイルを内部でバイナリとして開いて 16進数のダンプファイルとして新たなテキストに保存することはできたのですが 逆がどうしてもできません。 やり方としては、 03 E3 BD 71 80… のようなテキストデータをバイナリにして16進数にして保存したテキストファイルをダイアログから呼び出してもう一度元のテキスト文章に戻すという作業です。 とりあえず、まずは以下のコードでエクセル内で16進数を元の文章データに変換しようとしています。 Sub binaryToText() Dim fname As String Dim str() As Byte Dim row As Integer row = 1 fname = "Test.txt" '16進数ファイル Open fname For Binary As #1 Do Until EOF(1) ReDim Preserve str(row) Get #1, , str(row) row = row + 1 Loop Close #1 End Sub hex関数やchr関数を使う必要があるのでしょうか? VBAは始めたばかりで根本的なところで間違っているかもしれませんがよろしくお願いします。

  • AccessのVBAに関しての質問です。

    クエリで抽出したファイルをCSVで出力させ、出力したファイル名を「連番&ファイル名」の形にしたく 下記のコードを使用しました。 6ファイルは出力は成功したのですが、7ファイル目を出力しようとしたところ、「#6:オーバーフロウしました。」とエラーがでてきてしまいます。 原因やここのコードを変えれば直るというのが、お分かりになる方がいればご教示頂けますでしょうか。 初心者ですのでコードも書いて頂けると非常に助かります。 Private Sub コマンド4_Click() On Error GoTo ErrorTrap Dim varAccess As Variant Dim varCPass As Variant Dim strmsg As String varAccess = "ASN抽出" Dim FolderPass As String Dim FileName As String Dim CheckCount As Integer FolderPass = "C:¥Users¥エクスポート¥" FileName = "_STORE_ASN_TRN.csv" CheckCount = 0 Do Until Dir(FolderPass & FileName) = "" CheckCount = CheckCount + 1 FileName = Format(CheckCount, Len(CStr(CheckCount)) + 1) & "_STORE_ASN_TRN" & ".csv" Loop varTextPass = FolderPass & FileName strmsg = "csvファイルへ出力します。" & Chr(13) & _ "出力先は" & varTextPass & "です。" & _ "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferText acExportDelim, , varAccess, varTextPass, False MsgBox "データ出力は、正常に完了しました。" End If Exit Sub ErrorTrap: If Err.Number = 3044 Then ' MsgBox "パス指定が誤っています。", vbCritical Else MsgBox "予期せぬエラーが発生しました。(#" & Err.Number & " : " & Err.Description & ")", vbCritical End If End Sub

  • バイナリデータのファイル入出力について

    ○No.1 Open filename For Binary Access Read As #1 Get #1, , 変数 Close #1 ○No.2 Open filename For Input As #1 Line Input #1, 変数 Close #1 No.1とNo.2のプログラムでは読み込み方にどのような違いがあるのでしょうか?たとえば、No.2のLine Inputでは改行文字は読み飛ばされますが、No.1は改行文字も読み込みますよね。また、No.1ではDim 変数 As String * 1と最後の* 1など文字の読み込み数を定義しておく必要がありますが、Line Inputに対応するものがないからでしょうか? また、バイナリデータを読み書きするときに他に良いコードというかこうするのが定石みたいなのがあったら教えてください。

  • VBA バイナリ―から文字列にする方法

    この度はお世話になります。 現在、バイナリ―ファイル(xxxx.bin)をVBAで読み込み、バイナリ―データを文字列化して、エクセルで解析できるようなシートを作っています。 バイナリ―ファイルの中身が31 39 32 31 ・・・・・となっていたら、31393231・・・と文字列化にしたいです。 そこで、自分でプログラムを考えてみたのですが、バイナリ―が 01 などの場合、など“1”として読み込まれて、“0”が入らず、ずれてしまいます。 Sub 電文解析プログラム() Dim Deciphering_file As Variant '読み込みファイル Dim buf As Byte '1バイト格納 Dim fLen As Long 'ファイルサイズ Dim TEMP(1) As String ' Dim S_JIS As String '文字コード(2バイト) Dim str As String '文字列データ Dim i As Long Deciphering_file = Application.GetOpenFilename("BINファイル(*.bin),*.bin") fLen = FileLen(Deciphering_file) Open Deciphering_file For Binary As #1 For i = 1 To fLen Get #1, i, buf S_JIS = Hex(buf) If buf = 0 Then S_JIS = "00" End If TEMP(0) = Mid(S_JIS, 1, 1) TEMP(1) = Mid(S_JIS, 2, 1) str = myChr & TEMP(0) & TEMP(1) Next i End Sub ホントは3行くらいで済みそうな気がするんですが、あまりプログラミングをやったことありません。なので、すみませんがご教授お願いいたします。

  • 結合した文字列をファイル名に使えない

    Excel上に入力されているパス名とファイル名のデータを組み合わせて、 様々なファイルを開いたりコピーしたりするVBAのコードを作ろうとしています。 仮にシート上のA1セルに、C:\Documents and Settings\デスクトップ というパス名 A2セルに URIAGE.xls というファイル名が入力されていたとして、 A1の文字列データとB1の文字列データを結合する場合、 Sub FileSousa()  Dim a As String  Dim b As String  Dim c As String  a = Cells(1, "A").Value  b = Cells(2, "A").Value  c = Chr(34) & a & "\" & b & Chr(34)  Range("A3") = c としてみると、確かにA3セルには、"C:\Documents and Settings\デスクトップ\URIAGE.xls" と出力され、文字列が結合されたことがわかるのですが、その変数cのデータを使って  Workbooks.Open Filename:=c として、そのファイルを開こうとすると、ファイル名が見つからないとしてエラーになります。 ファイルはデスクトップ上の確かにその名前で存在しており、直接 Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\URIAGE.xls" とすると開きます。 " を Chr(34)によって入力したのがいけないのでしょうか、 Workbooks.Open Filename:=××× には、変数を置いてはいけないのでしょうか。 そもそも文字列の結合は、"あ" & "い" → "あい" となるのが基本だと思うのですが、 a="あ"、b="い"、c=a&b → c="あい"として結合した変数cについては、ファイル操作上のファイル名の設定項目として使えないのでしょうか。

  • 【ExcelVBA】FreeFile関数とGet関数について

    最近ExcelVBAを多用する部署に配属になり、現在勉強中の初心者です。 基本的な部分は何とか理解できるのですが、以下の部分がよくわかりません。 やっていることは、(FNAME)という名前のファイルにある数百万個の数値を、 R()という配列に格納しているらしいのですが、 "FreeFile"と"Get"の使い方がよく分かりません。 漠然とした質問で申し訳ありませんが、詳しい方教えてください。 Dim i As Integer, N As Integer Dim R(1 To 1000000) As Single Dim FNAME As String N = FreeFile Open FNAME For Binary As N For i = 1 To 10000 Get N, , R Next i

  • InetコントロールHTTPでバイナリファイルをサーバにPUTする。

    Inetコントロールを使用してHTTPでサーバ上にバイナリファイルを送信使用としています。 ExecuteメソッドのPUTを使用してみましたが、サーバ上のファイルサイズが0KBになってしまい、正常に送信されていません。 Dim bData() As Byte Dim intFile As Integer intFile = FreeFile() Open "D:\Temp\aaa.mdb" For Binary Access Read As #intFile ReDim bData(0 To LOF(intFile) - 1) 'ここでは、bDataに読み込めている。 Get #intFile, , bData Close #intFile Inet1.Execute "http://aaserver/files/aaa.mdb", "PUT", bData よろしくお願いします。