Excel VBAで選択範囲の値を挿入する方法とは?

このQ&Aのポイント
  • Excel2010で作成された選択範囲のセルを別シートに参照しています。VBAを使用して、値のみを挿入する方法を教えてください。
  • 参照しているセルに数式が含まれている場合、現在のコードでは数式もコピーされます。値のみをコピーする方法はありますか?
  • また、指定した範囲に挿入する場合、Insertメソッドを使用することで挿入が行われますが、具体的な使用方法がわかりません。
回答を見る
  • ベストアンサー

ExcelでVBAで選択範囲の値のみを挿入

始めて質問いたします。よろしくお願いします。 Excel2010にて作成された選択範囲(Sheet1)のセルを同じブックの別シート(Sheet2"A1:AB20")で参照しています。その参照部分をVBAにてコピーして、そのすぐ下("A21:AB40")に挿入していきます。自分で作成したコードでは、数式もコピーするので当然参照しているセルからずれてしまいます。(Sheet1)の数値はその度に変わりますので絶対参照にすることもできません。 作成したVBAに値のみをコピーするコードを追加したいので教えて下さい。 Private Sub CommandButton1_Click() Sheets("Sheet2").Range("A1:AB20").Copy Sheets("Sheet2").Range("A21:AB40").Insert Shift:=xlDown Application.CutCopyMode = False End Sub このコードだと、参照している "A1:AB20" がテキストなどの場合はうまくいきます。数式が入っていると当然ですが、数式をコピーしてしまいます。 いろいろなサイトを見ていると Paste:=xlPasteValues  が、値のみペーストだと書いてありますが、適応の仕方がわかりません。 Insert の場合はどうなるのかもわかりません。 同じような質問も探しましたが見つからなくて困っています。 よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>値のみをコピー private sub CommandButton1_Click()  worksheets("Sheet2").range("21:40").insert shift:=xlshiftdown  worksheets("Sheet2").range("A21:AB40").value = worksheets("Sheet2").range("A1:AB20").value end sub ぐらいでいいです。

yuko5367
質問者

お礼

出来ました。ご回答いただいたお二人のコードを交ぜて使ったらうまくいきました。 本当にありがとうございました。 また、よろしくお願いいたします。

yuko5367
質問者

補足

ご回答誠にありがとうございます。 早速試してみました。 値のみの複写も問題無く出来ています。そして続けてボタンを押しても問題無く出来ています。 ただ、もう一つだけお願いがあります。 最初のコードでセル範囲と同じだけのセルを挿入するからでしょうか、書式が反映されません。 参照範囲に一部書式を変更(セルの結合など)した部分があります。これも一緒に複写することは出来ないでしょうか? 値のみとか言っておきながら申し訳ありません。 ご伝授お願いいたします。

その他の回答 (1)

noname#200298
noname#200298
回答No.2

こちらでのコードの形ではいかがでしょうか? Private Sub CommandButton1_Click()  Sheets("Sheet2").Range("A1:AB20").Copy  Sheets("Sheet2").Range("A21:AB40").PasteSpecial Paste:=xlPasteValues  Application.CutCopyMode = False End Sub

yuko5367
質問者

お礼

出来ました。ご回答いただいたお二人のコードを交ぜて使ったらうまくいきました。 本当にありがとうございました。 また、よろしくお願いいたします。

yuko5367
質問者

補足

早速のご回答ありがとうございます。 試してみました。セル範囲のペーストはうまくいき、値のみが複写されますが、続けての挿入が出来ません。私の説明不足だと思いますが、ボタンを押す毎に挿入を続けたいのです。 でも、PasteSpecialの記述の仕方がわかりました。 あと、挿入(Paste)を続ける方法はありますか? 今回のご回答感謝いたします。

