[[20251125120736]] 『txtファイルはworkbooks.openじゃダメなの?』(傘) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『txtファイルはworkbooks.openじゃダメなの?』(傘)

vbaでtxt形式のファイルを扱う方法を調べると
openステートメントで開いてline inputでどうのこうの、というのがたくさん出てきます。
自分も過去にtxtファイルを扱うマクロを書いた時はそれに倣ったんですが、
ふと、エクセルのウィンドウにtxtファイルをドラッグドロップしたらそのまま開けるのを見て
そういえばcsvファイルもテキストファイルだけどこっちはworkbooks.openメソッドで開くなあと思い
wb.openメソッドを使ったコードを書いてみたら読むのも書くのも普通にできました。
ただ調べてみてもtxtファイルを開くのにwb.openを使うという記事はopenステートメントを使うというものよりも圧倒的に少ないんですが
wb.openには何かtxtファイルに対して使うのに推奨されない理由があるんでしょうか?

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


何がしたいんですか?

Workbooks.Openで開くなら、開くファイルがテキストであろうと、それはWorkbookとして開くということでしょう。
Workbookとして開いて、その後に何をしますか?

その処理に特に問題がないのであれば、Workbooks.Oepnで開いても良いと思いますが。

Workbooks.Oepnにも開くファイルがテキストである前提のオプションがありますよ。
https://learn.microsoft.com/ja-jp/office/vba/api/excel.workbooks.open
(ゆたか) 2025/11/25(火) 13:47:15


今はどうかわかりませんが、CSVファイルを開くのに圧倒的に遅かったから
(不明) 2025/11/25(火) 13:50:48

テキストファイルといってもフォーマットの問題があるので、
すべてのテキストファイルがWorkbookとして開くのに適しているわけではないでしょうね。
そういう意味ではopenステートメントのほうが汎用性があるのでしょう。
(ゆたか) 2025/11/25(火) 13:57:34

 Workbooks.Open
 と
 Workbooks.OpenText
 のどちらでもテキストファイルを開けますが、
 区切り文字の指定やセル書籍の指定など、細々違います。
 マクロの記録すると、Workbooks.OpenTextになるのも、Workbooks.Open が使われない理由かもしれません

 で、VBAで読み取って、各セルに値を書き込む方法との一番の違いは、
  ・既存のブックに読み込める(任意のセル範囲に読み込める)
  ・読み込む(というかセル範囲に書き込む)前に中間処理を入れられる
 あとは、保存する際のコードが違ってきますね
(´・ω・`) 2025/11/25(火) 14:18:25

 追伸
 
 >・既存のブックに読み込める(任意のセル範囲に読み込める)
 Workbooks.Open(OpenText)で開いて、任意のセル範囲にコピペするという手もあるのですが、
 なぜか、「開かないで・・・する方法」とかの質問は昔から多かった気がします
(´・ω・`) 2025/11/25(火) 14:28:06

 Workbooks.Openだと
 ・001 が 1と読み込まれる
 ・1-1 が 1月1日と読み込まれる
 などがあって、結構面倒なことになるかと思います。
 (Excelの小さな親切、大きなお世話などと揶揄されることも)

 そのこともあって、QueryTables.Add メソッドを使うことが結構あったかと思います。
 文字コードの指定とか、列ごとの表示形式の指定、区切り文字の指定などができるからです。
 # CSVとかTSVなどでよくある話でした。
 # プレインテキストの話であればスルー願います。

(xyz) 2025/11/25(火) 14:50:47


処理速度の問題(当時)と、ブックとして開いちゃうことによる専門性の低下から
txtファイルを開くというシチュエーションではあんまり使われてないってことなんですかね。
ただデータを読むために開きたいだけならWorkbooks.Openでも問題なさそうですね。

皆さん回答ありがとうございました。
(傘) 2025/11/25(火) 17:54:32


ああ、文字化けとかに気を付けてね
昔は、円サイン\なんかが$に置き換えられたりしてた
あと日付なんかも基準はアメリカ形式だったな
yyyy/m/dなどは大丈夫、二桁年号を使ってた時が・・・
(不明) 2025/11/25(火) 18:54:44

ここ半角円サイン¥がバックスラッシュに置き換えられちゃうんだ
(不明) 2025/11/25(火) 18:58:10

 背景事情からすると、バックスラッシュ(U+005C)を円記号(U+00A5)のグリフで表示している日本語環境の方が
 むしろ国際仕様に反しているそうです。

 実際、U+005Cで円記号を打ち込んだセルのフォントをArial系統に変えるだけでもグリフはバックスラッシュに変わるので、
 表面上は単に「フォントの違いだ」と強引に考えてしまう事も出来るっちゃあ出来ると思います。
 (「令」の正しい字体は「刀」なのか「マ」なのか → どちらも正しい的な)
 コーディング向けフォントも大抵バックスラッシュで表示されますね。

 勿論U+00A5で打ち込んだ円記号はフォントに左右されません。(表示形式のプリセットにある円記号はこっち)

 ただ表面上の話だけではなく、
 VBE上で円記号をU+00A5で直接入力した場合は、U+005Cを打ち込んだ事にされてしまいます。勝手に。 勝 手 に !!
 (かと言って、セルに打ち込んだU+00A5をコピってVBE上でペーストしたら「?」に化けてしまうという)

 なので、
 NumberFormatLocalでセルの書式を設定しようとしてU+00A5のつもりがU+005Cを打ち込んだ事になっていて、
 そのマクロを用いて書式設定されたセルのフォントを変えてみたら、
 金額欄の頭にある円記号がバックスラッシュになってしまう事故も発生し得る訳ですね。

 この板で生じている現象もそれと同じ理屈なのかも知れません。

(白茶) 2025/11/26(水) 10:28:11


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.