Excelファイルの最終行の下にデータを追加したいケースは多々あります。
今回は、Outlook vbaから外部のExcelファイルの最終行を取得するマクロです。
できるようになること
Outlook vbaから、外部Excelの最終行を取得できるようになります。
結論
Outlookマクロの場合
Cells(oApp.Rows.count, 1).End(-4162)
↑と書きます。
詳しい解説は後述します。
ちなみに、Excelマクロであれば
Cells(Rows.Count, 1).End(xlUp)
で取得できます。
やりたいこと
以下のような条件のときに役立ちます。
- Outlookは常に立ち上げている
- Excelは常に立ち上げているわけではない
- 立ち上がっているOutlookから、指定のExcelのデータへ1行追記したい
- この時、Excelを立ち上げないで追記したい
たかだか1行追記するためだけに、Excelを手作業で開きたくないですよね。
具体的に、
- 指定されたExcelの最終行に
- 測定した体温データを記録する
というユースケースでスクリプトを書いてみましょう。
コード全体
Sub InputTemperature()
Dim temperature As String
temperature = InputBox("体温は?")
Const EXCEL_PATH = "C:\temp\test.xlsx"
Dim oApp As Object 'Excel アプリを起動しておく箱
Set oApp = CreateObject("Excel.Application") 'エクセルのアプリケーションを作る
oApp.Visible = False '裏側で起動するようにする
oApp.UserControl = True 'ユーザー操作可能にするおまじない
'xlsxファイルを開く
oApp.Workbooks.Open (EXCEL_PATH)
Dim LASTROW As Long
' 最終行の取得
LASTROW = oApp.Cells(oApp.Rows.count, 1).End(-4162).Row
oApp.Cells(LASTROW + 1, 1) = Date
oApp.Cells(LASTROW + 1, 2) = temperature
oApp.Quit
End Sub
これで、最終行の次の行の1列目に日付、2列目に体温を入力することができます。
Appendix
お好みでSaveを入れてください。
私の環境ではOneDriveで自動保存が働いているので、特にSaveしなくてもOKです。
まとめ
OutlookからExcelファイルへデータを追記するマクロ(最終行取得)を解説しました。
応用すれば、Excelのデータを自由自在にOutlookから操ることができます。
コメント