Excel VBA 質問スレ Part64at TECH
Excel VBA 質問スレ Part64 - 暇つぶし2ch225:デフォルトの名無しさん
20/01/02 23:23:58.57 1vLrUBFwa.net
ルビカスが何を言おうと、世の中ではExcelが出力するCSVが標準のCSVだ

226:デフォルトの名無しさん
20/01/03 10:32:03.45 R/lajPDg0.net
CSVは自前でテキストファイル読み込み+自前で区切り扱いが基本。
区切りが何であろうと、データの形式が何であろうと全て自分でコントロール出来るし速度も速い。

227:デフォルトの名無しさん
20/01/03 12:29:48.12 V2sewd5k0.net
同意。てか、Excel標準のCSV読み込み仕様もうちょっとなんとかなりませんかね・・・?
それはさておき>>216>>221(もう見てないかもだけど)
その「CSVファイルを配列に取り込むJavaScript」のコードに問題があるんじゃないかなと。
具体的には\n(%0A)でSplitしてるから\rが残ってるだけだと思うけどな。

228:デフォルトの名無しさん
20/01/03 18:33:14.85 LoHkYQxe0.net
使い続ける以上CSVとの戦いは続くのだ

229:デフォルトの名無しさん
20/01/03 18:50:10.73 k7eftYc7x.net
モダンExcelが一般化してきた今ならクエリでCSVの開き方を指定して読み込むのがいいんじゃないの
CSVをエクセルで直接開くといろいろ勝手なことをしてくれるので

230:デフォルトの名無しさん
20/01/03 19:06:41.78 esau8hBed.net
PowerQueryのコードを書くのはVBA以上にハードルが高いぞ

231:デフォルトの名無しさん
20/01/03 19:55:22.39 3Uhjf7eSM.net
PowerQueryコード書かなきゃいけないの?
GUIでできる範囲だと不十分なの?

232:デフォルトの名無しさん
20/01/03 19:58:54.81 k7eftYc7x.net
そんなにハードル高いか?
テキストファイルの読み込みの処理をスクラッチするより明らかに楽だし処理速度も速いと思うが
例えば4列のCSVをSJIS(Windows-J31)でデコードしてカンマ区切りで読み込んでSheet1のA1セルから書き出すとしたらこんな感じ
Sub ReadCSV()
  With Worksheets("Sheet1")
  With .QueryTables.Add(Connection:="TEXT;ソースファイルのパス", Destination:=.Range("A1"))
    .TextFilePlatform = 932
    .TextFileCommaDelimiter = True
    .RefreshStyle = xlOverwriteCells
    .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat)
    .Refresh
    .Delete
  End With
  End With
End Sub

233:デフォルトの名無しさん
20/01/03 20:07:37.72 k7eftYc7x.net
PowerQueryだったらもっと簡単だろう
Csv.Documentにソースのパスとメタ情報を渡してテーブルを取得するだけだしGUIでステップ記録できる

234:デフォルトの名無しさん
20/01/03 20:56:20.20 LoHkYQxe0.net
CSV読み込みの話してんのになんで書き込みの回答してんだろうこの子

235:デフォルトの名無しさん
20/01/03 21:32:33.80 k7eftYc7x.net
>>234
>>232のコードについて言ってるなら、読み込んでシートに書き出してるわけで、クエリの使い方としてはオーソドックス処理だぞ
読み込んだ結果をシートに書き出さないならODCにデータモデルとして保存すれば良い

236:デフォルトの名無しさん
20/01/03 22:10:30.43 k7eftYc7x.net
>>235
ODCにデータモデルとして→×
データモデルとして→○

237:デフォルトの名無しさん
20/01/03 22:23:49.87 X7hap7HH0.net
>>230
全然。
基本的にはリボンの機能使った操作が1つずつのステップになっていく。
ステップの1つ1つがマクロみたいなもの。
「詳細クエリー」を見て初めて「コードはこうなってるんだ・・・」
という感じ。
もっとも、M Functionのレファレンスやパラメータあたり説明が
英語でもまだ不親切なので、
使えてない部分が多分にはあるけど。
ただ、VBAのように出来る範囲が広範囲なわけではなく、
取得したデータの成形に特化してる。
スクレイピングについては
Pythonみたいに取得対象のWeb画面で
IDやパスワード入力するとか、
ボタンを押すみたいなことも出来ない模様。

238:デフォルトの名無しさん
20/01/03 22:43:05.12 3zmXV6NNx.net
データの成形に特化と言ってもVBAでスクラッチすると恐ろしく面倒なJoinとかのSQLチックな処理は全て実行できるので、データ処理の面ではVBAより手軽で便利
あとAccessDBやSQL ServerやOBDCはもちろん、ファイルシステムとかExchangeサーバとかSharePointリストとか、およそデータベースとして扱えるデータストアの情報は全て取得できる
フォルダ内のファイルの属性情報を取得する処理のためだけにいちいちFileSystemObjectのインスタンスとかを使ってスクラッチする必要がなくなると考えればめちゃくちゃ便利

239:デフォルトの名無しさん
20/01/04 15:59:54.32 dDunGyfu0.net
>>227
みています
ご指摘の通り、\nでspritかけてました!
\nってCR+LFじゃなかったんですね…
この後都合があるのですぐには試せませんが、
その辺確認してみます。
ありがとうございます!

240:デフォルトの名無しさん
20/01/04 16:12:12.74 8fEwlZFG0.net
\nはLFじゃなかったか
windowsの改行は\r\nだったような

241:デフォルトの名無しさん
20/01/04 17:52:00.86 ALZ03HNg0.net
EditBoxでは\r\nでRichEditBoxでは\nだねWindows

242:デフォルトの名無しさん
20/01/04 17:56:48.54 +4weKQQc0.net
CR+LFの定数の vbCrLf か vbNewLine でいいんじゃね

243:デフォルトの名無しさん
20/01/04 18:04:55.94 8fEwlZFG0.net
vbNewLineいいよね

244:デフォルトの名無しさん
20/01/04 18:23:56.78 ZrFrOERU0.net
>>239
やっぱり。
>>240-241の人もいうとおり、OSだけじゃなくAPI関数ごとに改行コードの取扱いが違ったりすることもあるし、
テキストエディタに内蔵されてる正規表現なんかでも「\n」でCRLFに対応させてる例もあったりするから、
その辺はトライ&エラーで覚えていくといいとおもうよ。

245:デフォルトの名無しさん
20/01/04 18:40:58.78 HwWXKum00.net
北海道のグラサンスーパーハゲザーはここにはこないのー?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch