|
こんにちは。かみちゃん です。
>としていますが、エラーがでます。(オブジェクトはサポートしていません。)
どこのコードでエラーが出ていますか?
エラーメッセージが表示されると、「デバッグ」ボタンがクリックできるようで
あれば、それをクリックすると、原因となっているコードが反転表示されますの
で、それも明示するようにしましょう。
ActiveCell.xlLastCell
は、どのようなお考えで記述されたのでしょうか?
詳しくは、以下にも載っているので確認していただきたいのですが、
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_030_100.html
(先頭4文字は、全角文字になっているので、半角にしてください)
列の値の入っている最終行は、Endプロパティで取得できます。
End(xlToLeft)は、行方向なので、同じ要領です。
そこで、以下のようにします。
Sub Sample1()
'価格自動入力
Dim i As Integer
Application.ScreenUpdating = False
'3行目で検索
For i = Range("IV3").End(xlToLeft).Column To 1 Step -1
If InStr(Cells(3, i).Value, "価格") > 0 Then
Cells(4, i).FormulaR1C1 = "=Sheet1!R[-1]C[-5]"
If Range(Cells(4, i), Cells(Rows.Count, i).End(xlUp)).Count > 1 Then
Cells(4, i).AutoFill Destination:=Range(Cells(4, i), Cells(Rows.Count, i).End(xlUp)), Type:=xlFillValues
' Selection.AutoFill Destination:=Range(Selection, ActiveCell.xlLastCell), Type:=xlFillValues
End If
End If
Next i
Application.ScreenUpdating = False
End Sub
オートフィルをしなくても、以下のような記述の仕方でもできます。
数式設定範囲のセル指定のコードが複雑かもしれませんが・・・
Sub Sample1_1()
'価格自動入力
Dim i As Integer
Application.ScreenUpdating = False
'3行目で検索
For i = Range("IV3").End(xlToLeft).Column To 1 Step -1
With Cells(3, i)
If InStr(.Value, "価格") > 0 Then
.Offset(1).Resize(.Offset(Rows.Count - .Row).End(xlUp).Row - .Row) _
.FormulaR1C1 = "=Sheet1!R[-1]C[-5]"
End If
End With
Next i
Application.ScreenUpdating = False
End Sub
|
|