[[20200717120548]] 『【最終列の取得】実行結果が違うのですがコードの』(尚) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『【最終列の取得】実行結果が違うのですがコードのどこに原因があるのか分かりません』(尚)

いつもお世話になっております。
F2から→↓方向に数式入れたいのです。
(F2から→は1行目の最終列がある列まで)、↓はC列の最終行まで)

 Dim r As Range
Set r = Sheets(1).Range("A1").End(xlToRight).Columns.

Sheets(1).Range("F2:r" & Range("C" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "数式"

     End Sub

現在、1行目はS列(19列)目までタイトルが入っており、C列は370行目まで値があります。

上記記述で数式が入りましたが、F2〜R370に入り、S列はなにも入力されません。

原因と対策を教えていただけますでしょうか。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


Sheets(1).Rangeを明示していないRange指定があるので、先頭シート以外がアクティブなときに誤動作しているのでは?
(???) 2020/07/17(金) 13:13

それとも、ご提示のコードだとR列までしかセットしていないからS列が変化しないのは当たり前なので、S列を対象とした別のコードがあるのかと思いましたが、他にはコード書いていないとか?
(???) 2020/07/17(金) 13:15

あ、判りました。

"F2:r" って書くと、rはR列の事ですが、変数rを使いたかったのですね。
だったら、"F2:" & r.Address とかにしないとですよ。
(???) 2020/07/17(金) 13:20


原因は大きく分けて2つあります。

1.1行目と2行目
1行目でRange型で宣言した変数にColumnで取得する値を代入しようとしている
これはエラーになるはずです。

2.3行目
Range("C" & Rows.Count).End(xlUp).Row で(アクティブシート(※必ずしもSheets(1)とは同一ではない)の)C列最終行の値を取得し、
仮にそれが「370」だった場合

 Sheets(1).Range("F2:r370")

となり、Sheets(1)のF2:R370に"数式"を入力する式になっています。式は間違っていません。
(苫) 2020/07/17(金) 13:22


根本的原因は、無理に1行に収めようとして、コードの見通しが悪くなったせいでしょうね。 Range型の変数の使い方も適切ではないし。

整形してみた例なぞ。最大列をA列から調べているのに、行数はC列で調べている事に違和感がありますが…。

 Sub test()
    Dim iC As Long
    Dim iR As Long

    With Sheets(1)
        iC = .Range("A1").End(xlToRight).Column
        iR = .Range("C" & .Rows.Count).End(xlUp).Row
        .Range("F2", .Cells(iR, iC)).FormulaR1C1 = "数式"
    End With
 End Sub
(???) 2020/07/17(金) 13:31

みなさま
ご教示ありがとうございます!
おかげ様で解決できました!
基礎的なところの勉強をしたいと思います・・
(尚) 2020/07/17(金) 13:44

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.