カテゴリー
Microsoft

【Excel VBA】ワークシートの入力内容をすべて削除してリセットするコード♪

ポイント

  • Range.Clear メソッドは次のメソッドの内容を含む。
    • Range.ClearComments メソッド → コメント
    • Range.ClearNotes メソッド → コメント
    • Range.ClearContents メソッド → 値と数式
    • Range.ClearFormats メソッド → 書式 (色や罫線、条件付き書式など)
    • Range.ClearOutline メソッド → ハイパーリンク
  • Range.ClearNotes メソッドと Range.ClearContents メソッドの処理は同じで、コメント削除 (詳細な検証はしていない)
  • リセット対象のワークシートをアクティブにする必要はない。
  • Range.Value = "" でもリセットが可能。ただし、Range.ClearContents メソッドならば計算式も更新される一方、Range.Value = "" は対象 Range を参照している計算式が更新されない。そのため、基本的に Range.ClearContents メソッドを使うのがよい。

準備

ワークシート “Sheet1” に次の内容を書き込んだセルを用意する。

  • 文字列
  • 太字の書式付きセル
  • コメント付きセル
  • 罫線つきセル
  • ハイパーリンク付きセル
  • テキストボックス
  • 図形
  • 画像

これらをすべて VBA からまっさらに削除してリセットいたします♪

カテゴリー
Microsoft

【Excel VBA】Range の情報を取得する方法整理!

ポイント

  • フィルタ結果が飛び地(歯抜け、複数のセル領域)となり、その可視部分を Range として取得した場合、複雑な結果が得られる。
  • 飛び地可視部分を取得したコードは Range.SpecialCells(xlCellTypeVisible)
  • 飛び地のセルを Range に含めた場合、それぞれのセル範囲の Range が作られる。
  • 飛び地は Areas プロパティの中に含まれるようになる。
  • Range のプロパティメンバとして Areas があり、Areas のプロパティメンバとして飛び地の Range が含まれる。
  • Areas 内の Range のインデックスは 1 から始まる。
  • 飛び地の Range の数は Areas.Count で取得できる。
  • 飛び地の Range は Range.Areas(n) で取得できる。
  • Union 関数を使用して複数の Range を統合した変数は、フィルタ結果が飛び地の可視部分の Range を取得した時の構造と同じ。

以上のことに気がついたわけですけれども、それを学習できたコードを残しておきますの♪

カテゴリー
Microsoft

【Excel VBA】配列を横方向に、縦方向に、縦横範囲に 1 度の操作で書き込むコード

ポイント

  • Range オブジェクトに配列を代入すればよい。
  • Range のセル数と、配列の要素数は一致させること。
  • 1次元配列 ⇒ 横方向に書き込み。
  • 2次元配列 ⇒ 1次元目が行に、2次元目が列に書き込み。
  • 縦方向に書き込むには、1次元配列を WorksheetFunction.Transpose 関数にかけた結果を Range に代入すればよい。

横、縦、縦横方向に書き込むサンプルコード