最新閲覧日:

「ExcelVBAマクロ500連発」という技術評論社の本(青のカバー)のNo.277に
「式を文字列として表示する」というサンプルマクロがあります。
「ワークシートのセルに入っている数式を、(同じシート内の)別のセルに文字列としてセットする」
ここのコードを参考にして、
「数式を、(同じブック内の別のシートの)セルに文字列としてセットする」コードを考えています。
以下のコードを作りましたが、実行すると最後から2行目の「.Formula」のところで

実行時エラー1004:'Range'メソッドは失敗しました。'_Global'オブジェクト

というエラーが出てきます。なぜでしょうか?
正しいコードの記述を教えて下さい。

(Sheet1のD3セルの計算式をSheet2のD10セルに文字列としてセット)
Option Explicit
Dim 調査セル As Variant
Dim 報告セル As Variant

Sub 式の抽出()
Worksheets("Sheet2").Select
調査セル = Worksheets("Sheet1").Cells(3, 4)
報告セル = "D10"

Range(報告セル).Value = ""
Range(報告セル).Value = "'" + Range(調査セル).Formula
End Sub

A 回答 (1件)

こんなややこしいことをせずとも、たった1行


Sub 式の抽出()
  Sheet2.Range("D10").Value = "'" & Sheet1.Range("D3").Formula
End Sub

って書けばいいですよ。


お書きになったVBAでの間違いは、文字列とオブジェクトを混同しているところにありますね。
これを正しく書き直すとすると、以下のようになります。

Option Explicit

'変数の宣言
Dim 調査セル As Range 'Rangeオブジェクト(セルの内容等にアクセスする為のオブジェクト)
Dim 報告セル As String '文字列

Sub 式の抽出()
 'Sheet2をアクティブにする
 Worksheets("Sheet2").Select
 
 '調査セルにはSheet1のD3のセルを割り当てる。
 '「調査セル」を通じて、このセルの文字列、式、色情報etcを取得できる。
 Set 調査セル = Worksheets("Sheet1").Cells(3, 4)
 
 '「報告セル」という文字列方変数に「D10」という文字列を代入する。
 報告セル = "D10"
 
 'アクティブなワークシート(Sheet2)の「D10」というセルの値に空文字列を代入する。
 Range(報告セル).Value = ""
 
 '調査セルのFormula(式の内容)属性を取得して、その値を代入する。
 Range(報告セル).Value = "'" + 調査セル.Formula
End Sub
    • good
    • 0
この回答へのお礼

いつも回答ありがとうございます。
ARCさんは以前にも答えていただいたことを覚えています。

さっそく試してみると、本当に1行で転記できてしまいました。
驚きました。こんな簡単な式でできることに。
ついでにある起動しているブックから他の起動しているブックへ転記できるかと思って、
Workbooks("転記先ブック").Worksheets("Sheet1").Range("D4").Value="'"&Sheet1.Range("D3").Formula
としてやってみたら、これも成功しました。
できちゃうと「なあんだ」ってことになっちゃいますね。

自分が作ったコードの方ですが、
調査セル=Worksheets("Sheet1").Cells(3,4)
というのは、「オブジェクトを指定している」ということなんですね。
それで、Range(調査セル).Formulaはまちがいだと言うことなんですね。
よくわかりました。

お礼日時:2001/12/08 22:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