とあるプログラム(HSpice)から吐き出されたデータをExcelで読み込んでプロットするマクロを作ろうかと思っているのですが、そこで質問です。Excelの仕様としてバイナリデータを直接読み込むことはできるのでしょうか?わかる方いらっしゃいましたらよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

できることは間違いない。


http://www.geocities.co.jp/siliconvalley/4805/vb …
に実例が載ってます。モードの指定をBinaryにします。
ーー
エクセルのグラフ機能を使痛いらしいが、シートのセル範囲の表に普通の数値をセットしないとダメなはずなんで、この先どういう困難が待ち受けているか。
ーー
質問者が作ったファイルではなさそうですが、どういう仕組み(ソフトが吐き出した)でデータができて、どういうデータなのか、
そちらを正直ぶちまけて、経験者がいないか、質問すべきなんじゃないかな。
物理的測定データのようですが、そちらの作成元では、CSVファイル作成など、どうにもならないのですか。
    • good
    • 0
この回答へのお礼

あ、実例あったんですねえ。検索の仕方が悪かったみたいです。
吐き出すデータはオプションでASCII出力もできるのですがなんせデータ量がでっかいのでやっていられないかなと(いうわけでデフォルトはバイナリ出力)。
データはIEEE754準拠(だと思う)なのですが、いちいちデータを変換して表にはっつけるならASCII出力させたやつを読んだ方が速いのか?どうかわかりませんが取り敢えずまずはASCII読み込みのプログラムを作ってみます。
また何かありましたらよろしくお願いします。

お礼日時:2007/10/11 12:00

マクロというか、VBAを使うならもちろん読み込むことが出来ますが、シートに表示したり、計算の処理をするなら、例えば


Right("00" + Hex(bytedata), 2)
のようにする必要がありますし、さらに吐き出されるデータがIEEEの4バイト実数とか2バイト整数とかなら、それぞれバイト列を通常の数に直す処理を書く必要がありますね。Excelに読み込ます前に、他の方法でテキストデータに直した方が良いような気がします。
    • good
    • 0
この回答へのお礼

ExcelはIEEE754でデータを管理しているとの事だったので、バイナリデータ(IEEE754準拠)からのASCII変換も簡単にできたりするのかなーと思っていたのですがそうでもなさそうですね。がんばってみます。
ありがとうございました。

お礼日時:2007/10/11 12:44

VBAを使えば可能ですよ。



これが参考になるかな。
http://support.microsoft.com/kb/408058/ja
    • good
    • 0

テキスト(数文字含)文字なら出来ますが、画像は無理かも。


テキストもカンマ区切りかタブ区切りに限ります。
数文字は全角文字でも半角数値扱いになります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

このQ&Aと関連する良く見られている質問

Q改行のあるCSVファイルをExcelに読み込みたい

CSVファイルをExcelにインポートしたいのですが
CSVファイルのデータ内に改行が入っていたので、レイアウトが崩れて、
うまくExcelにインポートできない状態です。

改行を置き換えで取り除くと、すべて横並びになってしまいます。
1レコードは59項目と決まっているのですが、手作業で改行を入れるのは
数が多く難しそうです。
なんとかうまく取り込む方法はないでしょうか?

プログラミングは全くわかっていない初心者ですが、
エクセルのVBAにコピペして実行することは可能です。。。
カテ違いだったらすみません><

Aベストアンサー

>改行を置き換えで取り除くと、

置き換えは出来るのですね。
それと、セル内の改行は潰していいのですか?

では、「"改行」を「"タブ」に変換。
「改行」を「適当な文字」に変換。
「"タブ」を改行に変換すればいけるかな?

QExcel 2010 で終了時に「VBE6EXT.OLBを読み込めません」と出るのですが。

フリーで便利なExcelの写真整理ソフトを探していて、あるソフトを開いたところマクロが組んであったらしく「VBE6EXT.OLBを読み込めません」のエラーメッセージとともに使えませんでした。
それ以降そのソフトは開いていないのですが、なぜかExcelを終了しようとするたびにこのメッセージが出て不正終了するようになりました。
原因と対処方法をご存じの方、教えて頂けないでしょうか。

宜しくお願いします。

Aベストアンサー

こんにちは。

