カテゴリー
Microsoft

【Excel VBA】2 次元配列の各要素とインデックスを取り出すスニペットコード

ポイント

  • 配列の要素数を意識しないで、かつ、インデックスを取得してループする。
  • LBound でインデックスの最小値を、UBound でインデックスの最大値を取得する。
  • LBound、UBound 関数で n 次元目のインデックスを取得するには 2 つ目の引数に n を指定する。
    • 1 次元目: LBound(values, 1) UBound(values, 1)
    • 2 次元目: LBound(values, 2) UBound(values, 2)
カテゴリー
Microsoft

【Excel VBA】指定したブックのシートの列の値を 1 からの連番に置換した配列を生成するクラスコード

ポイント

  • 対象範囲セルが 1 セルのみの場合、Range.Value は配列にならない。よってこの場合だけ別に処理をする。
カテゴリー
Microsoft

【Excel VBA】2次元配列から1次元目の要素 (配列) を取り出すことはできません><

ポイント

  • 2次元配列から1次元目の要素 (配列) を取り出すことはできない。
  • Variant を使用して、擬似的なジャグ配列を作成すれば可能
  • 多次元配列とジャグ配列は異なり、同様に扱うことができない。
  • 例えば、Range にジャグ配列を代入しても、シートにジャグ配列の要素は反映されない。

具体例

カテゴリー
Microsoft

【Excel VBA】辞書オブジェクト、Scripting.Dictionary、ディクショナリ使用時の注意点!

Excel 2013 VBA でのディクショナリ注意点!!

  • ディクショナリのキー: 整数または文字列の使用が一般的だが、配列以外の任意の形式をとれる。
  • ディクショナリの値: クラスをはじめ、なんでも入る、はず。
  • イミディエイト ウィンドウにディクショナリオブジェクトをウォッチ表示したとき、確認できるのはキーのみ。
  • イミディエイト ウィンドウでディクショナリのアイテムを一覧表示したいときは、ウォッチ式として dictionary.items を追加すること。
  • ループでディクショナリのアイテムを取り出すには、dictionary.items を回す こと。dictionary を回そうとすると次のエラーとなった。
    [実行時エラー ‘424’: オブジェクトが必要です。]
  • 同様に、ループでディクショナリのキーを取り出すには dictionary.keys を回せばよい、はず(未確認)。
  • Add 関数の使い方。※1 の場合はキーが重複していてもエラーとならない。上書きする。
    • dictionary.Add "key", "item"
    • dictionary.Add key:="key, Item:="item"
    • Call dictionary.Add("key", "item")
    • Call dictionary.Add(key:="key", Item:="item")
    • dictionary("key") = "item" ※1
    • Set dictionary("key") = itemObject ※1
カテゴリー
Microsoft

【Excel VBA】CSV ファイルを 2 次元配列として得るクラスのコード♪

コードのポイント

  • CSV データは一時作業用のエクセルファイルを新規作成し、そこにインポートする。このエクセルは最後に保存しないで削除する。
  • QueryTables でインポートしたデータ範囲には、Name をあらかじめ指定できる。これを Range 関数で指定してデータを取得する。
カテゴリー
Microsoft

【Excel VBA】データの入ったことのある最大行数・最大列数を取得するコード

ポイント

  • Worksheet.UsedRange プロパティを利用して最大行数・最大限を取得する。
  • 書式やデータが入っていなくても過去に編集のあったセルも対象となる。
  • 過去に編集があったセルは [削除] すれば対象から外れる。
カテゴリー
Microsoft

【Excel VBA】【2】CSV ファイルを指定ブックのシートにテキスト形式でインポートするクラスのコード♪

ポイント

  • CSV 形式のファイル、つまりカンマで区切られたデータのファイルを読み込むことができる。ファイル拡張子が .csv でなくても読み込める。
  • 必ずテキスト形式でインポートされるように TextFileColumnDataTypes に指定する配列の作り方を工夫した。
  • コネクションは生成されたものだけ削除するように改善した。
  • Name オブジェクトの削除方法を改善し、シート名に影響を受けないようにした。
  • 他のエクセルなどからも呼び出せるようにブック名を指名するようにした。
カテゴリー
Microsoft

【Excel VBA】すべてのシートのウインドウ枠の固定を解除するコード

シートをすべて選択してウインドウ枠の固定を解除操作をしてみましたけれども、現在のシートのみしか解除されておりませんでした。。。

残りの何十何百のシート、ひとつひとつ丁寧に解除、、、辛いです><。。。

ポイント

  • Worksheets オブジェクトにすべてのシート情報が入っているので、これをループすれば各シートを取り出すことができる。
  • ウインドウ枠の固定は、ActiveWindow.FreezePanes で設定する。
  • ActiveWindow.FreezePanes は Active なシートに設定される。
カテゴリー
Microsoft

【Excel VBA】指定したシートの範囲のセルの先頭および末尾のスペースを削除するクラスのコード♪

ポイント

  • セルの先頭および末尾のスペース削除は、Trim 関数を使う。
  • クラスは、シートへの反映は行わない。トリム済みの 2 次元 Variant 配列を返すのみとした。
  • シートへの反映は、呼び出し元で行う。
カテゴリー
Microsoft

【Excel VBA】西暦数字から和暦数字へと変換するコード

ポイント

  • Format 関数を使用する。
  • Format(y & "/1/1", "e")y & "/1/1": y に 4 桁の西暦年が入って年月日となる。"e": 和暦の年を指定するフォーマット
  • 日付けを # で囲いたかったが、エラーとなるため ” で囲った。
  • 月日は元号の境目を意識しないで済むように 1 月 1 日とした。

VBA コード

Public Sub Test()
    Dim y As String: y = "2016"
    Debug.Print "和暦年数字: " & Format(y & "/1/1", "e")
End Sub

結果

和暦年数字: 28