• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロでA欄に値がある行までのC列の範囲を指定したい。?)

エクセルマクロでA欄に値がある行までのC列の範囲を指定したい

このQ&Aのポイント
  • エクセルマクロを使用して、A欄に値がある行までのC列の範囲を指定する方法を教えてください。
  • VBAsを使用して、エクセルマクロでA欄に値がある行までのC列の範囲を動的に指定する方法を教えてください。
  • VBAsを使用して、エクセルマクロでA欄に値がある行までのC列の範囲を指定する方法を教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>変数を使って最終行を指定しても上手くいきませんでした。 ケアレスミスですね。 >Selection.AutoFill Destination:=Range(Cells(3, 2), Cells(lRow, 3)), Type:=xlFillDefault Selection.AutoFill Destination:=Range(Cells(2, 2), Cells(lRow, 3)), Type:=xlFillDefault ということです。 しかし、 >Range("C2").Select >Selection.AutoFill Destination:=Range(Cells(3, 2), Cells(lRow, 3)), Type:=xlFillDefault は、Select が不要です。入門から初級に移行するには、まず、Select --> Selection は特別なことがない限りは、使わないようにしてください。ひとつにまとめて、 Range("C2").AutoFill Destination:=Range(Cells(2, 2), Cells(lRow, 3)), Type:=xlFillDefault また、VBAなどのVB6系では、 Dim lRow As Long, ←プロシージャの始めに宣言します。それに、これは、右側の変数を意図的に消したものでしょうけれども、カンマが残っています。カンマは不要。 >With Worksheets(2) (2)インデックスは意図的に行わない限りは、あまり使わないことです。インデックスは順序のことですから、移動したら、マクロでは分からなくなりますから、明示的に名称を入れます。 With スーテトメントを使うなら、 Range("C1").Formula = "名称" なども、すべて、それに従わなくてはなりません。それが面倒なら、 Worksheets(2).Select で済ませてください。しかし、標準モジュールでないといけません。 なお、AutoFill メソッドは、記録マクロに存在するもので、あまりVBAではあまり使いません。理由は、物理的な操作だからです。 '// '私なら、このように書いています。 Sub Test2() With Worksheets("Sheet2")  .Range("C1").Value = "名称" '←Formula プロパティではなく、Value プロパティ  With .Range("C2", .Cells(Rows.Count, 1).End(xlUp).Offset(, 2))    'FormulaR1C1 は不要, ただし、FormulaLocal が必要になることがあります。    .Formula = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)"  End With End With End Sub

donald1982
質問者

お礼

行いたい操作ができました。 「Select --> Selection」を使わなくて済んだり、 AutoFillを使わなくても同じ操作ができたり、楽しいと思いました。 VBAの初心者で主に「マクロの記録」でやりたい操作を行い、 Visual Basic で記録されたマクロの中で不必要だと思ったものを消していくという 操作でマクロを記述していました。 勉強になりました。 ありがとうございます。

その他の回答 (5)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

ほんとぉ~!っに何度もごめんなさい。 前回のコードで行がダブっていました。 Sub test() Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row Cells(2, 3).AutoFill Destination:=Range(Cells(2, 3), Cells(lRow, 3)) End Sub に訂正してください。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.2・4です! 何度もごめんなさい。 以前はまったく的外れでしたので、もう一度やってみました。 「C2セルに数式が入っていて、それをA列に入力がある行までオートフィルで下へコピーする。」として、 こんな感じでよいのですかね? ごく単純に・・・ Sub test() Dim lRow As Long lRow = Cells(Rows.Count, 1).End(xlUp).Row lRow = Cells(Rows.Count, 1).End(xlUp).Row Cells(2, 3).AutoFill Destination:=Range(Cells(2, 3), Cells(lRow, 3)) End Sub これを Range("C2").Select 以降に変更してみてください。 以上、参考になればよいのですが 今回も外していたらごめんなさいね。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です! 前回は大きな勘違いをしていました。 無視してください。 どうも失礼しました。m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! もしかしてこんなことですかね? Sub test1() Dim i As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Cells(i, 3) = Cells(2, 3) Next i End Sub 前半のVLOOKUPの方は無視しています。 外していたらごめんなさいね。m(__)m

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Selection.AutoFill Destination:=Range(Cells(3, 2), Cells(lRow, 3)), を Selection.AutoFill Destination:=Range(Cells(2,3), Cells(lRow, 3)), に変更してみてください。 Cells(3, 2),じゃなくてCells(2, 3),

donald1982
質問者

お礼

ありがとうございました。 思っていた結果が得られました。

関連するQ&A

専門家に質問してみよう