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

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

ただいまの
回答率

90.48%

  • VBA

    1858questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 594

chi_tana

score 15

前提・実現したいこと

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

発生している問題・エラーメッセージ

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

該当のソースコード

Private Function readFile() As Boolean

    Dim wb As Workbook
    Dim fileName As String
    Dim tmp As Variant
    Dim tmpRng As Range

    fileName = "data.tsv"

    ' ファイルを読み込む
    Set wb = Workbooks.Open(ActiveWorkbook.Path & "\" & fileName)
    Set tmpRng = wb.Sheets(1).Range(Range("F2"), Range("F10"))

    '「コンパイルエラー オブジェクトが必要です」と表示されます。
    'Set tmp = WorksheetFunction.Max(tmpRng)
    '最大値がメッセージボックスに表示されます。
    MsgBox WorksheetFunction.Max(tmpRng)

試したこと

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

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

Office Excel 2007 

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

Set tmp = WorksheetFunction.Max(tmpRng)


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/16 15:19 編集

    回答ありがとうございます。
    記載していたコードに抜けがありました。↓を追記しました。
    Set tmpRng = wb.Sheets(1).Range(Range("F2"), Range("F10"))

    Set tmpRng = wb.Worksheets(1).Columns(1)も試してみましたが、同じ現象が起きました。

    キャンセル

  • 2017/09/16 15:26

    set tmp = WorksheetFunction.Max(tmpRng)

    tmp = WorksheetFunction.Max(tmpRng)

    これに変更すればできます。
    WorksheetFunction.MaxはDouble型が返却されるのでSetは不要です。

    キャンセル

  • 2017/09/16 15:40 編集

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

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    テキストデータをVBAで週ごとに分けたい

    2015/12/01,* cbdl,345 2015/12/02,Ubcmf Gspn DTW,2 2015/12/03,* gspou,375 ・ ・ ・ こんなテキ

  • 解決済

    エクセルのVBAの動作の高速化について

    エクセルのVBAの高速化を行いたいと思い質問させていただきます。 現在、きまった形のデータを作成するために、コピーandペースト作業時のミスをなくすためエクセルとVBAを使い

  • 受付中

    VBAのexec()について

    外部batファイルをexec()で実行しました。 ですがその際、StdOutには4096バイトしか出力出来ないそうで、結果が途中までしか出力出来ません。 batファイルを複数に分け

  • 解決済

    VBA高速化について

    20個のエクセルファイルを読み込み、特定のシートにあるテーブルから特定の値を探し出し、その右横にあるセルの値を取り出します。 集計用のエクセルのテーブルでも、同じ特定の値をテーブル

  • 解決済

    VBA Cells(1,1)で指定したセルをRange("A1")に変換し、その範囲をCountAし...

    お疲れ様です。 下記コードをご覧いただけますでしょうか。 Sub HogeMethd()   Dim S11 As WorkSheet sheet11.Activa

  • 解決済

    VBAの足し算について

    エクセルAからセルに入力されている数字(通貨型)を抜き出してきて 足し算したいので、以下のようにしたところ、型が一致しません とエラーが出ました。 Dim q(3) As Va

  • 受付中

    複数ブック、複数シートからの値コピー

     前提・実現したいこと [実現したいこと] VBAにて集計表を作成しております。 勉強をし始め、数日です。 複数ブックの複数シートから値のみコピーしたいと思っています。 [前提

  • 解決済

    VBA 数式の参照先のセルのアドレス取得方法

    VBA 数式の参照先のセルのアドレス取得方法 シート3のB5,B6,B7セルには数字が入っています C5,C6,C7セルには手動で入力した単語が入っています。変更等で変わる場合

同じタグがついた質問を見る

  • VBA

    1858questions

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

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