マクロで任意の列を参照して、オートフィルをする方法が知りたいです。
うまく説明できないかもしれないので、添付画像に沿って質問させていただきます。
**はじめに**
・A列とE列には、都道府県名があります。
・B列とC列、F列とG列にはそれぞれのデータがありますが、空白セル(行)もあります。
・今、D2セルをコピーして、H2セルに貼り付けました。
**ここからマクロ**
① アクティブセルから「3列左の最終行」まで、下方向にオートフィルさせたいです。
※サンプルではH2セルを選択していますが、セル番地を固定するのではなく、「アクティブセル」を下方向にオートフィルさせます。
② データの行数は不規則なので、「都道府県」列の最終行に合わせてオートフィルさせます。
**備考**
マクロのコードで、
Dim x As Long
x = Range("E" & Rows.Count).End(xlUp).Row
Range("H2") = "=sum(F2:G2)"
Range("H2").AutoFill Destination:=Range("H2:" & "H" & x), Type:=xlFillSeries
というところまでは分かりました。
しかし、上記のコードは「参照する範囲をE列」に固定してありますが、
現在選択しているセル(今回はセルH2)から「3列左の列を参照」したいのです。
添付画像ではデータがA~H列までしかありませんが、
実際にはシートの右側に同様のデータが複数あります。
その為、オートフィルの終了位置を「○列を参照」と固定するのではなく、
「現在選択中のセルから3列左の列」と指定したいのです。
恐れ入りますが、どなたかお分かりの方がおられましたら、
ご教授いただけましたら幸いです。
宜しくお願い申し上げます。
No.3ベストアンサー
- 回答日時:
続けてお邪魔します。
>何らかの数式を」セルH2に貼り付けた後、E列最終行までオートフィルさせる・・・
選択したセルには数式が入っているという前提で・・・
Sub Sample3()
Dim myCol As Long, lastRow As Long
With Selection
myCol = .Column
If .HasFormula Then
lastRow = Cells(Rows.Count, myCol - 3).End(xlUp).Row
Range(Cells(2, myCol), Cells(lastRow, myCol)).Formula = .Formula
End If
End With
End Sub
ではどうでしょうか?
※ 選択セルに数式が入っていないと何も変化しません。m(_ _)m
ありがとうございます!!
できました!!!!
イメージ通りの処理です。
このマクロは、今後多くの場面で応用できると思います。
tom04さんには、以前にもお世話になっていますが、
今回も本当に助かりました。
ありがとうございました。
('v'*)
No.4
- 回答日時:
何度もごめんなさい。
No.3のコードでは3行目以降を選択していると、数式の行がずれてしまいます。
No.3のコードも消去してください。
お示しの画像の通り、1行目は項目行でデータは2行目以降にあり
選択列の2行目には数式が入っているという前提のコードにしました。
Sub Sample4()
Dim myCol As Long, lastRow As Long
With Selection
myCol = .Column
If Cells(2, myCol).HasFormula Then
lastRow = Cells(Rows.Count, myCol - 3).End(xlUp).Row
Range(Cells(2, myCol), Cells(lastRow, myCol)).Formula = Cells(2, myCol).Formula
End If
End With
End Sub
※ これでどの行を選択しても、
その列の3列左の最終行までの数式が入ると思います。m(_ _)m
あ、実はNo.3で教えて頂いたコードで実行したところ、1行ずれていました。
何となく、
Range(Cells(2, myCol),
の部分を
Range(Cells(3, myCol),
に変更したら正しい位置に計算結果が表示されたので、
「これでよし!」と思っていました。
もっと正しいコードがあったのですね。
ご丁寧な訂正、ありがとうございます。
今後とも、お力を貸して頂けましたら幸いです。
No.2
- 回答日時:
No.1です。
質問文を読み違えていました。
選択セルの列をそのままオートフィルで良かったのですね。
前回のコードは消去し↓のコードに変更してください。
Sub Sample2()
Dim lastRow As Long, myCol As Long
myCol = Selection.Column
lastRow = Cells(Rows.Count, myCol - 3).End(xlUp).Row
Cells(2, myCol).Formula = "=Sum(" & Cells(2, myCol - 2).Address(False, False) & _
":" & Cells(2, myCol - 1).Address(False, False) & ")"
Cells(2, myCol).AutoFill Destination:=Range(Cells(2, myCol), Cells(lastRow, myCol))
End Sub
※ 数式を残すようにしていますが、
結果だけの表示で良いのであればもっと簡単にできると思います。m(_ _)m
No.1
- 回答日時:
こんにちは!
質問文そのままをコードにしてみました。
Sub Sample1()
Dim lastRow As Long, myCol As Long
myCol = Selection.Column
If myCol <= Cells(1, Columns.Count).End(xlToLeft).Column - 3 Then
lastRow = Cells(Rows.Count, myCol).End(xlUp).Row
Cells(2, myCol + 3).Formula = "=Sum(" & Cells(2, myCol + 1).Address(False, False) & _
":" & Cells(2, myCol + 2).Address(False, False) & ")"
Cells(2, myCol + 3).AutoFill Destination:=Range(Cells(2, myCol + 3), Cells(lastRow, myCol + 3))
Else
MsgBox "最終列より 左3列以上を選択"
End If
End Sub
※ 本来であれば細かいエラー処理が必要になると思いますが、
とりあえず1セル(1列)選択後、マクロ実行すると数式のまま結果が表示されると思います。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセル マクロ オートフィルの終点の指定について
Excel(エクセル)
-
アクティブセルから、A列最終行までフィルダウン
Excel(エクセル)
-
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
-
4
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
5
VBAで複数の数式セルを最終行までコピーするには?
Excel(エクセル)
-
6
エクセルVBAでのオートフィル
Excel(エクセル)
-
7
エクセルマクロ 行数可変のオートフィルター構文
Excel(エクセル)
-
8
オートフィルのマクロを作りたい
Excel(エクセル)
-
9
エクセル マクロ 最終列までを全選択
Excel(エクセル)
-
10
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
Excel 頭に「0」がついている...
-
Excel強制終了
-
エクセルのまとめてカッコをつ...
-
桁の違う数値での並び替え
-
エクセルで特定の文字が入って...
-
Excelの結合でA列とB列の内容...
-
セル内文章から、英数字のみ取...
-
エクセルに入力した文字列に句...
-
ある列のセルに特定の文字が入...
-
エクセルで、数字列の中にハイ...
-
複数のセルの文字列を結合して1...
-
Excel 同じ値が連続している行...
-
エクセル、11と1の区別
-
Excelで%表示を全角にしたいの...
-
セルを結合する場合に・・・
-
Excelで中央揃えが出来ない?
-
Excelで、列のタイトル、離れた...
-
エクセル FINDとCOUNTを行う関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで2つの数値のうち大きい...
-
エクセルで、2種類のデータを...
-
Excelで中央揃えが出来ない?
-
エクセルで特定の文字が入って...
-
ある列のセルに特定の文字が入...
-
Excel 頭に「0」がついている...
-
エクセルのまとめてカッコをつ...
-
桁の違う数値での並び替え
-
セル内文章から、英数字のみ取...
-
Excel 指定行までコピーをおこ...
-
エクセルに入力した文字列に句...
-
excelで、1つのセルに入ってい...
-
連続データを1行おきに貼り付け...
-
Excel強制終了
-
エクセルで、数字列の中にハイ...
-
Excelのオートフィル
-
Excelの結合でA列とB列の内容...
-
Excelでグループの最大値から項...
-
WEEKDAY 空白も7になってしまう
-
【EXCEL】別シートに同じ番号が...
おすすめ情報
すみません、とても言いにくいのですが…
質問ではサンプルとして簡単な数式(sum)を記入しましたが、実際にはとても複雑な数式を使用しています。
実際の数式をここに記入しようとしましたが、あまりにも複雑すぎて文字数制限をオーバーしました…
もし可能であれば、数式が変わっても同様の作業ができるように、
コードに数式となる部分を記述せず、
*********************
「何らかの数式を」セルH2に貼り付けた後、E列最終行までオートフィルさせる
*********************
というコードを教えて頂けましたら幸いです。
せっかく数式を反映させるコードをご教授頂いたのに、本当に申し訳ありません。