質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1032閲覧

【vba】変数に別ファイルから取得した値を格納しようとするとコンパイルエラーが発生する

chi_tana

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/09/16 05:53

編集2017/09/16 06:17

###前提・実現したいこと
マクロの処理でtsvファイルを読み込み、特定列の最大値を取得する処理を書いています。
取得した値を変数に格納して後続処理に利用したいと考えています。

###発生している問題・エラーメッセージ
変数(tmp)に取得した値を格納する処理を実装すると「コンパイルエラー オブジェクトが必要です」のエラーが表示されます。
値そのものはMsgBoxで確認すると正しく取得しています。

###該当のソースコード

vba

1Private Function readFile() As Boolean 2 3 Dim wb As Workbook 4 Dim fileName As String 5 Dim tmp As Variant 6 Dim tmpRng As Range 7 8 fileName = "data.tsv" 9 10 ' ファイルを読み込む 11 Set wb = Workbooks.Open(ActiveWorkbook.Path & "\" & fileName) 12 Set tmpRng = wb.Sheets(1).Range(Range("F2"), Range("F10")) 13 14 '「コンパイルエラー オブジェクトが必要です」と表示されます。 15 'Set tmp = WorksheetFunction.Max(tmpRng) 16 '最大値がメッセージボックスに表示されます。 17 MsgBox WorksheetFunction.Max(tmpRng) 18 19

###試したこと
変数tmpの型をdate型やObject型にも変更しましたが、結果は変わりませんでした。
Set tmp = wb.Sheets(1).Range("F4")
などで値を取得できることも確認しました。

###補足情報(言語/FW/ツール等のバージョンなど)
Office Excel 2007

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VBA

1Set tmpRng = wb.Worksheets(1).Columns(1)

などのようにしてtmpRngにRangeオブジェクトをセットしないと「オブジェクトが必要です」というエラーが出ます。

VBA

1Set tmp = WorksheetFunction.Max(tmpRng)

の処理の前に上記のコードを入れて実行してみて下さい。

投稿2017/09/16 06:00

yamashita_yuich

総合スコア316

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chi_tana

2017/09/16 06:19 編集

回答ありがとうございます。 記載していたコードに抜けがありました。↓を追記しました。 Set tmpRng = wb.Sheets(1).Range(Range("F2"), Range("F10")) Set tmpRng = wb.Worksheets(1).Columns(1)も試してみましたが、同じ現象が起きました。
yamashita_yuich

2017/09/16 06:26

set tmp = WorksheetFunction.Max(tmpRng) ↓ tmp = WorksheetFunction.Max(tmpRng) これに変更すればできます。 WorksheetFunction.MaxはDouble型が返却されるのでSetは不要です。
chi_tana

2017/09/16 06:52 編集

実行できました、ありがとうございます。 実はmm:ss.0形式の最大値を取得したかったのですが、下記で実現することができました。 tmp = Format(WorksheetFunction.Max(tmpRng), "mm:ss.0")
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問