こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA 列の最後の値を代入

たびたびすみません。
指定したセルの、最終列の値を、任意のセルに入れたいのですが、
オブジェクトが必要です、というエラーがでます。

Sub 単価代入()
Dim i As Integer
Application.ScreenUpdating = False
For i = Range("IV2").End(xlToLeft).Column To 1 Step -1
If InStr(Cells(2, i).Value, "単価") > 0 Then
Cells(3, i).Value = Cells(3, i).End(xlToRight).Column.Value
End If
Next i
Application.ScreenUpdating = True
End Sub

Cells(3, i).Value = のあとの指定方法がまずいのかと思いますが。。

どうぞ宜しくお願い致します。

投稿日時 - 2007-02-05 14:48:45

QNo.2725630

困ってます

質問者が選んだベストアンサー

J = Range("IV2").End(xlToLeft).Column
For i = J to 1 Step -1
If InStr(Cells(2, i).Value, "単価") > 0 Then
Cells(3, i).Value = Cells(3, J).Value
End If
Next i

列位置を変数に記録しておけばいいのでは?

投稿日時 - 2007-02-05 15:05:08

お礼

ありがとうございました。
空白があってもだめなんですね。
変数で指定しましたら、うまくいきました。

もう1つ、ずうずうしいのですが、
Cells(3, i).Value = Cells(3, J).Value
を、Cells(4,i).Value 以下にも摘要するためには、
相対参照式でセルを指定できますでしょうか?

どうぞよろしくお願い致します。。

投稿日時 - 2007-02-05 15:28:12

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#1さんのご指摘のほかに、
右端の列の値を取得する際、End(xlToRight)では途中に空白があると機能しません。
また、For iで最大列数を求める際、シート最終列をRange("IV2")で設定していましたが、エクセル2007からは変わると思いますので、Cells(2, ActiveSheet.Columns.Count)でもとめるようにしてみました。

Sub 単価代入()
Dim i As Integer
Application.ScreenUpdating = False
For i = Cells(2, ActiveSheet.Columns.Count).End(xlToLeft).Column To 1 Step -1
If InStr(Cells(2, i).Value, "単価") > 0 Then
Cells(3, i).Value = Cells(3, ActiveSheet.Columns.Count).End(xlToLeft).Value
End If
Next i
Application.ScreenUpdating = True
End Sub

投稿日時 - 2007-02-05 15:19:41

ANo.1

Cells(3, i).Value = Cells(3, i).End(xlToRight).Value
でいいのではないでしょうか。

投稿日時 - 2007-02-05 14:59:37

あなたにオススメの質問