- ベストアンサー
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 = のあとの指定方法がまずいのかと思いますが。。 どうぞ宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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 列位置を変数に記録しておけばいいのでは?
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
#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)
Cells(3, i).Value = Cells(3, i).End(xlToRight).Value でいいのではないでしょうか。
お礼
ありがとうございました。 空白があってもだめなんですね。 変数で指定しましたら、うまくいきました。 もう1つ、ずうずうしいのですが、 Cells(3, i).Value = Cells(3, J).Value を、Cells(4,i).Value 以下にも摘要するためには、 相対参照式でセルを指定できますでしょうか? どうぞよろしくお願い致します。。