初心者の質問です。どなたかご教授いただければ幸いです。
エクセルにて、1つのSheetから最終行を特定し
最終行から4列前までをコピーして、最終行+1列に挿入を実施したいのですが、
最終行から4列前までの複数コピーがうまくいきません。
※最終行は変動するため、下記のように変数を用いているのですが・・・
Sub ADD_Column()
Dim lastColumn As Integer
lastColumn = Cells(3, Columns.Count).End(xlToLeft).Column
Columns(lastColumn).Copy Destination:=Columns(lastColumn + 1)
End Sub
(lastColumn)→最終行と-1列、-2列、3列と複数列コピーし
最終行+1に挿入したいのです。
No.3ベストアンサー
- 回答日時:
>他によいコードがあればお教えください。
定数を纏めていませんけれど
offsetやresize使うと書き方色々で良いと言えるかどうか、、
行数を値のある行までに限定するなら、、下記のような感じで
Dim lastColumn As Integer
Dim lastRow As Long, i As Integer
lastColumn = Cells(3, Columns.Count).End(xlToLeft).Column
If lastColumn < 4 Then lastColumn = 4
For i = lastColumn - 3 To lastColumn
If lastRow < Cells(Rows.Count, i).End(xlUp).Row Then
lastRow = Cells(Rows.Count, i).End(xlUp).Row
End If
Next
Range(Cells(1, lastColumn - 3), Cells(lastRow, lastColumn)).Copy _
Destination:=Cells(1, lastColumn + 1)
No.2
- 回答日時:
>ご指摘いただいた、エラー対策をいれるとどのようになるのでしょうか?
エラー対策は-3の時に該当列が無く1004が返される場合を想定して
(一番右の列がB列などの場合、、無いかと思いますが)
コードとしては少し乱暴かも知れませんが
lastColumn = Cells(3, Columns.Count).End(xlToLeft).Column
If lastColumn < 4 Then lastColumn = 4
とか、、実行させずにMsgboxを出し Exit Sub とか、、ですかね
すこしきになったのですが、最終行はどこにも出てきていませんが、
もし、列全体をコピーするのでないのならば、最終行を取得する必要があります。この場合、どの列が最も行数が多いのか調べる必要があるかも知れませんね。
>初心者の質問です。どなたかご教授
ポイントはRange(レンジ)オブジェクトです。
RangeはセルやRowsやColumns などの範囲を指定する事が出来ます
Rangeこれ、少しややこしいです。しかし、とてもよく使い重要ですので下記に参考サイトを書いておきます。
Resizeは、詳しい方のメソッドに出てくると思います。
参考
https://sugoikaizen.com/excelvba/2_80/
詳しい参考
https://docs.microsoft.com/ja-jp/office/vba/api/ …
No.1
- 回答日時:
こんにちは、
>最終行から4列前までの複数コピー
エラー対策なしですが、ご質問コードを基にすると、こんな感じかな
Sub ADD_Column()
Dim lastColumn As Integer
lastColumn = Cells(3, Columns.Count).End(xlToLeft).Column
Range(Columns(lastColumn - 3), Columns(lastColumn)).Copy _
Destination:=Columns(lastColumn + 1).Resize(, 3)
End Sub
早々のご回答ありがとうございます。
早速試してみましたが、うまくいきました。
ご指摘いただいた、エラー対策をいれるとどのようになるのでしょうか?
他によいコードがあればお教えください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 最終行の指定について教えてください。 複数シートを1シートへまとめる下記マクロでは各シートの6行目を 1 2022/10/04 18:37
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
IIF関数の使い方
-
VBAでのリスト不一致抽出について
-
VBマクロ 色の付いたセルを...
-
マクロ 最終列をコピーして最終...
-
VBAを使って検索したセルをコピ...
-
エクセル VBA ユーザーフォー...
-
VBA A列にありB列にないものま...
-
B列の最終行までA列をオート...
-
複数処理 Worksheet_Change(ByV...
-
超難 日付に対するクロス集計
-
文字列の結合を空白行まで実行
-
VBA 値と一致した行の一部の列...
-
空白セルをとばして転記
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA intersect colu...
-
VBAのFind関数で結合セルを検索...
-
オートフィルタをマクロで作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報