
エクセルマクロでA欄に値がある行までのC列の範囲を指定したい。?
●エクセルマクロのVBAで次のように記述しています。
Range("C2").FormulaR1C1 = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C148"), Type:=xlFillDefault
A列に文字が入っている最終行は A148なので、C2: C148 の範囲にオートフィルで貼り付けるように
しています。 しかし、A列に文字が入っている最終行は、変動します。
なお、貼り付ける範囲はいつでも C2から始まります。
A列に文字が入っている最終行が A200であれば、C2: C200の範囲、
A列に文字が入っている最終行が A321であれば、C2: C321の範囲といったように、
C2の値を貼り付ける範囲を設定したいと思っています。
●そこで、次のように記入してみました。
With Worksheets(2)
Dim lRow As Long,
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
Range("C1").Formula = "名称"
Range("C2").FormulaR1C1 = "=VLOOKUP(LEFT(RC[-2],4),C[-2]:C[-1],2,FALSE)"
Range("C2").Select
Selection.AutoFill Destination:=Range(Cells(3, 2), Cells(lRow, 3)), Type:=xlFillDefault
変数を使って最終行を指定しても上手くいきませんでした。
(C2:C150)や(C2:C160)といったように「C2」のセルを「C2のセル」から「A列に文字が
入っている行のC列」まで貼り付けたいと思っています。
どのようにVBAを記述したら良いのか教えていただけないでしょうか。
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
行いたい操作ができました。
「Select --> Selection」を使わなくて済んだり、
AutoFillを使わなくても同じ操作ができたり、楽しいと思いました。
VBAの初心者で主に「マクロの記録」でやりたい操作を行い、
Visual Basic で記録されたマクロの中で不必要だと思ったものを消していくという
操作でマクロを記述していました。
勉強になりました。
ありがとうございます。
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
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
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 4月~3月まで12カ月横に並んだ表へ指定範囲を貼り付けたい。 Sheet2の指定範囲、Range(" 2 2022/11/30 16:37
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルVBA Unionはなぜ遅い?
-
エクセルで2列を検索し2列とも...
-
Excelで自動的に並べ替えなんて...
-
エクセル マクロで列を連続し...
-
桁数が混在する並び替えの方法
-
エクセルで列内の同じIDの商品...
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
-
エクセルにおける、グラフの指...
-
Excelの関数について、特定の文...
-
エクセルでグラフタイトルが折...
-
たくさん作った同じ設定のグラ...
-
テキストボックス内の文字のふ...
-
日付が1年以内になると他のセル...
-
エクセル カタカナの文字を検...
-
塗りつぶしの色をコピーするには
-
エクセル
-
数字がセルの左側に寄っていて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 指定した文字列を含...
-
桁数が混在する並び替えの方法
-
エクセルで一部除外した数字を...
-
エクセルVBA Unionはなぜ遅い?
-
EXCEL VBA 指定範囲内で特定の...
-
エクセルvba 一つ上の行を指定...
-
エクセルで2列を検索し2列とも...
-
エクセル マクロで列を連続し...
-
エクセルの関数SUBSTITUTEを、...
-
Excelで自動的に並べ替えなんて...
-
EXCELである列を上から順にチェ...
-
エクセルで同じ名前ごとの合計...
-
ExcelVBA:列方向の並び替え O...
-
FIND関数について教えてください
-
エクセルで列内の同じIDの商品...
-
【急】エクセル こんなときの...
-
EXCEL 指定した曜日に番号を振...
-
エクセルマクロでA欄に値があ...
-
エクセルに詳しい人!!!至急...
-
Excelでの並べ替え
おすすめ情報