VBA

VBAのソースコード整理

VBA

VBAソースコードの整理には効果的な手法があります。 http://ameblo.jp/tech-note/entry-10051560643.html 最近、またExcelVBAでソース自動生成ツールを作らなくちゃいけないかもと思っているので期待します。

再帰

VBA

できるとは今まで知りませんでした。VBAさんごめんなさい。

ファイルを開いているかどうか

VBA

ExcelファイルならWorkbooksコレクションを見ればいいのだが、テキストだとメモ帳などの他のアプリケーションで開いていると確認が出来ないことがある。(『ExcelVBA実用サンプルコレクション』参照)で、ログファイルの拡張子を.logから.xlsにしちゃった。

山切りカットソースコード

IfとForで1行ごとにネストしたコード。さらに3段も重ねた山切りカットソースコードなのにこの人は何も思わないんだろうか。DRYにすれば1/3以下になるのに。どうして配列とフラグとIf文を書きたがるんだろうか。

途中終了はEnd

VBA

VB系はコードブロックの終わりにEnd If/End WithとかEndを書くので、つい忘れてしまう。そもそも使わないようにしている。 Exit Sub/Functionはプロシージャ抜け Application.Quit()はExcelごと終了 Endが途中終了

xlSpecialCells

VBA

xlSpecialCellsはExcel起動中に勝手に変わる(例えば、誤ってセルに入力してしまうとセルの入力値を消してもExcelが記録している)から、入力されている最も下/右のセルを取得するのには向かない。VBAエキスパートの本に載っている。要は、いったん入力があ…

VariantとObjectの違い

VBA

ちょっとググッてみた。予想通り、VBではVariantだったのがVB.NETではObjevtになる、といった話が多い。 Okay庵 VB研究所 ?宣言 http://hp.vector.co.jp/authors/VA021605/vb/Dimension.htm ふむ。

sheetsのVisible=FalseはPrintOutできない

VBA

シートがあるだけ印刷する処理を書いたらなぜかエラー。Nameプロパティを調べたらなぜかSheet1というシートがVisible=Falseで隠れていた。

プログレスバーを表示する

VBA

以前のプロジェクトで先輩が実装していたのを思い出して探した。 「VBAestに学べ ExcelVBA上級テクニック 処理実行中のメッセージと進行状況を表示する」 http://www.moug.net/skillup/nksw/nksw11-02.htm?PRINT 実装してみたら、フォームをモードレス表示し…

Collectionはitemとkey以外にindexがある。

VBA

collec.item(index) のように使える、らしい。

書式指定はFormat関数

VBA

同期の人はは自作関数とIf文で頑張ったみたいだけど、Is-関数とFormat関数でもっとシンプルにできる。FormarCurrency関数なんてものもある。

Right関数(またDRYじゃないコードを書いた)

VBA

ページ数を取得して、3桁にゼロ埋めで返すという処理を、いやいやながらも Select case CInt(numString) Case Is Debug.Print "0以下でエラー" Case Is retString = "00" & CStr(numString) Case Is retString = "0" & CStr(numString) Case 2 retString = C…

ループは難しい。

タブ区切りだけど、いろんな種類のレコードが混ざっているテキストデータがあって、そこから適切に切り出してテキストファイルをつくるって処理をやった。仕様があいまいなこともあって、とっても大変な処理になると思ったんだけど、試行錯誤したあげく、実…

ExcelVBAで列が256以上あるデータを読むとき

VBA

現行のOfficeは256列までしか読めない。OpenTextメソッド(だったっけ?)でExcelに読み込むと、256以降は捨てられる。で、こうやった。 Dim fso As New Scripting.FileSystemObject Dim ts As Scripting.TextStream DIm lineString As String Set ts = fso.…

CollectionとDictionary

VBA

CollectionはItemを追加したり削除すると動的にkeyが整理される。なので、keyは整数型(Integer?)。それも、基底が0ではないので注意。あとは、keysプロパティでkeyを取得した場合、For Each key1 In keysとするときのkey1はVariant型でないとダメっぽい。…

クラスの使い方

VBA

コンストラクタに引数与えて、ってことができないのはう〜ん。VBA本は数あれど、クラスを扱った本がない気がする。■クラスモジュールを使った究極のVBAプログラミング http://www.moug.net/skillup/opm/opm08-01.htm 基本的にApplicationのイベントを有効に…

普段使っていない編集系ショートカット

VBA

『VBAエキスパート教科書 Excel VBAベーシック』より カーソル行を削除 [Ctrl]+[Y] カーソル位置から単語の最後までを削除 [Ctrl]+[Del] 隣の単語に移動 [Ctrl]+[←]/[→]

VBAエキスパート公式サイト(引っ越しした)

VBA

http://vbae.odyssey-com.co.jp/ Office 2003ではあるが、取得してすっきりさせなければなるまい。

VBA

VBAはExcelの行列を変数で指定することが非常に多いので、 VB.NETだと、 Dim Index As Integer For i As Integer = 0 TO Index -1 なんかの処理 Next のようにやっているけど、 ExcelVBAでは、 Dim i As Integer For i = 1 TO row なんかの処理 Next のよう…

ExcelVBAでSQLを使う

VBA

多分ちょくちょく使うのでその昔書いた□ソースをここに貼っておく。

プロシージャ呼び出し

VBA

Call Proc 引数 はエラー Call Proc(引数) は参照渡し Proc 引数 はエラー Proc(引数) は値渡し あれ、わからなくなってきた。もう一度調べてあとで書く。かコメントを 待つ。