Excel VBA

文字列を含むかどうかの判定

InStr を使う result = InStr([ start, ] string1, string2 [, compare ]) 引数 引数 目的 start (省略可)検索開始位置。compare を指定した場合は省略不可。 string1 検索対象文字列 string2 検索条件文字列 compare (省略可)検索条件 引数 compare に入る…

例外処理

VBA での例外処理は以下の様に行う。 On Error Goto ラベル 通常処理 ....ラベル: 例外時の処理 上記の通常処理の終端では通常はExit処理かGotoによるジャンプを行う。 Exit {Sub|Function|For|Do|etc...} Goto ラベル 参照 http://www.taquino.net/cooltaq/…

SpecialCellsで該当要素が無い場合の動作

SpecialCellsでは該当要素が無い場合にメソッドやプロパティを使用すると例外エラーとなる。しかし、Count=0も処理できないのはどうかと・・・。 まぁ、SpecialCells -> Range なのでしょうがないといえばしょうがないのかも知れないが。

Select Case 文

なんかよく忘れるのでメモ Select Case 値 Case 比較値1: 処理1 Case 比較値2: 処理2 ... Case Else: 処理x End Select 以下、サンプル(あんまりいいコードじゃないが・・・) Select Case val Case 0: ' 処理なし Case 1: MsgBox "睦月" Case 2: MsgBox "…

オートフィルタ使用時の注意

オートフィルタを繰り返し使用する処理を書く場合には以下の点に気をつけること。 該当シートにオートフィルタが設定されているかどうかを確認 設定されている場合は一度解除する( object.AutoFilterMode = False ) フィルタを設定 (できれば)フィルタを解…

実行時エラー '1004': RangeクラスのSelectメソッドが失敗しました。

シートを選択( Select ) 領域( Range )を選択( Select ) の手順を踏まないと上記エラーになる模様*1。なんつーか、仕様の不備だと思ふ。 参照 http://okwave.jp/qa1722099.html *1:ただし、アクティブシートに対する操作であれば、この範疇ではない

オートコレクト時の有効要素数を数える

以下はA列を使って有効要素数を算出する方法 Range("A1:A" & Cells(65530, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count 上記の方法では対象の各セル要素が全て詰まっている列を使って処理をすることが望ましい。

Collectionオブジェクト

Collection オブジェクトは複数の要素の集合を扱う為のオブジェクト 中に入っているデータはデータ型が異なっていても構わない。メソッドは以下の通り Add Count Item Remove 参照 http://www.ilovex.co.jp/Division/SRD/archives/2006/03/vbacollection.htm…

「イミディエイト」ウィンドウ

VBA での「イミディエイト」ウィンドウの使い方 参照 http://www.ken3.org/vba/iwind.html 式の実行 ? コマンド で、コマンドの実行結果が得られる(下記の赤字部分) ? Left("ABCD", 2) 2 変数を定義して代入 別に変数宣言はしなくて良い。 適当な変数名を…

Debugオブジェクト

Debug オブジェクトはそのままずばりデバッグの為にあるオブジェクトである。メソッドとしては Print Assert を持つ。 Debug.Print Printメソッドはイミディエイトウィンドウへの出力の為に使われる。 Debug.Print( 文字列 ) Debug.Assert Assertメソッドは…

正規表現を使う

VBScript の正規表現モジュールを使うと良いらしい。 参照 http://officetanaka.net/excel/vba/tips/tips38.htm 呼び出し方 Dim re As Object Set re = CreateObject("VBScript.RegExp") プロパティ 名前 説明 Default値 Property 正規表現で使用するパター…

タイマー

参考 http://www.geocities.jp/happy_ngi/YNxv214.html#8-1 Sub TimerTest() ' 5秒待機 Application.Wait( Now + TimeSerial( 0, 0, 5 ) ) MsgBox( "5秒待ちました") ' 1分待機 Application.Wait( Now + TimeValue("00:01:00") ) MsgBox( "1分も待ちました" …

キーでイベントを起こす

user32.lib の GetAsyncKeyState を使用する。 参考 http://www.happy2-island.com/excelsmile/smile04/capter00301.shtml GetAsyncKeyState(MSDN) http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getasynckeystate…

CellsとRangeと簡単な記法

セル「A1」にデータを書き込みたい時、以下の3つの指定方法がある*1。 Cells(1, 1) Range("A1") [A1] まぁ、3つ目は今日知ったばかりだが。 スピードについては Cells > Ranges > [address] となっているらしい。 参考 http://officetanaka.net/excel/vba/s…

CheckBoxを1対1で排他処理する

ちょっと作ってみたので書いてみる Private m_conflict As Boolean ' 排他処理状態を示すフラグ '--------------------------------------- ' チェックボックスの排他処理 '--------------------------------------- Private Sub CheckBoxExeclusion(One As …

対象範囲の終端を参照

対象範囲の一番下の行を選択。 Cells(65536, 1).End(xlUp).Select 今居るセル(例えば "B35" とする)から対象範囲の一番右までを選択。 Range(Range("B35"), Range("B35").End(xlToRight)).Select 対象範囲の一番下の行番号を取得。 Dim lin As Long lin = Ce…

ウィンドウを非表示にする。

Windows(数値).Visible = False Windows(ウィンドウ名).Visible = False ブック「sample.xls」ウィンドウを非表示にする。 Windows("sample.xls").Visible = False アクティブウィンドウを非表示にする。 Windows(1).Visible = False アプリケーションのウィ…

Midステートメント

Midステートメントでは文字列の置き換えが出来る。 以下では "いう" を "イウ" に置き換えている。 Dim str As String str = "イウ" Mid("あいうえお", 2, 2) = str

文字列の切り出し

以下の6つの関数がある。 Left LeftB Mid MidB Right RightB このうち、「Left」「Mid」「Right」は文字数単位で 「LeftB」「MidB」「RightB」はバイト数単位で処理を行う。 Left 左端から文字の切り出しを行う。 Left(文字列, 切り出し文字数) LeftB(文字列…

Excel関数を実行

Application.WorksheetFunction.(Excel関数) 数値の切捨てをする場合は Dim num As Integer num = Application.WorksheetFunction.RoundDown( 123, 7 )

起動時にマクロを実行する。

Private Sub Workbook_Open() Call MyMacro End Sub