vbe6ext.olb とは、
Visual Basic Extensibility のことですね。
ふつうは、必要がないというものの、VBEの中の、ツール-参照設定で出てくるはずです。
ふつうは、チェックは入っていません。(添付の画像を参照)

次に、
Social.technet.microsoft.com/Forum に書かれてあった方法が簡単のようなので
それを紹介します。

実際にPCから返るメッセージとは違う可能性があるのはご容赦ください。

-----------------------
1. Excelを終了させてください。

2. vbe6ext.olb を
C:\Program Files\Common Files\microsoft shared\VBA\VBA6
で探してください。

3.vbe6ext.olb のファイルの名前を、vbe6ext.OLDに変えてください。

4.Excelを再び開けて、開発メニューを開けてください。もし、このメニューがないようでしたら、
リボンのところで、右クリックで、「リポンのカスタマイズ」で、右マドの中の、「開発」にチェック
を入れてください。

5.「Visual Basic」をクリックしてください。

6.ポップアップ・ウィンドウが現れて、「プログラムの修復が必要ですか?」と聞いてくるはずですから、
「Yes」をクリックしてください。

7.あとは、修復が起動するままにしてください。

8.Excelを閉じて、再び開けます。

一応、これまでです。
------------------------(翻訳終わり)
https://social.technet.microsoft.com/Forums/office/en-US/1d3e9aa0-2069-4f7b-b6cf-c47e00d637f5/vbe6extolb-could-not-be-loaded?forum=officeitproprevious
-------------------------
(これは、要するに、
コマンド・プロンプトで、このような設定をし直すことをしているようです。)
> regsvr32 -u "C:\Program Files \Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"

なお、他にも、Windowsの64 bit の場合の

C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB
[Copy (上を)(下に)]
C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB

というものと、2点の解決策が書かれています。

ダメなら、再インストールという方法が手っ取り早いかもしれません。

こんにちは。

vbe6ext.olb とは、
Visual Basic Extensibility のことですね。
ふつうは、必要がないというものの、VBEの中の、ツール-参照設定で出てくるはずです。
ふつうは、チェックは入っていません。(添付の画像を参照)

次に、
Social.technet.microsoft.com/Forum に書かれてあった方法が簡単のようなので
それを紹介します。

実際にPCから返るメッセージとは違う可能性があるのはご容赦ください。

-----------------------
1. Excelを終了させてください。

2. vbe6ext.olb を
...続きを読む

QExcel2013 棒グラフのプロットエリアについて

Excel2013で棒グラフを作り、プロットエリアに背景色をつけたいのですが
縦軸の数字、横軸の日付まで含んでしまいます。
縦軸、横軸の文字列を除いて(画像の赤色枠の範囲)に
背景色をつける方法を教えてください。

Excel2003のときのプロットエリアの範囲に軸は入っていなかったと思うのですが

Aベストアンサー

3Dグラフだからじゃないですかね。
2Dの棒グラフの場合はプロットエリアでお望みの背景色になるかと思いますが
質問の添付の画像では3D棒グラフのようです。

3Dグラフ系は壁面の書式設定から塗りつぶしを設定してください。
・壁面(側面と背面の2種)
・床面

グラフツールのレイアウトからは壁面を選択すると自動的に2面塗られますが、側面と背面はそれぞれ異なる色に塗りつぶすこともできます。

Qシートの抽出と読み込み

Excel 2013で作成した次のA、Bの計 2 つのブックがあります。どちらも .xlsx ファイルです。
ブックAは、a1~a50 の 50 個のシートで構成されています。
ブックBは、b1~b50 の 50 個のシートで構成されています。

シート a2 だけを抽出して別のブック (ブックC) とするにはどうしたらいいでしょうか。
シート a2 をシート b2 の前に挿入するにはどうしたらいいでしょうか。

Aベストアンサー

シートを別ブックにするには,「シートの移動またはコピー」で移動先を「新しいブック」にします。
http://www.relief.jp/itnote/archives/018171.php


シートを別ブックに移動するには,同様にシートの移動コピーで目的のブックに移動またはコピー,その後シートの並びをドラッグしても構いませんが,2つのブックを同じエクセル画面の中で並べて表示し,a2のシート名タブをb2のシート名タブの前に直接ドラッグした方が簡単です。

http://www.relief.jp/itnote/archives/excel-2007-sheet-copy.php
http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=015989

Qエクセル セル値を読み込んでの自動表示

