Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
間違いの指摘をお願いします
投稿日時: 17/08/11 15:09:51
投稿者: o_taroh

下記プロシジャーでDoループの中 ActiveCell.FormulaR1C1 = "=成績!R[" & rr & "]C[" & cc & "]" にくると「アプリケーション定義またはオブジェクト定義エラーです。」のメッセージが出ます、
[" & rr & "]C[" & cc & "]"の部分でrr,cc は -16,31ですので実際に -16,31 と入れて実行すると問題なく実行します,どこが誤りかわからず困惑しています、よろしくお願いします。
ちなみに re は 14 です
 
Sub StartHyou()
    Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer
    Dim re As Integer, rr As String, cc As String
     
    Sheets("スタート").Select
     
    re = Sheets("成績").Range("AJ6").End(xlDown).Row
    r1 = 6: r2 = 22
    c1 = 36: c2 = 5
    rr = "-" & Trim(Str$(r1 - r2))
    cc = Trim(Str$(c1 - c2))
    Do
        Cells(r2, c2).Select
        ActiveCell.FormulaR1C1 = "=成績!R[" & rr & "]C[" & cc & "]"
        c1 = c1 + 1: c2 = c2 + 1
    Loop While c1 <= 44
    r1 = r1 + 2
    r2 = r2 + 1
     
End Sub

回答
投稿日時: 17/08/11 15:58:32
投稿者: 半平太

>rr,cc は -16,31ですので
 
実際にやってみると rr は "--16" ですけど?
 
なんか勘違いがありませんか?
 
たとえば、このハイフンが要らないとか。
     ↓
   rr = "-" & Trim(Str$(r1 - r2))

回答
投稿日時: 17/08/11 16:48:18
投稿者: WinArrow
投稿者のウェブサイトに移動

>rr As String, cc As String
なぜ、String型で定義するのですか?
数値型で定義して
 
rr = r1 - r2
でよいのでは?
 
文字列に変換することTrimも必要がないです。

回答
投稿日時: 17/08/11 16:51:19
投稿者: WinArrow
投稿者のウェブサイトに移動

追加レス
 
致命的というわけではないが、
数値型は、Integer よりも Long の方が無難です。

回答
投稿日時: 17/08/11 16:58:38
投稿者: WinArrow
投稿者のウェブサイトに移動

気になるところ・・・・
>ちなみに re は 14 です
特別に「ちなみに・・・・」と説明しているからには、
なにか意味があると思いますが????
  
「re」という変数は、コードの中では使われていませんよね?
 

回答
投稿日時: 17/08/11 17:38:59
投稿者: simple

そもそもを申し上げれば、
(1)これは繰り返しでひとつずつセルに書き込む必要はなく、
   セル範囲にまとめて書き込むほうがよいはずです。
(2)同一の式にするためにRC形式を選んでいるようですが、
   まとめて書き込む場合は、A1形式でもOKです。

   Sheets("スタート").Range("E22").Resize(1, 44 - 36 + 1).Formula = "=成績!AJ6"
のように。
 

投稿日時: 17/08/11 17:40:57
投稿者: o_taroh

半平太さんの指定どうりでした、 r1-r2 が正で出るものとばかりに勘違いしてました。
解決しました、半平太さんWinArrowさんありがとうございました。