Learning Note

できるようになったことを記録しています

Excel

VBEでシンタックスハイライトを設定する

熟練プログラマの作業画面を除くと、よく黒基調な画面で作業しているのを見かけます。 今までは「昔風な画面が好きなのかな?」程度に留めていましたが、自身でプログラムを書く時間も増え、その配色の意味を身をもって痛感しました。VBEでも背景色や文字色…

セルの最終行を調べる

今更な感じの基本的なテクニックだが、ほかの言語を触るとすぐに忘れてしまうので記事にしておく。 Dim MaxRow As Long MaxRow = Cells(Rows.Count, 1).End(xlUp).Row "Rows.Count"はsheetの最終行 xlsxなら1048576、xlsファイルなら65536.Endプロパティは …

ファイルをコピーしてリネームする

FileCopyステートメントでファイルをコピーする関数。コピー先の同名ファイルが存在する場合は上書きされる。

連想配列を用いて配列内重複チェック

Dictionaryオブジェクトで連想配列を作成。重複データを登録できない特性を生かして重複データが存在しないかチェックする。

配列の文字列を半角に変換して返す

配列を引数として渡し、全角の文字を半角に変換して返す関数。カタカナが入っているようなデータは要注意。

存在しないフォルダでも作成する

SHCreateDirectoryExというAPIを使用して存在しないフォルダでも1回の処理で作成する。

配列を1行ずつテキストファイルへ出力する

配列をテキストファイルへ1行ずつ出力するサブプロシージャ使用例 Sub Main() Dim tmp(2) As String tmp(0) = "one" tmp(1) = "two" tmp(2) = "three" Call OutputText(tmp) End Sub

ログファイルを出力する

ログファイルを出力するサブプロシージャ 処理日時+引数の"category"で処理種別+"msg"で処理内容を出力する。 使用例 Sub Main() Dim folderPath As String folderPath = ThisWorkbook.Path Dim i As Long For i = 1 To 5 Call M_Logging.WriteLog(folderP…

シート名を配列に格納する

シート名を配列に格納する関数 使用例 Sub main() Dim WB as Workbook Set WB = ActiveWorkBook Dim mySheetName As Variant mySheetName = CheckSheetName(WB) End Sub

新しいブックを作成する

ブックを作成するにはAddメソッドを使用する。 WorkBooks.Add 使用例 Sub Main() Dim WB As WorkBook Set WB = WorkBooks.Add WB.SaveAs "C:\bin\新しいブック.xlsx" End Sub

ブックを保存する

ブックを保存するにはSaveメソッドを使用する。 ActiveWorkBook.Save 他にも、以下のような書き方ができる。 SaveAs 名前を付けて保存 SaveCopyAs コピーを保存 使用例 Sub Main() ActiveWorkbook.SaveAs Filename:="c:\bin\名前を付けて保存.xlsm" ActiveWo…

ブックを閉じる

ブックを閉じるにはCloseメソッドを使用します。 Workbooks("ブック名.xlsx").Close また、引数により保存して閉じる、保存しないで閉じる、名前を付けて保存を選択することができます。 引数 定数 内容 SaveChanges True ブックの変更を保存して閉じます。 …

配列を多次元配列に変換する

配列データを多次元配列に変換するための関数。多次元配列は途中で列数を増やすことができないため、事前に設定された列数より取り込む要素が多い場合は処理を終了するようにした。 使用例 Sub Main() Dim lineTxt As Variant lineTxt = ImportTxt("C:\bin\t…

配列から不要文字を削除して返す

関数を書くほどでもないかもしれないが、使用頻度はそこそこあるので作ってみた。 使用例 Sub Main() Dim testAry() As Variant: ReDim testAry(2) testAry(0) = "1,1" testAry(1) = "2,2" testAry(2) = "3,3" testAry = RemoveChar(testAry, ",") End Sub …

指定したテキストデータを一行ずつ配列に取り込む

指定したテキストデータを一行ずつ配列データに取り込む関数。 使用例 Sub Main() Dim lineTxt As Variant lineTxt = ImportTxt("C:\bin\test.txt") End Sub

指定したフォルダ以下の指定した種別ファイルパスを取得する

指定したフォルダの下位フォルダも再帰処理で検索対象とする関数。ポイントはStatic変数。再帰処理でDimを使うと消えてしまうので。 使用例 Sub Main() Dim filePath As Variant filePath = RecursionFile("C:\bin", "*.xlsx") End Sub

指定したフォルダから指定した種別のファイル名を取得する

Dir関数で指定フォルダの指定した種別のファイル名を取得する関数。配列の最後にブランクのデータが出来てしまうため、Loop終わりでもReDimしている。もっとスマートなやり方がないものか。 使用例 Sub Main() Dim fileName As Variant fileName = SearchFil…

別ブックからシートをコピーする

シートをコピーするにはCopyメソッドを使用します。例えば、同じブック内の"コピー元"という名前のシートを"Sheet3"という名前のシートの後ろにコピーする場合 Sheets("コピー元").Copy After:=Sheets("Sheet3") 別ブックに存在する"コピー元"シートをコピー…

ダイアログボックスで指定したExcelBookを開く

ExcelBookを開くにはWorkbooks.Openを使用する。書式 Workbooks.Open Filename:=開くBookのパス, ReadOnly:=False 開くBookのパスは直接記述しても良いが、先日の書いた"ダイアログボックスで指定ファイルのパスを取得する関数"を使うと汎用性が高まる。 kon…

ダイアログボックスで指定したフォルダのパスを返す

ダイアログボックスで指定したフォルダのパスを返す関数。 使用例 Sub Main() Dim folderPath As String folderPath = DecideFolder() If folderPath = "" Then Exit Sub End Sub

ダイアログボックスで指定したファイルのパスを返す

ダイアログボックスで指定したファイルの絶対パスを取得して返す関数。 使用例 Sub Main() Dim filePath As String filePath = DecideFile() If filePath = "" Then Exit Sub End Sub