画像を御覧ください。
エクセルのシートに「連番選択」用のセルと「連番」、「項目」、「日付」、「番号」、「表示」の列があります。

連番選択のセルに96を入れていますが、この時「連番」96の行を参照し、この右隣のセル項目の中に”A”が入っていれば、同行の「表示」に14-09-003と表示を行いたいと思います。
14-09-は同行「日付」の”yy-mm-”で、003は「番号」の”000”を取得したものです。

連番のセルに何も入っていない時には「表示」列には何も表示させたくありません。

このようなことが可能でしょうか?
よろしくお願い致します。

本サイトでは日頃からエクセルのご指導をいただき感謝しております。

Aベストアンサー

>このようなことが可能でしょうか?
可能です。
提示させない条件は次の3要素なので各行について条件を比較します。
1.連番のセル(A列)に何も入っていない時には「表示」列には何も表示させない。
2.連番選択のセル($C$1)と連番のセルが等しくないときは何も表示させない。
3.項目のセル(B列)に"A"が含まれないときは何も表示させない。
各要素をOR関数でチェックし何れかが該当するときは何も表示させないようにIF関数で条件分岐させます。
何れも該当しない場合は日付の年月と連番を連結した文字列を表示すれば良いでしょう。
C5セルに設定する具体的な数式は次のようになります。
=IF(OR(A5="",A5<>C$1,FIND("A",B5&"A")>LEN(B5)),"",TEXT(C5,"yy-mm-")&TEXT(D5,"000"))
FIND関数でのエラーを回避するためにB列の値の後尾に"A"を連結し、B列の文字列長を超えるときはB列の文字列に"A"が含まれないと判断します。
C5セルを下へ必要数だけコピーしてください。

貼付画像はExcel 2013で検証した結果ですが他のバージョンでも同じ結果が得られるはずです。

>このようなことが可能でしょうか?
可能です。
提示させない条件は次の3要素なので各行について条件を比較します。
1.連番のセル(A列)に何も入っていない時には「表示」列には何も表示させない。
2.連番選択のセル($C$1)と連番のセルが等しくないときは何も表示させない。
3.項目のセル(B列)に"A"が含まれないときは何も表示させない。
各要素をOR関数でチェックし何れかが該当するときは何も表示させないようにIF関数で条件分岐させます。
何れも該当しない場合は日付の年月と連番を連結した文字列...続きを読む

Q別シートのデータを指定したセルに読み込みたい

Excell for Mac 2011 を使用しています。
画像のイメージのように、シート1のデータをシート2の指定したセルに読み込みたいのですが可能でしょうか?

また、シート1のデータは商品が増える度にセルの位置が変わります。
(Aの次にA-1という品番が追加される、そうするとB以降のセルの位置がずれるという感じです)
なので【シート1の「D2」をシート2の「D12」に読み込む】のではなく
【シート1のA列が「A」(品番)且つ
      B列が「M」(サイズ)且つ
      C列が「BLUE」(カラー)の
      D列 (在庫数量)を
 シート2の「D12」に読み込む】
という細かい指定をしたいのですが、可能でしょうか・・・?

ご教示宜しくお願い致します。

Aベストアンサー

>Excell for Mac 2011 を使用しています。
Mac版のExcel 2011はWindows版のExcel 2010に相当するソフトと解釈しています。
Windows版との互換性は確かめていませんので確認してください。

>画像のイメージのように、シート1のデータをシート2の指定したセルに読み込みたいのですが可能でしょうか?
解像度が悪く読み取れませんので当方で模擬データを作成しました。
趣旨に合う数式は次のようになります。

Sheet2!D12=SUMPRODUCT((Sheet1!$A$2:$A$100=D$10)*1,(Sheet1!$B$2:$B$100=D$11)*1,(Sheet1!$C$2:$C$100=$C12)*Sheet1!$D$2:$D$100)
質問に添付の画像ではD3とE3セルが結合しているため1つの品名テーブルに入力した数式を他の品名テーブルにコピーできませんのでSheet2の10行目に品名を各列へ表示させました。
貼付画像はWindows版のExcel 2013で検証したものです。
互換性が無いようでしたらコメントを頂ければ幸いです。

>Excell for Mac 2011 を使用しています。
Mac版のExcel 2011はWindows版のExcel 2010に相当するソフトと解釈しています。
Windows版との互換性は確かめていませんので確認してください。

