- ベストアンサー
Excel VBAコードの問題:関数のコピー貼り付けができない
- Excel VBAを使用している際に、関数のコピー貼り付けができない問題が発生しました。
- コードの一部である「メーカー名コピーあんど貼付」という関数の処理が正しく動作しておらず、その部分でエラーが発生しています。
- この問題について、他の方からの解決策や具体的な修正方法を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
全体を通して、 『データ範囲内のL列のうち、ブランクセルだけに数式を入れて、その数式を値化したい』 という処理ですか? 全部まとめて処理をすると Sub test() Dim r As Range 'データ範囲のL列 Dim rr As Range 'L列ブランクセル With ActiveSheet 'K列データ最終行を基準にL列範囲を変数にセット。 Set r = .Range("L2", .Cells(.Rows.Count, "K").End(xlUp).Offset(, 1)) 'さらにL列ブランクセルをセット。 'この時ブランクセルが無ければエラーになるのでOn Error制御 On Error Resume Next Set rr = r.SpecialCells(xlCellTypeBlanks) On Error GoTo 0 'L列にブランクセルがある場合だけ処理する。 If Not rr Is Nothing Then 'L列ブランクセルに数式セット。 rr.FormulaR1C1 = "=RC[-9]" 'その右隣に数式セット。 rr.Offset(, 1).FormulaR1C1 = "=RC[-9]" 'L:M列まとめて数式を値化。 r.Resize(, 2).Value = r.Resize(, 2).Value End If End With End Sub こんな感じになります。 オートフィルタを使わず[ジャンプ]機能を使う例です。 >Set rr = r.SpecialCells(xlCellTypeBlanks) 基本、ActiveCellを移動させたりせず、Selectに依存しない書き方にしたほうが良いです。 どうしても Sub 仕入先ブランク解除 の後に続けたい場合は、 最後のActiveCellを基準にする事になります。 Sub メーカー名コピーあんど貼付2() Dim r As Range If ActiveCell.Column <> 13 Then Exit Sub With ActiveSheet Set r = ActiveCell Set r = .Range(r, .Cells(.Rows.Count, "K").End(xlUp).Offset(, 1)) r.Item(1).Resize(, 2).Copy r If .FilterMode Then .ShowAllData End If r.Value = r.Value End With Set r = Nothing End Sub