• ベストアンサー

エクセルVBAでコピーして 手動で貼り付け 

こん○○は 初心者であちこちからコードをコピペしてなんとかつなぎ合わせているレベルです。 エクセル2002 OS XP Sub copy() i = Worksheets(3).Range("I2")      'I2に適当な数字が入ってる i = i + 1 左上 = "G1" '選択する範囲の左上セル 右下 = "H" & i '   〃   右下セル 範囲 = 左上 & ":" & 右下 Worksheets(3).Range(範囲).copy_ Worksheets(3).Range("n1").PasteSpecial Paste:=xlPasteValues i = (i + 1) / 2 左上2 = "N1" 右下2 = "O" & i 範囲2 = 左上2 & ":" & 右下2 Worksheets(3).Range(範囲2).copy End Sub というコードでコピーした状態にした後手動で他のエクセルやテキストに貼り付けようとしています。ただしシート3は Private Sub auto_Open() ActiveWorkbook.Unprotect Worksheets("Sheet1").Visible = False Worksheets("Sheet3").Visible = False ActiveWorkbook.Protect End Sub でみえなくしています。 こうすると他のエクセルに貼り付けると 貼り付け先のシートが消えてしまいます。消えないようにしたいのですが。 なんとかお知恵を拝借できませんでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sheet1,Sheet3 とも表示状態にして Sub test01() Worksheets("Sheet3").Range("B2").Copy Worksheets("sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues End Sub を実行するとSheet3のB2セル(パターン色を設定した)の値が、Sheet1のA1セルにコピーされました(セルパターン色は映りません。) >質問のWorksheets(3).Range(範囲).copy_ Worksheets(3).Range("n1").PasteSpecial Paste:=xlPasteValues と、この部分が少し違うようですすが。 ーー Sheet3を書式ーシートー表示しないにして、上記のまま実行しましたが、同じく値だけコピーされます。 ーーー Sheet3を非表示にして Sub Macro1() Sheets("Sheet3").Copy Before:=Sheets(1) End Sub を実行すると、シート(タブ)は現れません。コピー元の非表示を受け継ぐようです。 書式ーシートー再表示でSheet3(2) が表示するシートの中にSheet3とともにリストされています。 こういう点を参考に。 コピーで出来た分を表示すすVBAを入れるか、Sheet3をVBAで表示してVBAでコピーし、Sheet3を非表示にするVBAを入れるかになるでしょう。

suisouoku
質問者

お礼

>Sheet3をVBAで表示してVBAでコピーし、Sheet3を非表示にする にて解決しました。ありがとうございます。 ところで、ためしにいろいろ条件を変えて貼り付けたところ もとのコードでシートが消えなくなりました、なにか不具合があったのかもしれません。 どうもありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

試していませんので、はずれかも知れませんが・・・ 「形式を選択して貼り付け」-「値のみ」でペーストしても消えてしまうでしょうか?(消えないとすると、もとのシートが非表示なのが原因と思われる) マクロ側でなんとかするなら、 スクリーンアップデートを一旦falseにしておいて、Sheet3を表示してコピー その後に非表示にする。 ・・・で対処できないかな?

suisouoku
質問者

お礼

すばやいご回答ありがとうございます。 なんとなくわかりました。