関連するQ&A

  • VBA 数式を残して値をクリアについて

    VBA初心者です。 数式の入った表で、数式を消さずに値のみクリアしたいのですが、、、 Sub 指定のセル範囲の値だけをクリアする() Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents Sheets("Sheet1").Range("A1:C5").SpecialCells(xlConstants, 23).ClearContents End Sub とやってもうまくいきません。 どこか間違っていますか?

  • エクセルVBAで選択していないシートのセルコピー

    エクセルVBAで質問させてください。 現在選択していないシートから、セルの書式ごとコピーして貼り付けたいのです。 たとえば Sheets(1).Range(Cells(1, 1), Cells(4, 1)).Copy Sheets(2).Range("A1") 等とすると、Sheets(2)が選択されている状態だとエラーになってしまいます。 おそらく、Copyメソッドというのは、選択されているシートにのみ有効だからなのではないか、と思いますが、セルの値だけでなくフォントその他の書式を、別のシート(現在アクティブでない)から持ってくる方法はありますか?

  • 【エクセルVBA】「インデックスが有効範囲にありません」というエラーがでます

    こんにちは。VBA初心者ですが、下記コードを実行すると エラーが出てしまいました。 シート(シート1)のセルから別シート(シート2)のセルに 値のみコピーするVBAを組んでいます。 適宜、シート1に入力したものを読みこませていきたいので 変数を使用しています。 ------------------------------------------------------------- Sub セルのコピー() Dim X As Integer X = 3 Y = 2 Do While Cells(X, "A").Value <> "" Sheets("シート1").Cells(X, "A").Copy Sheets("シート2").Activate Sheets("シート2").Cells(Y, "F").PasteSpecial _ Paste:=xlPasteValues ⇒エラー対象 Application.CutCopyMode = False X = X + 1 Y = Y + 1 Loop End Sub ------------------------------------------------------------ つまり、シート1のA3セルを先頭にA4,A5,A6・・・と続くセルの値 をシート2のF2を先頭としたセル(以下、F3,F4・・・)に値のみコピー していきたいのですが。。 実行すると「インデックスが有効範囲にありません」というエラーが でます。デバック対象は上記、「⇒エラー対象」の構文です。 変数の設定の仕方がおかしいのでしょうか。。 ご教示のほどよろしくお願いいたします。

  • EXCELで値だけを別シートへコピーVBA

    EXCELの表でテーブルにしてある値だけを 別シートへコピーするVBAの記述が知りたいです 例えば Sheet1の ”テーブル” で作られている A1:D4の表があるとして それを Sheet2のA1へ ”値” だけコピーしたいのですが ちなみに自分の作ったコードですが sub 別シートコピペ() sheet1.range("a1:d4").CurrentRegion.copy sheet2.range("a1") end sub でやったのですが REFのオンパレードで全然コピーできないです どなたか教えていただけませんか? ポイントはテーブルで作られているものの 値だけを シート2へ貼るコードを知りたいです。 よろしくお願いいたします

  • VBAで列全てに式を入れたいんです。

    エクセルで 例えばセルA1,B1,C1を選択して 3つのセルの値をD1に値としてコピーする事は出来ませんか? A1,B1,C1はVBAで得た値です。 関数で1つにすると、もう一度コピーして値として 貼り付けなけねばなりませんので・・・ VBAは他の方に作成して頂いたので、 知識としてはありません。 VBAでの追加の仕方があればお教え下さい。 下記の回答を頂きまして 上手くいったのですが、 その式を、列全てで行うのはどうすればいいのでしょうか? 「 次のコードをEnd Subの上の行に挿入してください With Sheets("シート名") .Range("D1") = .Range("A1") & .Range("B1") & .Range("C1") End with 」 すみません。誰かお教え下さい。

  • Excel VBAでシートを別なBookにするには?

    Book ABC.xls の Sheet("TEST") を書式と値(数式でなく)だけコピーし別なBookとして保存したいのです。 その際、Sheets("LOGIC").Range("A1")を、マクロで1回目は2、2回目は3とし、12回目の13まで行います。Sheets("TEST")はSheets("LOGIC").Range("A1")を参照しているので、その結果として、Sheets("TEST")の値は当然12通りに変化します。 新たに自動作成される別なBookは Sheet1~Sheet12の12枚のシートをもち、それぞれがABC.xls の Sheets("TEST") の12通りのコピーとなるようにしたいのです。 このようなマクロはどう作ればいいのでしょうか? お手上げです。何卒よろしくお願いします。

  • エクセルVBA:繰り返し処理について

    エクセルVBA初心者です。どうかご指導お願いします。 シート1に入力されたデータベースがあります。 B列には氏名が入力されています。 B2の値で絞りこんで、シート2に貼り付け、 B3の値で絞りこんで、シート3に貼り付け、 B4の値で絞り込んでシート4に貼り付けてB列の値が""(空白)になるまで繰り返すコードの書き方を教えてください。 さらに、B列には、当然同じ氏名が何回も入力されているので、前に一度出た人はパスするというようにしたいのです。 下記コードは、「B2の値で絞りこんで、シート2に貼り付け」だけをしたものですが、このコードを応用して作りたいのです。ご指導お願いします。 Sub test01()  With sheets("sheet1")Range("A1")   .AutoFilter field:=2, Criteria1:=Range("B2")   .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")   .AutoFilter  End With End Sub

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

  • Excel VBA 数式を参照範囲分コピーする方法

    作業環境は以下の通りで、Excelの知識は初心者です。 OS:Windws7 / 使用ソフト:Excel2003 商品.xlsには3つのシートが存在します。 シートはそれぞれ、1行目は見出し行としています。 ・商品データが入った「生データ」シート ・「生データ」シートから必要な情報を参照や加工する数式がA2~AG2に入った「詳細」シート ・「生データ」シートから必要な情報を参照や加工する数式がA2~G2入った「カテゴリ」シート。 「詳細」「カテゴリ」共に数式の入った行を「生データ」の数(行)に合わせて、オートフィルコピーし、最終的にcsvファイルを作成します。 他に、商品.xlsと同じ作りのファイルが複数あり、それらは「生データ」の行数がバラバラの為、VBAで処理したく検索したところ以下のページを発見しました。 http://www.excel.studio-kazu.jp/kw/20110513073632.html VBAは初心者の為、このVBAの意味を検索しながら以下の様に理解して修正したのですが、思うように処理できずにいます。 何が違っているか教えて頂けないでしょうか。 また、できれば数式だけが入ったファイルを雛形として用意し、 生データだけのファイルは別に持ち、処理する形が望ましいのですが VBAで可能な事なのでしょうか? lasとは、生データの最後尾を定義 詳細のA1~AG2セルから1つ下のセルの値を消去し、2行目をコピーし 生データの2行目~最後尾までの行分の数式を貼り付ける カテゴリにも同じ処理を与える Sub データ抽出() Dim las As Long las = Sheets("生データ").Range("A" & Rows.Count).End(xlUp).Row With Sheets("詳細") .Range("A1").CurrentRegion.Offset(1).ClearContents .Range("2:2").Copy .Range("2:" & las).PasteSpecial xlFormulas End With With Sheets("カテゴリ") .Range("A1").CurrentRegion.Offset(1).ClearContents .Range("2:2").Copy .Range("2:" & las).PasteSpecial xlFormulas End With End Sub

  • VBA シート間の同期(列、行、選択範囲)

    初めての質問となります。 よろしくお願いいたします。 シート間の同期でセルの同期は他の質問を参照してできましたが、 ”行”や”列”での同期/相互参照は、どのように書けばいいのでしょうか。。 下記、sheet1”A1”とsheet2の”B1”に記載したcodeです。 'sheet1に以下を記述 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("Sheet2").Range("$B$1").Value = Sheets("Sheet1").Range("$A$1").Value End If End Sub 'sheet2に以下を記述 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("Sheet1").Range("$A$1").Value = Sheets("Sheet2").Range("$B$1").Value End If End Sub 【質問内容】 sheet1の”A列”とsheet2の”B列”はどう書くのでしょう? 上記の方法では無理、または負荷が大きい場合は、 sheet1の”A1:C3”とsheet2の”D4:F6”はどう書くのでしょう? という内容になります。 先日からVBAを触り始め、 自分なりに調べて一通り試してみましたが解決できませんでした。。 お手数おかけしますが何卒よろしくお願いいたします。

専門家に質問してみよう