アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者の質問です。どなたかご教授いただければ幸いです。

エクセルにて、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に挿入したいのです。

A 回答 (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)
    • good
    • 1
この回答へのお礼

細かなご回答ありがとうございます。
参考にさせていただきます。

お礼日時:2021/04/04 14:27

>ご指摘いただいた、エラー対策をいれるとどのようになるのでしょうか?


エラー対策は-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/ …
    • good
    • 0

こんにちは、


>最終行から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
    • good
    • 1
この回答へのお礼

早々のご回答ありがとうございます。
早速試してみましたが、うまくいきました。
ご指摘いただいた、エラー対策をいれるとどのようになるのでしょうか?
他によいコードがあればお教えください。

お礼日時:2021/04/04 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!