関連するQ&A

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • エクセルVBAで別シートにコピー貼り付け

    VBA初心者です。下記のようにプログラムしましたがうまくいかなくて困ってます。どなたかお力をお貸しください。内容としましては輸入Partsのシートからコピーして商品内容確認のシートのセルB17に貼り付けたいです。輸入Partsシートで3列目の空白を探し同じ行の1列目をコピーします。商品内容確認のシートのセルB17にはカーソルは動いているようですが貼りつきません。 Private Sub 商品内容確認2_Click() If MsgBox("商品内容確認へ移動しますか?", 33, "移動の確認") = 2 Then MsgBox "処理を中止します。" Range("A2").Select Exit Sub End If Dim Line As String Dim Maxrow As String Worksheets("輸入Parts").Select Line = 2 Do Until Cells(Line, 1).Value = "" On Error Resume Next If Cells(Line, 3).Value = "" Then Cells(Line, 1).Copy 'コピーする Maxrow = Worksheets("商品内容確認").Range("B17").End(xlDown).Row + 1 Worksheets("商品内容確認").Range("B" & Maxrow).PasteSpecial Paste:=xlPasteValues '値を貼り付け End If On Error GoTo 0 '次の行に移り最後の行まで検索 Line = Line + 1 Loop Worksheets("商品内容確認").Visible = True Worksheets("商品内容確認").Select Worksheets("商品内容確認").Range("B6").Select Worksheets("商品内容確認").輸入Partsシート2.Visible = True Worksheets("商品内容確認").輸出Partsシート2.Visible = False Worksheets("輸入Parts").Visible = False End Sub

  • エクセルVBAでコピーすると行の高さが低くなる

    いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

  • EXCEL VBA 数式を含めたコピー貼り付け

    お世話になります。 VBAを使ってブック間でコピー貼り付けするロジックを以前ご教授いただきましたが、結果が値貼り付けになってしまうため、数式を含めたコピー貼り付けをしたいのです。 A.xlsxというブックがあります。 この中に[データ]と[作業用]という2つのシートがあります。 [データ]シートに会社の1ヶ月の売上げデータが貼り付けています。 [作業用]シートのボタンを押したら[データ]シートのデータをA列に入っている担当者毎にファイルを分割してC:\dumy配下に作成するロジックを色々な方からご教授いただきまして作成しました。 動きはまったく問題ないのですが、下記ロジックの「ここ」部分でのコピーペースト時に値貼り付けしてしまっているため[データ]シートにあった数式がC:\dumy配下に出来上がったファイルには数式がなくなってしまう状態です。 数式も含めて全て貼り付けたいのですが、下記ロジックの[ここ]部分をどのように変更してよいのかが分りません・・ どなたかご教授いただけますでしょうか? よろしくお願い致します。 Sub ボタン_Click() Dim s0 As Worksheet Dim h Application.ScreenUpdating = False Worksheets("データ").Copy before:=Worksheets(1) Set s0 = Worksheets(1) Do Until Application.CountA(s0.Range("A:A")) < 2 h = s0.Range("A2").Value s0.Range("A1").AutoFilter field:=1, Criteria1:=h With Worksheets.Add ここ→ s0.AutoFilter.Range.Copy Destination:=.Range("A1") .Name = h .Move ActiveWorkbook.SaveAs Filename:="C:\dumy\" & h & ".xlsx" ActiveWorkbook.Close False s0.AutoFilter.Range.Offset(1).Delete shift:=xlShiftUp End With Loop Application.DisplayAlerts = False s0.Delete MsgBox "データをEXCELに表示します。" End Sub

  • EXCEL VBA 数式を含めたコピー貼り付け

    お世話になります。 こちらのサイト内にありました、以前の質問QNo.8966520に対する以下の回答(http://qa.itmedia.co.jp/qa8966520.html)を参考にしているところですが、このVBAでは、A列に入っているデータ毎に新規ファイルを作成・保存するような処理となっているようですが、仮にデータを分類する基準を現在のA列を基準としたものから、B列にする場合は、どの記述をどのように変更すればよろしいでしょうか。 これに加えての質問ですが、仮にA.xlsxという元ブックがあると仮定し、この中に[データ]と[単価]という2つのシートがあるとします。以下のVBAの記述では[データ]シートのデータをA列ごと分類し、それを新規ブックに保存させるものですが、これに合わせて[単価]シートのデータ(シート内のデータは加工の必要なし)も新たに作成するブックにコピーし、保存するには、どのような記述を追加すればよろしいでしょうか。最終的には、新規作成ブックに、[データ]と[単価]の2つのシートが作成されるようにしたいと思います。 [単価]シートのデータを、[データ]シートのデータと合わせて新規ブックにコピーする目的は、[データ]シートのデータの一部に、[単価]シートのデータを参照する数式が入っており、[作業用]シートのデータの抽出・保存だけでは、[作業用]シート内の数式が不完全な状態となってしまうためです。 どなたかご教授いただけますでしょうか? よろしくお願い致します。 Sub sample() Dim s0, nwk As Worksheet Dim h Dim i, j, LastRow, cnt As Long Application.DisplayAlerts = False Worksheets("データ").Copy before:=Worksheets(1) Set s0 = Worksheets(1) Do Until Application.CountA(s0.Range("A:A")) < 2 h = s0.Range("A2").Value '検索ワードの変数hと同じ文字のセル数取得 cnt = WorksheetFunction.CountIf(s0.Range("A:A"), h) i = cnt + 1 With s0 Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = h End With Set nwk = Worksheets(h) 'データシートのA列の最終行取得 LastRow = s0.Cells(Rows.Count, 1).End(xlUp).Row j = LastRow '1行目コピー s0.Range("A1:C1").Copy nwk.Range("A1") Do Until j = 1 'A列のセルデータが変数hと同じ場合コピペ及び行削除 If s0.Cells(j, 1).Value = h Then s0.Range("A" & j & ":C" & j).Copy nwk.Range("A" & i) i = i - 1 s0.Rows(j).Delete End If j = j - 1 Loop With nwk .Move ActiveWorkbook.SaveAs Filename:="C:\dumy\" & h & ".xlsx" ActiveWorkbook.Close False End With Loop s0.Delete Application.DisplayAlerts = False MsgBox "データをEXCELに表示します。" End Sub

  • マクロ EXCELの範囲をコピーして貼付け

    『End(xlDown).Row』で取得した値を使ってセルの範囲指定&コピーを行い、 新しく追加したシートに貼り付けたいのですがうまくいきません。 Sub attendanceJoin() Dim MaxRow As Integer 'シートの最終行の値 Workbooks("test.xls").Activate Dim NewWorkSheet As Worksheet Set NewWorkSheet = Worksheets.Add() '新しいシートを追加する MaxRow = Worksheets(2).Range("M1").End(xlDown).Row  'A列の最終行を取得 NewWorkSheet.Name = "統合"  '新しく追加したシートの名前を変更 With Workbooks("test.xls") .Worksheets(2).Range("A1:M&MaxRow").Copy   'コピーするセルの範囲を指定    '↑ここでエラー。.Worksheets(2).Range("A1:M38").Copy を指定するイメージです。 .Worksheets("統合").Range("A1").PasteSpecial End With End Sub どなたか間違っている箇所のご教示お願い出来ますでしょうか。 どうぞよろしくお願い致します。

  • エクセルVBA:コピーの貼り付け先

    VBA初心者です。よろしくお願いします。 あるデータベースをセルB2に入力されている値で絞込み、 シート2に貼り付けるとき、下記の(1)がおそらく正解だと思いますが、 ★(質問1) (2)でも同じ結果が得られました。コピー先の目的地を示す「Destination:=」の部分は省略して全く問題なしと考えてよろしいのでしょうか? ★(質問2) (3)で試してみても同じ結果が得られました。range("sheet2!A1") なんて書き方は、たまたま、試してみたらできちゃった(同じ結果が得られた)のですが、使い方として問題ありませんか? ------------------------------------------------------------- (1) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (2) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (3) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Range("Sheet2!A1") .AutoFilter End With End Sub

  • エクセルVBA

    よろしくお願いいたします。 エクセルのVBAですが、下記のコードを実行すると処理が遅いです。処理が早くなるコード教えてください。 よろしくお願いいたします。 Sub Macro3() Dim aa As Variant Dim i As Variant Application.ScreenUpdating = False Range("A14:i46").Select aa = ActiveSheet.Name ActiveWorkbook.Worksheets(aa).Sort.SortFields.Clear ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("B15:B46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets(aa).Sort.SortFields.Add Key:=Range("C15:C46"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(aa).Sort .SetRange Range("A14:i46") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With For i = 0 To 31 Cells(15 + i, 7).Select If Selection.Value = 0 Then Selection.EntireRow.Hidden = True End If Next i Range("A1").Select Application.ScreenUpdating = True End Sub

  • エクセル マクロ 参照データのコピー

    エクセル2010を使っています。 A1セルに 山田 と入っています。 A5セルに =A1と入っていて 山田 が表示されています。 その状態でマクロ Sub ボタン1_Click() Worksheets("sheet1").Range("A5").Copy Worksheets("sheet2").Range("A5") End Sub を実行すると、コピーは出来るのですが、表示が #REF となってしまいます。 おそらくコピーしたA5セルが他セルを参照しているからだと思いますが、これを正しく表示させるにはどういった方法があるでしょうか? 実際の範囲はすごく広いので、あくまでも 他セルを参照しているセルをマクロでコピーしても、見えている数値を表示させる方法を知りたいです。 詳しい方、よろしくお願いいたします。

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

専門家に質問してみよう