B-Teck!

お仕事からゲームまで幅広く

VBA

【VBA】与えられたパスのフォルダを新しく作成する

VBA

パスを指定してフォルダを作成する。 下記みたいな指定の場合でも存在しないパスごと作ってくれる。 MakeNotExistsDir("存在するパスA\存在しないパスA") MakeNotExistsDir("存在しないパスA\存在しないパスB\存在しないパスC") Option Explicit 'WindowsのA…

【VBA】パスワードのかかっていないExcelだけ開く

VBA

VBAからパスワードのかかったExcelファイルを開く際、普通にWorkbooks.Openするとパスワード入力ダイアログで止まってしまう。 この場合、パスワードを入力するかダイアログを閉じるまで実行中の処理が停止してしまう。 また、ダイアログを閉じた場合にはエ…

【VBA】配列をソートする

VBA

クイックソート アルゴリズムが少し複雑。早い。 C言語で文字列のクイックソート - テクメモ バブルソート アルゴリズムが簡単。あまり早くない。 バブルソート '/** ' * quickSort ' * 配列をクイックソートする ' * 大小比較できる型ならとりあえずソート…

【VBA】Dir関数で指定パスのサブフォルダを全て取得する

VBA

'/** ' * getTargetFolders ' * 与えられたパス配下のフォルダをサブフォルダまで配列で取得する ' * @param strDirectoryPath パス ' * @return フォルダ名のString配列 ' */ Function getTargetFolders(ByVal strDirectoryPath As String) As String() Dim…

【VBA/Excel】Excelの印刷総ページ数を取得してCSVで出力する

VBA

Dir関数の注意 Windows由来の問題で3文字より長い拡張子を3文字に切り詰めるらしく、xlsでxlsxもxlsmも取れてしまうらしい。ヤバイ。 Office TANAKA - Excel VBA Tips[Dir関数の注意点] ページ数を取得するPageSetup.Pages.CountがExcel2007~2010でバグって…

【VBA】半角カナを判定する

VBA

Not (Mid(strInput, i, 1) Like "[ヲ-゚]" Or strInput = "-")で不要な文字種を除外。 ※"[ヲ-゚]“と”-“を指定するとカタカナひらがなの必要そうな文字列を抽出できる。 ”-“を半角カナに含みたくない場合はstrInput = "-"を外す。 その後StrConvで一度文字列を半角カ…

【VBA/Access】Option Compareステートメント

VBA

Accessでは、Option Compareステートメントによって文字列の比較方法が決定される。 モジュールを作成した際には自動でDatabaseモードが付加されるが、 この記述を削除し、何も書かなかった場合の既定値はBinaryモードとして定義されている。 モード 概要 Bi…

【VBA】文字列の大文字小文字を判定する

VBA

自分自身を大文字に変換した後、変換前後を比較すると大文字小文字を判定できる。 VBAでは大文字小文字がイコールではうまく判定されないので、 StrComp("変換文字列1", "変換文字列2", vbBinaryCompare) でバイナリでの比較を行う必要がある。 Option Expli…

【VBA】Round関数で四捨五入ができなかった話

VBA

VBAのRound関数は銀行家丸め(銀行型丸め、銀行丸めともいうらしい)になっているらしい。 ので何も考えないで四捨五入しようと思ったらできなかった。 銀行家丸めとは 銀行型丸めとは、切り捨てるときに一番近い偶数に近づける方法。 単に四捨五入していくよ…

【VBA】First関数・Last関数等についてのメモ

VBA

First(), Last(), DFirst(), DLast() VBAのこれらの関数はORDER BY句や、インデックス、主キーを考慮せず、 「ディスクのレコードを読み込んだ順」の最初と最後を取得する。 なので、下記のようなSQLとは必ず等価にならず、どんな値が返るのかも予想が困難な…

【VBA】VBAのエディタの覚えておくと便利なショートカット

VBA

いつも忘れるので自分用にメモ ショートカット 説明 Ctrl+↑ 前のプロシージャに移動 Ctrl+↓ 次のプロシージャに移動 Ctrl+PageUp 現在のプロシージャの先頭へ移動 Ctrl+PageDown 現在のプロシージャの最後へ移動 Ctrl+Home 現在のモジュールの先頭へ移動 Ctr…

【VBA】リストボックスを選択したり解除したりするメモ

VBA

前提 Access 2010 リストボックスは複数選択可 用意 テーブル フォーム コード リストボックスを全て選択・選択解除 [リストボックスの名前].Selected(数字)はリストボックスの指定項目の選択状態のプロパティ。 Trueにすると選択状態に、Falseにすると非選…

【VBA】開発時に役に立つアドイン/ツール エディタに行番号を表示する

VBA

はじめに 動作確認はExcel2010を使用。 上記の画像のように、VBAのエディタでは画面上部にカーソル位置の行数は表示されるものの、 ソースの行番号が表示されない。この問題を解決する方法を紹介する。 用意するもの AddLineNumbers VB6/VBA 上記サイトにア…

【VBA】条件付きコンパイル定数を使って、Officeが32ビット版か、64ビット版かを判定する

VBA

Officeが32ビット版か、64ビット版かによってVBAのコードにも変わってくる部分があるため、判定したい場面がある。 VBAにはその仕組みがあるので解説。 条件付きコンパイルとは 設定値等に応じて、実行される部分を変えることができる記述方法。 VBAでは、実…

【VBA】配列であるかを判定し、配列であれば要素数を返すプロシージャ

VBA

VBAはもっと配列回りが楽にいじれるようになってもいいとおもう。 配列判定のついでに要素数を取得するプロシージャ。空の配列を参照するとエラーになってしまうので、扱いやすくするために実装。 しょぼい。 Option Explicit '/** ' * IsArrayLen ' * 引数…

【VBA】Abs関数

VBA

Abs(number) number:任意の数や数式、変数 引数に与えられた値の絶対値を返す。 Sub test() Debug.Print Abs(-1) Debug.Print Abs(1) Debug.Print Abs(-256) + Abs(256) End Sub

【VBA/Access】ファイル内のクエリをテキストファイルに一括出力する

VBA

ファイル内のクエリを一括で吐き出して検索かけたいことがあったので1ファイルに吐き出すようにするプロシージャを作成。 '/** ' * outputQuery ' * クエリをテキストファイルに出力 ' * @param Optional i_outputPath (出力先を指定する場合)ディレクトリパ…

【VBA】debug.print時にファイルに書き出すプロシージャ

VBA

結構な件数のデータを一度にデバッグで吐き出したかったけどイミディエイトウインドウの制限に引っかかって出力しきれなかったのでファイルに書き出したりするやつを用意した。 '/** ' * OutputLog ' * デバッグログをファイルに出力する ' * @param varData…

【VBA】コンストラクタとデストラクタ

VBA

VBAにもクラスのコンストラクタとデストラクタがあるらしく、利用方法をまとめた。 コンストラクタ Public Sub Class_Initialize() 'ここに処理を書く End Sub デストラクタ Public Sub Class_Terminate() 'ここに処理を書く End Sub ただし、引数を設定する…

【VBA】Environ関数

VBA

Environ(Expression)実行されたPCの環境変数を取得する関数。 実行時に指定した環境変数が存在しない場合は長さ0の文字列("")を返す。expression:環境変数を指定する文字列か、環境変数の番号を指定する。 主に利用されやすい環境変数として以下のものがある…

【VBA】Format関数

VBA

Format(expression[,format[,firstdayofweek[,firstweekofyear]]])expression:フォーマットを設定するデータを設定 format :(省略可能)任意のフォーマットを指定 '-------------------------------------------------------------- '下記の引数については使…