脱力系備忘録BloG ホーム »VBA

VBAでテキストをファイルに書き出してファイルを消すやり方  

EXCELマクロを組んでいて覚えた備忘録。

まずはファイルの書き出し

'書き出すファイルパス
Dim f_path As String
'オープンしたファイル番号
Dim fp As Integer

f_path = "d:書き出すファイル名.txt"
fp = FreeFile
Open f_path For Output As fp
Print #fp, 書き出す文字列または文字列を格納した変数
Close fp



次にファイルの削除
Kill f_path
これだけ。
注意点はゴミ箱に残らず完全に消去される。

category: VBA

LibreofficeでVBAを使う方法が簡単すぎて罠を疑うレベル  

Option VBASupport 1

これを先頭行に追記するだけ。

category: VBA

IF文の判定比較演算子をすぐ忘れるので困る  

PHP、JAVASCRIPT、VBAを同時に使っていると、IF文の比較演算子がどれがどうだったかわからなくなるのでここにまとめておく。
そうそう、文字列結合も混乱するので書いておく。

 PHPJAVASCRIPTVBA
比較
演算子
等価=====
厳密等価====== 
不等価!=!=<>
厳密不等価!==!== 
倫理
演算子
および&&
AND
&&AND
もしくは||
OR
||OR
文字列結合.(ピリオド)+&
※厳密判定は値の「型」まで判定します。
1 == "1" は TRUE(真)
1 === "1" は FALSE(偽)

※PHPの論理演算子は「&&」「||」の方が「AND」「OR」より優先度が上です。


さて、ここに書いたことを忘れないようにするにはどうしたら良いでしょう?

category: PHP JavaScript VBA

EXCELマクロ実行時の「応答なし」を回避する  

EXCELマクロで時間のかかる処理を実行させたら、10秒そこらで「応答なし」となってしまう。
プログラムを見直して、何度実行させても実行後ちょっとしたら「応答なし」となる。

件数の問題か・・・?

!メモリか?!と思いリソースモニターを見てみるが、メモリの問題ではなさそう・・・・・・
ん?応答なしと表示されてるが、excel.exeがCPUを使用している・・・。動いているね?これ。
ひょっとしてと思いネットを探ってみると、やはり、EXCELで重いマクロを動かすと表面上「応答なし」となるようだ。
これを回避する方法として、重たいループの中に
DoEvents
という関数を入れると解決。

これで実行してみると、うん。応答なしにならない。
処理カウンターも表示されている。
・・・が、ちょっと重いな。

さらにネットを探ると、重いループ処理をさせるときはEXCELの表示機能を停止させると良いとのこと。
Application.ScreenUpdating プロパティ (Excel)

ループ処理の前に
Application.ScreenUpdating = False

処理後に
Application.ScreenUpdating = True

しかし、これではセルに表示していた処理カウンターが表示されない。
そこで、EXCEL下部のステータスバーに処理カウンターを表示させることにする。
Application.StatusBar = "処理カウント" & curr & "/" & maxdata
同じく処理後に
Application.StatusBar = False

ついでに、ループごとに表示させる必要もないのでdateDiff関数で5秒ごとにDoEventsを呼び出すことにしました。
dateDiff("s", date1, date2)
この関数の注意としては、date2 - date1で計算される点。
おっと、後々勘違いしそうだ。
この関数はタイマー関数ではない。あくまでも日時の差分を取得するだけの関数。

さて、この仕組みを組み込んでマクロを実行したら、、、あはははは。めっちゃ速い。

category: VBA

プロフィール

お問い合わせ

最新記事

最新コメント

▲ Pagetop