ここでは、Microsoft Wordで見出しと本文のフォントを変更する方法を説明します。私はMicrosoft Word for Mac Version 16.70を使用しました。
続きを読む Microsoft Word: 見出し(Headings) と 本文(Body) のフォントを変更する方法「VBA」タグアーカイブ
Excel: 全シートのカーソルを左上に合わせる
他人が使った Excel を開いたとき、 「なんで左上にカーソルを揃えてから閉じないんだ」 と思ったことはありませんか? 逆に自分がそう思われないように、ボタン一つで簡単にすべてのシートのカーソルを左上に揃え、すべてのシートのスクロールバーを左上に揃え、一番最初のシートを選択する方法を紹介します。
続きを読む Excel: 全シートのカーソルを左上に合わせるExcel: VBAからデータベースに接続する 準備
Excel VBA から データベースに接続する方法です。 (Excel から VBA を使わずにデータを取得・表示する方法もあります。 例: Windows, Excel: データベースから直接値を取得して表示する)
続きを読む Excel: VBAからデータベースに接続する 準備VBA: ファイルの一覧を再帰的に出力する
よく使うコードのメモです。
Excel などで、あるフォルダ以下のファイル一覧を出力したいときに使うコードです。 言語は VBA です。
VBA は オブジェクト指向的 に書くこともできるのですが、 急遽必要だったので、「とりあえず動けばいい!」というスタイルで作りました。
プログラムの流れ
- シート上のボタンをクリックします。
- フォルダ選択ダイアログを表示します。
- 選択されたフォルダ以下のファイルを再帰的にリストにします。
- リストになったファイル一覧を、フォーム(またはシート)に出力します。
やること
- モジュールを作成して、次の関数を作成します。
- ファイル一覧を取得する
- フォルダ選択ダイアログを処理する
- 結果を出力するダイアログを作る。
- シートにボタンを作ってクリックしたときの処理を追加する。
VBA: ファイル名に関連した文字列操作
過去に書いていた VBA のファイル名に関連した文字列操作の記事をまとめました。
ファイルパスからディレクトリ名を取得する
1 2 3 4 5 |
''' ファイル名から拡張子を取り除く ''' ファイル名からディレクトリ名を取得する。 Private Function GetDirectoryFromFileName(ByVal Filename$) GetDirectoryFromFileName = Left(Filename, InStrRev(Filename, "")) End Function |
ファイルパスから一番右のバックスラッシュの位置を探して、ファイルパスのそれより左の部分を抽出します。 バックスラッシュが見つからなかった場合(ディレクトリがファイルパスに含まれない場合)は、空文字列が返ります。
ファイル名から拡張子を取り除く
1 2 3 4 5 6 |
''' ファイル名から拡張子を取り除く Private Function RemoveExtension(ByVal Filename As String) As String Dim dotIndex& dotIndex = InStrRev(Filename, ".") RemoveExtension = Left(Filename, dotIndex - 1) End Function |
注意
InStrRev
が返す文字位置は 1 から始まります。 (配列インデックスのように 0 から始まるわけではありません。)
ファイル名に “.” が含まれない場合は Left
の第2引数に負の数が渡るため、例外が発生します。 これを解消するには次のようにします。
1 2 3 4 5 6 7 8 9 |
''' ファイル名から拡張子を取り除く Private Function RemoveExtension(ByVal Filename As String) As String Dim dotIndex& dotIndex = InStrRev(Filename, ".") If dotIndex < 1 Then dotIndex = dotIndex + 1 End If RemoveExtension = Left(Filename, dotIndex - 1) End Function |
Right
を使って拡張子を取得することもできます。
ファイル名から拡張子を取得する
ここでは、あるところで使われていたコードを見てみます。
1 2 3 4 5 6 7 8 9 10 |
Private Function GetFileExtention(Fnm As String) As String 'ファイルの拡張子を文字列操作で求める。 'すべて小文字に変換する。 Dim st$ st = Fnm If InStr(1, st, "") >= 1 Then st = Mid$(st, InStrRev(st, "") + 1) If InStr(1, st, ".") >= 1 Then st = Mid$(st, InStrRev(st, ".") + 1) Else st = "" GetFileExtention = StrConv(st, vbLowerCase) End Function |
与えられた文字列にバックスラッシュがあればそれより後ろの文字列にして、 その後ピリオドがあればそれより後ろを抜き出しています。 ピリオドがなければ空文字列が返ります。
関係する関数
- InStrRev(string1, string2[, start[, compare]])
ある文字列 (string1) の中から指定された文字列 (string2) を最後の文字位置から検索を開始し、最初に見つかった文字位置を返す文字列処理関数です。 引数 start を省略すると -1 が使用され、最後の文字位置から検索を開始します。 compare は比較するモード(テキスト/バイナリ)を指定します。省略時はバイナリモードになります。
検索文字列が見つからなければ 0 が返ります。
- Left(ByVal str As String, ByVal Length As Integer)
与えられた文字列の左端から指定された長さの文字列を抽出します。 Length が 0 より小さいと例外が発生します。
- Mid(string, start[, length])
与えられた文字列の部分文字列を返します。 start には先頭の文字を 1 として文字位置を指定します。
- Right(ByVal str As String, ByVal Length As Integer)
与えられた文字列の右端から指定された長さの文字列を抽出します。 Length が 0 より小さいと例外が発生します。