【VBA】列の一番下に値を追加する方法|計算結果を別ファイルに展開する

目次

はじめに

今回は、VBAを使って列の一番下に値を追加する方法について勉強しました。
使用環境は以下のとおりです。

  • 使用OS: Windows 10 Pro
  • バージョン: 20H2

背景

VBAプログラムで、読み込んだExcelファイルのE列のデータの平均値を計算し、
その平均値を別のExcelファイルの指定列(ここではC列)の一番下に追加したいと考えました。

実際に行った処理

以下のコードで実現できました。

Workbooks(strFileName).Activate
Range("E25").Formula = "=AVERAGE(E27:E1000)" '※.End(xlDown)を使いたかったが未実装
Range("E25").Copy
ThisWorkbook.Activate
n = Cells(Rows.Count, "C").End(xlUp).Row + 1
Range("C" & n).Select
ActiveCell.PasteSpecial Paste:=xlPasteValues

コードの解説

1行目:
計算対象となるExcelファイルをアクティブにしています。
strFileNameには、事前に読み込んだExcelファイル名が格納されています。

2行目:
E列の一部(E27からE1000)を対象に、AVERAGE関数を設定しています。
※本来は、E27からデータの最終行まで動的に指定したかったのですが、End(xlDown)を活用する方法は今回未実装です。

3行目:
平均値を設定したセル(E25)をコピーしています。

4行目:
展開先のExcelファイル(このマクロが書かれているファイル)に切り替えています。

5行目:
C列の最終データ行を取得し、**その1行下(次の空白セル)**をnに代入しています。
この書き方は、列の末尾を自動検出してデータを追加するときの定番の文法です。

6〜7行目:
C列のn行目を選択し、コピーしておいた平均値を値貼り付け(PasteSpecial)で貼り付けています。
これにより、数式ではなく計算結果(値)だけ
を正しく貼り付けることができます。

本来やりたかったことについて

  • 本当は、E27からE列の最終データ行までを対象に平均値を出したかったのですが、
    .End(xlDown)を組み合わせる方法は今回は実現できませんでした。
  • この点についても今後さらに勉強し、より柔軟なコードが書けるようにしていきたいと思います。

まとめ

  • 取得したいファイルを.Activateして、必要な計算(今回はAVERAGE)を行う。
  • .Copyで結果を保持し、展開したいファイルに.Activateして移動。
  • Cells(Rows.Count, "列").End(xlUp).Row + 1列の末尾の次の行を探して貼り付ける。
  • 貼り付ける際は、PasteSpecial Paste:=xlPasteValuesを使って値のみ貼り付ける

今回の作業を通じて、データを動的に取得して展開する基本的な流れを学ぶことができました。
引き続き、列の最終行を柔軟に扱えるテクニックも習得していきたいと考えています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次