[[20200414113828]] 『VBAコピペでのエラー』(ピノ) ページの最後に飛ぶ

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

 

『VBAコピペでのエラー』(ピノ)

いつも参考にさせて頂いております。
下記VBAを、毎日走らせ、今までは正常作動しておりますが、
今日いきなり下記のようなエラーが発生しました。
特にフォーマットの変更はしていないのですが…
考えられる原因、もしわかれば教えてください。

<VBA>

        '調査抽出生データ(単価違い)をコピー
        Windows("調査抽出生データ(単価違い).csv").Activate
        ActiveWindow.WindowState = xlNormal

        Rows("2:2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy

        '調査フォーマットに値貼付け
        Windows("◆【更新用】調査.xlsx").Activate
        Range("A9").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

        Range("A9").Select

<エラー箇所>

        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

<エラー内容>
コピー領域と貼り付け領域のサイズが違うため、これをここに貼り付けることができません。貼付領域内のいずれか一つのセルを選ぶか、または同じサイズの領域を選びもう一度貼り付けてください。

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


(回答ではありません)
シート名の指定がありませんが、
ご指定のブックにはシートが複数ありませんか?
(ひでお) 2020/04/14(火) 14:37

■1
質問の回答ではありませんが、VBAの世界では、基本的に対象のブックやシートを指定すれば、いちいちアクティブにしたり、選択したりする必要はありません。

また、コードは「Sub 〇〇 〜 End Sub」までが一つのプロシージャと呼ばれるものなので、数行くらい横着せずに提示されたほうがお互いに誤解が無くてよいと思います。

■2
回答のほうは、ステップ実行して観察してみましたか?

 (1) Rows("2:2").Select
 (2) Range(Selection, Selection.End(xlDown)).Select
 (3) Selection.Copy

↑ですと

 (1) 2行目【全体】を選択

 (2)-1  選択されている範囲のうち最初のセル(=A2セル)から下方向に見てデータが終わる行
    -2  選択されている範囲(=2行目全体)〜その行を【選択】

 (3)【選択中】のセル範囲をコピー

となっていますから、仮にA2セル以下が何もはいってないと、2行目全体〜最大行全体をコピーすることになり、別ブックの9行目に貼り付けようとしても(行があふれちゃうから)エラーになるとおもいます。

したがって、最終行は別のアプローチを使って、【A列以外も含めてどの行が最終行なのか】チェックされたほうがよいです。

■3
踏まえて「◆【更新用】調査.xlsx」ブックの【1番目】のシートに貼り付けるなら、例えば↓のようにすることも可能だとおもいます。

    Sub さんぷる()

        With Workbooks("調査抽出生データ(単価違い).csv").Worksheets(1)
            .Range("A1", .Cells.SpecialCells(xlCellTypeLastCell)).Offset(1).Copy
        End With

        Workbooks("◆【更新用】調査.xlsx").Worksheets(1).Range("A9").PasteSpecial Paste:=xlPasteValues

    End Sub

 ※↑未テストです。

■4
以下は、ちょっと難しく(ややこしく)なるので参考としてですが。
元データがCSVファイルのようですから、ブックとして開くのではなく「QueryTables.Add」を使って外部データとしてインポートするというアプローチも有効だとおもいます。(開始行や形式制御が可能になるため)

(もこな2 ) 2020/04/14(火) 17:39


ひでお様
コメントありがとうございます。
おっしゃる通り、シートが複数あるにもかかわらず、
選択できておりませんでした。
シート指定をするようにいたします。
ありがとうございます。
(ピノ) 2020/04/14(火) 21:41

もこな2様
■1
ご丁寧にありがとうございます。
きちんと指定すれば、アクティブにする必要がないんですね!
確かにそのほうがわかりやすいですし、今後はそのようにいたします。
勉強になりました。

■2、3
わかりやすいご説明、ありがとうございます。
そういうことだったんですね…。
最終行を指定するようにいたします。
いただいた構文で、やりたいことができそうです。

■4
QueryTables.Addメソッドを初めて知りました!
Workbooks.OpenText を使用していましたが、
同じシートでもテキストを開けるんですね、勉強になりました。

ご教授、いつもありがとうございます。

(ピノ) 2020/04/14(火) 21:52


>同じシートでもテキストを開けるんですね
開くというより、取り込むという表現の方が近いとおもいます。
https://www.tipsfound.com/vba/18014
https://tonari-it.com/excel-vba-csv-querytable/
https://www.sejuku.net/blog/69321

(もこな2 ) 2020/04/14(火) 22:00


コメント返信:

[ 一覧(最新更新順) ]


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