• ベストアンサー

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 = のあとの指定方法がまずいのかと思いますが。。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

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 列位置を変数に記録しておけばいいのでは?

acochaco
質問者

お礼

ありがとうございました。 空白があってもだめなんですね。 変数で指定しましたら、うまくいきました。 もう1つ、ずうずうしいのですが、 Cells(3, i).Value = Cells(3, J).Value を、Cells(4,i).Value 以下にも摘要するためには、 相対参照式でセルを指定できますでしょうか? どうぞよろしくお願い致します。。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

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