>画像のイメージのように、シート1のデータをシート2の指定したセルに読み込みたいのですが可能でしょうか?
解像度が悪く読み取れませんので当方で模擬データを作成しました。
趣旨に合う数式は次のようになります。

Sheet2!D12=SUMPRODUCT((Sheet1!$A$2:$A$100=D$10)*1,(Sheet1!$B$2:$B$100=D$11)*1,(Sheet1!$C$2:$C$100...続きを読む

QVBA csvを100万行ずつ各シートに読み込み

 今晩は、質問させていただきます。どうぞよろしくお願いいたします。
環境:Win7 64bit SP1、 エクセル2010
でございます。

 「1000万行×3列」のCSVファイルデータを、100万行ずつ
シート1~10に振り分けたく悩んでおります。
・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、
・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、
何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。

 何か良さそうな方法を思いつかれる方はおられませんでしょうか。
もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

Aベストアンサー

>そのようにいたしますと、「,」(=カンマ)で区切られたCSVファイルの1行のデータ全てが
エクセルの「A1」に入ってしまいます。

実際に私の提示した方法を試されたのでしょうか?

私が提示した方法は、エクセルの一般機能(区切り位置)で上記のようなデータを列に自動的に分割する方法を紹介しています。

このように1回だけ区切り位置の機能を利用すると、その設定をエクセルが記憶していて、2回目からコピー貼り付けするだけで、自動的に列に分割してくれます。

自分でマクロコードを編集や記載する手間や時間を考慮すれば(毎日何回も同じ作業を繰り返すようなことがないなら)、私の提示した方法でショートカット操作を使えって操作すれば、10回のコピー貼り付け操作は5分もあればできると思うので、実戦的には効率的だと思うのですが・・・

Qリンク先のファイルを開かなくても、値が読み込めるようにできますか?(SUMIFSを使ってます)

エクセル2010を使っている者ですが、あるファイルではリンク先のファイルを開いていないと、値が読み込めません。

なお、いろいろと調べて、以下のとおりの設定になっております。
・「外部リンクの値を保存する 」にチェックが入っている。
・「すべてのブックリンクの自動更新を有効にする」にチェックが入っている。
・起動時の確認で「○メッセージを表示しないで、リンクの自動更新を行う」にチェックが入っている。

当該ファイルの中で、値を読み込みたいところでは、SUMIFSの関数を使っているのですが、そのせいなんでしょうか。
そうだとしたら、SUMIFSを使っていても、リンク先のファイルが閉じた状態で値を読み込む方法はないのでしょうか?

Aベストアンサー

No.1の回答者さんが書いているように、ブックを閉じたときの仕様に
なっていますので、SUMIFS関数を使うのならブックを開いておいて、
作業します。
https://support.microsoft.com/ja-jp/kb/260415

どうしてもブックを閉じて作業したいのなら、SUMIFS関数を使わずに
配列数式に変更して回避します。
{=SUM(IF((条件1)*(条件2),範囲))}
http://ameblo.jp/pcroom123/entry-11742483652.html
http://excel-magic.com/post-32/

QExcelマクロにてCSV出力したデータをTXTとして読み直し、内容の編集を行いたい

第3者にExcel記入頂いた「データレコード(固定列数・変動行数)」を用いて、
・ヘッダレコード(1行:固定値) → 1列目(図のX)
・データレコード(記入された列数=r列とする) → 2~r列目(図のY)
・トレーラレコード(1行:固定値) → r+1列目(図のZ)
とサンドイッチ式に結合し、CSVファイルにて出力する作業をExcelマクロにて自動化しようと思っています。

3種類のレコードはどれも固定の列数ですが、それぞれデータ数が違います。
そのためそもそも「ExcelファイルをCSVファイルとして保存」した際の機能制限上、
もっとも列数の多い行に合わせ、列数の少ないレコードの後ろに勝手にカンマが複数個足されてしまいます。
(※ここの認識合ってますでしょうか。念のため確認です。)


そのため一旦ExcelデータをCSVファイルとして保存したのち、
それをTXTファイルとして開き直し内部データの置換(カンマ個数の調整)をしたいと思っています。

'「Workbooks.Add」で新規生成し、内容編集したファイルを「作業日付」でCSV保存する
'特にパスは指定していないため「カレントフォルダ」に保存
ActiveWorkbook.SaveAs Filename:=Format(Now, "yyyymmddHHMMSS"), FileFormat:=xlCSV

この後の作業について、どういった手順で進めれば良いかご存知の方はいらっしゃいますでしょうか。

※指定パスにあるTXTファイルの読み込み→内容編集・置換
といった作業であれば以下のURLのような事例が参照可能ですが、「生成したばかりのCSVファイルをTXTとして読み返す」ことはそもそも可能なのか解らず。。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13100352723


どうぞ宜しくお願いします。

第3者にExcel記入頂いた「データレコード(固定列数・変動行数)」を用いて、
・ヘッダレコード(1行:固定値) → 1列目(図のX)
・データレコード(記入された列数=r列とする) → 2~r列目(図のY)
・トレーラレコード(1行:固定値) → r+1列目(図のZ)
とサンドイッチ式に結合し、CSVファイルにて出力する作業をExcelマクロにて自動化しようと思っています。

3種類のレコードはどれも固定の列数ですが、それぞれデータ数が違います。
そのためそもそも「ExcelファイルをCSVファイルとして保存」し...続きを読む

Aベストアンサー

>もっとも列数の多い行に合わせ、列数の少ないレコードの後ろに勝手にカンマが複数個足されてしまいます。
そういう解釈もあるのでしょうが、四角形に範囲を取っているからだと思います。

>CSVファイルにて出力する作業をExcelマクロ

Excel VBAでするなら、
>それをTXTファイルとして開き直し内部データの置換(カンマ個数の調整)をしたいと思っています。
これは不要でしょう。最初から、そう出力すれば済む話ですから。

それとも、既存のCSVを直す方法もありますが、それは、また補足にでも加えてください。

マウスで範囲を選択します。だから、画像には出てきませんが、空行を選択範囲に入れると、それも入ってしまいます。

なお、このマクロは、Excel 97~2000 によく見かけられた、懐かしい古典的なものです。

'//
'Option Explicit

Sub CSVExportMacro()
Dim Rng As Range
Dim Fname As String
Dim i As Long, j As Long
Dim buf As String
Dim FNo As Integer
Dim mPath As String
mPath = ThisWorkbook.Path & "\"
If TypeName(Selection) <> "Range" Then
 Exit Sub
End If
Set Rng = Selection
If WorksheetFunction.CountA(Rng) < 2 Then
  MsgBox "データが不足しています。", vbExclamation
  Exit Sub
End If
Fname = Format$(Now(), "yyyymmddHHMMSS")
Fname = mPath & Fname & ".csv"
FNo = FreeFile
Open Fname For Output As #FNo
With Rng
For i = 1 To .Rows.Count
 For j = 1 To .Columns.Count
  If Trim(.Cells(i, j).Value) <> "" Then
   buf = buf & "," & Trim(.Cells(i, j).Value)
  End If
 Next j
 Print #FNo, Mid$(buf, 2)
 buf = ""
Next i
Close #FNo
Beep
End With
End Sub
'///

>もっとも列数の多い行に合わせ、列数の少ないレコードの後ろに勝手にカンマが複数個足されてしまいます。
そういう解釈もあるのでしょうが、四角形に範囲を取っているからだと思います。

>CSVファイルにて出力する作業をExcelマクロ

Excel VBAでするなら、
>それをTXTファイルとして開き直し内部データの置換(カンマ個数の調整)をしたいと思っています。
これは不要でしょう。最初から、そう出力すれば済む話ですから。

それとも、既存のCSVを直す方法もありますが、それは、また補足にでも加えてください。...続きを読む

QExcelについて質問です。 Excel2003でデータ作成した場合、Excel2010、または

Excelについて質問です。


Excel2003でデータ作成した場合、Excel2010、または2007などバージョンが上のドライバが入ってるパソコンから編集することはできますか?

2010で作成したデータは2003で開くことが出来ませんでした。

Aベストアンサー

上位互換性があります。
すなわち過去のバージョン(2003)で作成したものは、それ以降のバージョン(2010など)で開く事も編集も可能です。
逆に後のバージョンで作成したファイルを、それ以前のバージョンでは開くことは出来ません。
互換機能パックがありますので、それを利用すれば可能になります。
https://www.microsoft.com/ja-jp/download/details.aspx?id=3
(2007と書いてありますが、2007以降はOKです)

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報