[[20180509170315]] 『Unionを使用した可視セルのシート間コピー&値貼り』(スマトラ) ページの最後に飛ぶ

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

 

『Unionを使用した可視セルのシート間コピー&値貼り付け』(スマトラ)

すみません、先程も同じようなケースで質問をさせていただきましたが、類似ケースでエラーが出て困っております。

処理内容は以下の通りです。

コピー元シート(予)のセル範囲をコピー
コピー先シート(TP)の複数Cell起点に同じものを値貼り付け
※この際に予めUnionで一括りにしています。

・下記実行すると、Union部分でエラー

実行時エラー1004
Rangeメソッドは失敗しました、Worksheetオブジェクト

と出ます。

・参照先はしっかり指定しているつもりなのですが、どこかおかしい箇所があればアドバイスお願いできますでしょうか。

下記コードは、テスト用で、実際にはセル範囲の指定をループさせる予定ですので「Cell」を使用しています。

Sub テスト()

    Dim sh1 As Worksheet
    Dim d As Variant
    Set sh1 = Worksheets("TP")    '転記元
    d = Sheets("予").Range("B6575").End(xlUp).Row
    Worksheets("予").Range(Cells(3, 14), Cells(d, 14)).Copy    '性別

    With sh1
        Union(.Range(.Cells(3, 11)), .Range(.Cells(61, 4))).PasteSpecial (xlPasteValues)    'K3,
    End With
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


追伸、初歩的ですが

・フィルタで絞り込んだセル範囲(非表示Cellあり)を
・手作業でコピーして
・別シートのCellを「Ctrl+クリック」で選択して貼り付け

をやってみましtが、仕様上できませんでした。

(スマトラ) 2018/05/09(水) 17:29


すみません自己解決しました。
Rangeが要らなかったようです。

 Union(sh1.Cells(3, 11), sh1.Cells(61, 4)).PasteSpecial (xlPasteValues)
(スマトラ) 2018/05/09(水) 18:15

>自己解決しました。

本当ですか?そんなはずないと思いますが。

(マナ) 2018/05/09(水) 18:43


本題と違いますが…
↓こちらと同じミスしていませんか。

[[20180509001948]] 『マクロ:別のシートで実行するとWorksheetエラーが』(スマトラ)

(マナ) 2018/05/09(水) 18:49


>Dim d As Variant

ここも気になります。

(マナ) 2018/05/09(水) 18:51


マナさん ありがとうございます。

Dim d As Variant→ネットで調べると→as Longでした

Unionにつては、以下で処理できました。

With sh1
.Range(.Cells(予, 14), .Cells(d, 14)).Copy: Union(sh2.Cells(日, 10 + i), sh2.Cells(入, 3 + i)).PasteSpecial (xlPasteValues)
End With
(スマトラ) 2018/05/10(木) 16:25


>Unionにつては、以下で処理できました。

次の質問で、結局Unionは使用していないようなので
どうでもよいことかもしれませんが…

こちらでは、手作業でと同じで、エラーになりました。
(オートフィルタで絞り込まれている状態で動作確認しています)

(マナ) 2018/05/10(木) 19:02


すみません、言葉足らずでした。

・次の質問では省略していますがUnionを使用しております。

 手作業で、やってみたところ、エラーがの原因は、オートフィルタで絞り込んだ際に
 非表示セル行が入り込むとエラーになるようです。

 対策としては、非表示行が発生しないように並び替えて絞り込むことで回避できました。

 絞り込んだ際に非表示行となりそうな値を昇順で並び替えた際に、最終行に集め
 必要なデータをフィルタで表示させたときに1行目から順序よく並ぶようにして
 みると複数範囲のコピペができました。

(スマトラ) 2018/05/10(木) 20:13


理解しました・
それで、並べ替えをしていたのですね。

でも、Unionにこがわらなくても
2回にわけてペーストのほうがわかりやすくないですか?

 Option Explicit

 Sub test()
    Dim 転記元WS As Worksheet
    Dim 転記先WS As Worksheet

    Set 転記元WS = Worksheets("予")
    Set 転記先WS = Worksheets("TP")

    With 転記元WS.Range("A2").CurrentRegion
        'ここでオートフィルタで絞り込み
        .Offset(1).Columns(14).Copy
        転記先WS.Range("A3").PasteSpecial xlPasteValues
        転記先WS.Range("BI4").PasteSpecial xlPasteValues
    End With

 End Sub

(マナ) 2018/05/10(木) 20:31


マナさん

私も2回にわけてみたんですが、コピー貼付け処理が多いのと

どうにか1行で書きたかったので、下記のようにこだわってしましました。
それと、次の質問にある、ループ処理する際に、個人的に見やすかったもので・・・

転記先.Value = 転記元.Value みたいな感じで、、、

Unionでまとめ

 .Range(.Cells(予, 14), .Cells(d, 14)).Copy: Union(sh2.Cells(日, 10 + i), sh2.Cells(入, 3 + i)).PasteSpecial (xlPasteValues) 

「:」でまとめ

転記元.Copy : 転記先.PasteSpecial (xlPasteValues)

と一行化しました。

(スマトラ) 2018/05/10(木) 20:47


>個人的に見やすかったもので・・・

そうですか。
わたしには、見にくいですが、人それぞれですね。
最後に、

>(xlPasteValues)

括弧はいりません。

(マナ) 2018/05/10(木) 21:02


マナさん

ありがとうございます。スッキリします。
(スマトラ) 2018/05/10(木) 21:27


コメント返信:

[ 一覧(最新更新順) ]


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