[[20210807131746]] 『都度変化する最終列から指定列までのコピーと挿入』(VBA初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『都度変化する最終列から指定列までのコピーと挿入』(VBA初心者)

VBAの初心者です。
作成中にエラーが発生しましたが自己解決出来ず、
皆様のお力添えを頂きたく、何卒宜しくお願いいたします。

Excel Office365、Windows 10です。

マスタとなるシート("マスタシート")以外の複数シートに対して、
それぞれ同じ作業を繰り返し行うことが目的です。
各シートの最終列から、左側に任意の列数移動した列範囲分を選択コピーし、
同じく最終列から左側に任意の列数移動した列にコピーデータを挿入する、
というものです。

下記の部分で"実行時エラー'13':型が一致しません。"
とエラー表示されます。
Columns("lastColumn - 7:lastColumn - 3").Copy
Columns("lastColumn - 2").Insert Shift:=xlShiftToRight

"lastColumn"や"lastColumn - 7"等の値を、
仮に(P:T)や(U)等の列番号?にしてみると、望むような動きをする為、
lastColumnの記述と、− X等の部分に問題があると推測しておりますが、
そこからが全く解決出来ず、苦慮しています。

毎回データが列の右側に増えていき、
最終列が変化する為、最終列から指定範囲をコピーと挿入したい次第です。

Sub Insert()

    Dim WB As Workbook
    Set WB = ActiveWorkbook
    Dim targetSheet As Worksheet
    Dim lastColumn As Long
        lastColumn = ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column
    For Each targetSheet In Worksheets
    targetSheet.Activate
        If targetSheet.Name <> "マスタシート" Then
	        Columns("lastColumn - 7:lastColumn - 3").Copy
	        Columns("lastColumn - 2").Insert Shift:=xlShiftToRight
	        Application.CutCopyMode = False
	        Range("A1").Select
        End If
    Next
    WB.Worksheets(1).Activate
End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


こんにちは ^^
きっと、文字列になっているからですよ。。。多分
それと
アルファベット指定だったような気が
どうしても数値使用ならレンジでラップすればOKかもです。
(隠居Z) 2021/08/07(土) 13:56

 書いてる間に回答ありましたが、そのまま投稿します。
 --
 二重に誤解があるようです。

 1)変数を""で囲ってしまうと文字列として認識されてしまいます。
 仮に直すならColumns(lastColumn - 7 & ":" & lastColumn - 3).Copy
 ですが、これも間違いです。詳しくは2)を参照。

 2)数値を用いてColumns("1:3")やColumns(1:3)という書き方は出来ません。
 数値で指定する場合はRangeを用いてRange(Columns(1),Columns(3))の様に記述します。
 今回の場合は、
 Range(Columns(lastColumn - 7), Columns(lastColumn - 3)).Copy
 でしょうか。
(名無し) 2021/08/07(土) 14:07

 >Columns("lastColumn - 7:lastColumn - 3")

ダブルクォーテーションで括ったら、それは文字列ということを示してしまいます。
変数名をダブルクォーテーション内に配置してはだめです。

また、セル範囲は、色々な言葉で言い表せます。
たくさんの言葉を覚えましょう。

Sub test()

    Dim ws As Worksheet
    Dim c As Range

    For Each ws In Worksheets
        If ws.Name <> "マスタシート" Then
            Set c = ws.Cells(4, ws.Columns.Count).End(xlToLeft).EntireColumn
            c.Offset(, -7).Resize(, 4).Copy
            c.Offset(, -2).Insert
        End If
    Next
End Sub

参考URL>>
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html

(まっつわん) 2021/08/07(土) 14:13


皆様、早々にご回答頂き、ありがとうございます。
望んでいた動きの確認が出来ました。大変助かりました。
(VBA初心者) 2021/08/07(土) 14:46

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.