質問: 【excelvba】別ブックのシートの指定範囲から値を持ってくる方法 office365のexcelvbaの質問です。 bookaでマクロを実行して、bookbを選択して開いた状態で、 bookbのシート「算出表」からbookaのシート「集計表」に値をコピーしたいです。 ただし、コピー元の範囲が分散していて シート「算出表」のb5:e●の範囲(b5でctrl+↓を押したのと同じ範囲)を シート「集計表」のb220に値で貼り付け シート「算出表」のem5:〇〇の範囲(em5でctrl+→を押したのと同じ一番右の列までの範囲で最下行は●と同じ)を シート「集計表」のf220に値で貼り付け つまり「算出表」のf列~el列が不要データなのです。 でも全体を貼り付けてから不要列を削除する方法は駄目です。 (集計表の関数式がおかしくなってしまう) まだ範囲指定がよく分かっておらず、詳しい方ご教授いただければ幸いです。
回答: こんにちは、 range("b5", cells(range("b5").end(xldown).row, columns.count).end(xltoleft)).select selection.copy と書いているのですから、同様に範囲を分けてコピペすれば良いのでは、 と思います。 >まだ範囲指定がよく分かっておらず、詳しい方ご教授いただければ幸いです。 確かに範囲指定は判り難いですね。 (集計表の関数式がおかしくなってしまう) 少し心配ですが、 同じペースト先に出力するのであれば、最大出力範囲を想定して値を削除しないといけません。 範囲の指定方法は色々沢山あるので、、ごめんなさい うまくアドバイスできないのでサンプルです sub sample() dim srcbook as workbook dim pstsheet as worksheet, srcsheet as worksheet dim fname as string dim filterrange as range, rng as range const n as integer = 4 'カラム拡張数 b列からe列で4 set pstsheet = thisworkbook.sheets("集計表") 'ファイルを開く fname = application.getopenfilename("microsoft excelブック,*.xls?", title:="bookbを指定してください") if fname = "false" then exit sub 'キャンセル対応 '取込ファイルとシート名をセット application.screenupdating = false '開く前に画面制御 set srcbook = workbooks.open(fname) set srcsheet = srcbook.worksheets("算出表") 'フィルタ範囲設定 set filterrange = srcsheet.range("$a$5:$fk$500") filterrange.autofilter field:=5, criteria1:=array( _ "a", "b"), operator:=xlfiltervalues pstsheet.range("b220").resize(500, 29).clearcontents '想定最大範囲をクリア with srcsheet set rng = .range("b5") 'コピー元範囲(起点のセル) .range(rng, rng.offset(, n).end(xldown)).copy pstsheet.range("b220").pastespecial paste:=xlpastevalues application.cutcopymode = false set rng = .range("em5") 'コピー元範囲(起点のセル) .range(rng, .cells(rng.end(xldown).row, _ .columns.count).end(xltoleft)).copy pstsheet.range("f220").pastespecial paste:=xlpastevalues application.cutcopymode = false end with filterrange.autofilter 'フィルタ解除 ' srcbook.close savechanges:=false ’保存せずに閉じる pstsheet.activate pstsheet.range("b220").select 'ペーストシート選択範囲後始末 application.screenupdating = true end sub withは書くのが面倒だったためです