あるソフトからExcelファイルが出力されます。これを編集してテキストファイルにしたいと思います。大体できたのですが、まだ不具合があるのでお教えください。
Excelは、以下のコードで呼び出しています。
Set EX = CreateObject("Excel.Application")
With EX.Application
.Workbooks.Open (Pathname)
.Visible = False
.DisplayAlerts = False
エクセルのデータをファイルに出力するコード
.Workbooks.Close
End With
Set EX = Nothing
(1)Excelのデータの範囲を知りたいのですが、以下のコードで検索すると結構時間がかかります。簡単に範囲を得る方法はないでしょうか?行と列と両方知りたいのですが。
lastcell = .Cells(Rows.Count, 1).End(xlUp).Address
または
lastRow = .Range("A65536").End(xlUp).Row
(2)VBで作っているのですが、VBAで作るより時間がかかります。これは仕方ないでしょうか?
以上、よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
>あるソフトからExcelファイルが出力
<案1>
そのあるソフトで、保存する前にデータの範囲に範囲名をつけるとか出来れば
その範囲のColumns.countやRows.Countで範囲取得できますよ。
例:
A1~D5の範囲を範囲名”hoge”として定義済みと仮定。
Range("hoge").Columns.Count
Range("hoge").Rows.Count
<案2>
出力されているXLSファイルをCSVファイルとして保存して
Open&Line Inputで内容を取得して
Col数は、","(コンマ)で区切られた数
Row数は、Line Inputの繰り返し数
で、取得するとかは如何でしょうか。
どちらも、一案なので今回のものに適用可能かどうかはわかりませんが
参考程度に如何でしょうか。
どうもありがとうごさいます。
<案1>は、ソフトに修正を入れてもらうのにかなり費用が発生するので難しいです。
<案2>は、発想の転換ですね?感心してしまいました。
参考にさせていただき、いろんな角度でもう少し検討してみます。
No.4
- 回答日時:
質問とは無関係ですが、最近答えたことと同じような話題がのぼっているのが見えたので、ちーと乱入デシ
参照設定とCreateObjectについて発言しました。
よかったら、見てやってくださいまし。
それでは、おじゃーまいたしました。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=500315
どうもありがとうございます。
参照設定しながらCreateObjectでこれまで作ってきました。
違うんですね?
もっと勉強してみます。
No.3
- 回答日時:
EXってExcel.Applicationを参照してるんですよね?
なら「With EX.Application」じゃなくて「With EX」じゃないでしょうか。
ま、ボクの勘違いかもしれないですけど、その前提で書きますんで適宜直してください。
(1)
Dim myRange As Object
Set myRange = Ex.Workbooks(1).Worksheets(1).Range("A1").CurrentRegion
MsgBox myRange.Rows.Count & " " & myRange.Columns.Count
ってのはどうでしょうか?
CurrentRegion は空白行と空白列に囲まれた範囲を返すので、お使いの表がそういう仕様ですと使えませんが。
詳しくは CurrentRegion のヘルプを見てください。
(2)
どういう意味で「時間が掛かる」というのかがわかりません。
開発時間なのか、処理時間なのか・・・
「参照設定」でExcelを参照して開発してみてはどうでしょうか?
そうすればオブジェクト変数も
Dim mySheet As Worksheet
という風に宣言できますし、コーディング中もExcelのオブジェクト名の後ろで「.」を押せばインテリジェンス機能が働きます。(アーリー・バインディング)
参照設定尾は実行時間に関しても多少の改善ができます。
参照設定されているものはVBのApplicationが立ち上がる時に読み込まれますので、CreateObjectの行を処理する時にExcelを読み込む「レイト・バインディング」より速く処理ができます。
ただしVBのApplicationが起動する時間がその分遅くなりますが、「実際に処理する時」に待たされませんから器にならないと思います。
Dim myXL As Excel.Application
Dim myBook As Excel.WorkBook
Dim myRange As Excel.Range
Set myXL = New Excel.Application
Set myBook = myXL.WorkbooksOpen(Pathname)
Set myRange = myBook.Worksheets(1).Range("A1").CurrentRegion
とは言え、参照設定は諸刃の剣です。
「VBのApplicationを実行するPC環境によってExcelのバージョンが違う」
「今後、Excelのバージョンが上がる可能性がある」
という場合は参照設定しないほうが良いでしょう。
参照設定は対象物のバージョンを固定した上で参照するからです。
そこで解決策。
開発時は参照設定で開発を行い、リリースする段階で参照設定を解除し、Excelのオブジェクト型で宣言していた変数をすべて「Object型」に変更、インスタンスを作成している行の記述も「CreateObject」に変更する。
という開発はどうでしょうか。
この回答への補足
どうもありがとうございます。
(1)については、「With EX.Application」でも「With EX」でも同じ動きでした。
Set myRange = Ex.Workbooks(1).Worksheets(1).Range("A1").CurrentRegion
MsgBox myRange.Rows.Count & " " & myRange.Columns.Count
では、Rangeで”A1"を指定しているので、11という答えでした。
(2)ですが、もちろん開発時間も速いに越したことはありませんね。
でも、処理時間は深刻です。参照設定でExcel 9.0 Object Libraryを設定しています。設定していてCreateObjectは使い方が変ですか?初歩的に間違っているのでしょうか?
No.1
- 回答日時:
この回答への補足
早速ありがとうございます。
(2)に対するお答と受け取っていいでしょうか?
配列にデータを入れてから編集処理をすることで処理時間が速くなるというお答でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで新しい日付順にファイルを...
-
VBAでPowerPointからExcelにデ...
-
アンケート結果をcsv出力できる...
-
VB6側からテキストファイルをク...
-
ある文字列を含む行の抽出
-
access vbaでCSVファイルを文...
-
fortranでのcsvファイルを出力...
-
VBAで任意のフォルダ内のファイ...
-
バッチでiniファイルの編集
-
特定フォルダ内のテキストファ...
-
A列をテキストファイル名に、B...
-
フォルダ比較の結果をテキスト...
-
BCPユーティリティの使用法_...
-
テキストファイルを直接置換す...
-
excelにテキストファイルの指定...
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
大量のフォルダからひとつのフ...
-
バッチ処理でファイルの中身を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで新しい日付順にファイルを...
-
VBAでPowerPointからExcelにデ...
-
複数行の文字列を変数として使...
-
BCPユーティリティの使用法_...
-
特定フォルダ内のテキストファ...
-
テキストファイルを直接置換す...
-
VB6側からテキストファイルをク...
-
テキストファイルの行頭に文字...
-
Excel.VBA テキストファイルを...
-
バッチでiniファイルの編集
-
unicode文字列(日本語)のファイ...
-
access vbaでCSVファイルを文...
-
ある文字列を含む行の抽出
-
複数のCSVの指定行だけを残し、...
-
A列をテキストファイル名に、B...
-
fortranでのcsvファイルを出力...
-
ExcelVBAで以下のマクロを作成...
-
RandomとBinaryモードの違い
-
ソースコードの差分がある行番...
-
C#でのファイル編集と上書き保...
おすすめ情報