人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Outlook VBAからExcelブックを開き、その中の特定の列の最終(データが入っている)セルを調べる方法は?

Outlook VBA(Outlook 2010)からExcelブックを開くところまではいきました。
For文を回す回数を決める(空白ではやらない…エラーを回避する)ために特定列の最終セルを調べたいと思います。
ExcelであればRange("A1").End(xlDown).Row(セルA1から順番に下方向にデータが入っている場合※空白はないという前提)で対象の行がわかると思いますが、OutlookからExcelを起動して操作を行おうとすると同様のことが実現できません。
Do…Whileの間にIf文を組み込むということはできるのですが、プログラムコードとしてまったくもってきれいではありません。
どうにかスッキリとしたコードにできないのでしょうか?

●質問者: keijun5145
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

こんな感じで行けると思います。

 Set app = CreateObject("Excel.Application")  ' Excel.Application
 Set book = app.Workbooks.Open(...)  ' Workbook
  ' きっと、このあたりまではできているはず
 Set sheet = book.Sheets(1)  ' Worksheet
 last_row = sheet.Range("A1").End(xlDown).Row  ' Worksheet を指定して操作

Excal VBA で、Range(...) って使うときには、ActiveSheet.Range(...) と
シートの指定を省略している、と考えると良いでしょう。


a-kuma3さんのコメント
ちなみに、処理の最終行を求めるときには、ぼくはこっちのをよく使います。 >|vb| last_row = Cells(Rows.Count, 1).End(xlUp).Row ' Worksheet を指定するなら last_row = sheet.Cells(sheet.Rows.Count, 1).End(xlUp).Row ||< 指定列の途中に空白のセルがあっても大丈夫なので。

keijun5145さんのコメント
全く同じ(workbooks.openの引数だけ実際のパスを記入したもの)を動作させてみました。 ※確認のために最終行に msgbox last_rowを追加しました。 すると、上部のコードの4行目('きっと…の文は1行とみなさない)で実行時エラー1004が発生します。 このエラーの原因は様々ありますが、どのようなものが原因でしょう?

a-kuma3さんのコメント
もしかすると、xlDown が定義されていないかも。 以下のようにするとどうなります? >|vb| last_row = sheet.Range("A1").End(-4121).Row ' xlDown → -4121 ||< https://msdn.microsoft.com/en-us/library/office/ff820880.aspx

keijun5145さんのコメント
-4121を設定することで実現できました。 誠にありがとうございます。 ちなみにですが、public xldownで固定値で-4121と宣言してコード内でxldownを使用するのはできないのでしょうか?

keijun5145さんのコメント
できました!! 解決しましたのでBAに選択させていただきます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