• ベストアンサー

VBA セルの値を別セルにコピーするには

VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.8

> Worksheets("リスクアセスメントシート").Range("X9").Formula = Worksheets("リスクアセスメントシート").Range("D8").Formula > X9に関数で抽出した値を、D8へ代入するとX9とD8が空欄になってしまいます。 コードはD8をX9に代入となっています。代入の場合は右辺を左辺に代入となります。 一番最初の回答でも質問のコードをもとにして右辺(Sheet1)を左辺(Sheet2)にとなっていると思いますよ。

nadeko666
質問者

お礼

おかげさまで無事代入できるようになり、入力フォームの入力作業が簡略化できました。 ありがとうございました。

nadeko666
質問者

補足

>一番最初の回答でも質問のコードをもとにして右辺(Sheet1)>を左辺(Sheet2)にとなっていると思いますよ。 右辺左辺を逆にしていました。 Worksheets("リスクアセスメントシート").Range("D8").Value = Worksheets("リスクアセスメントシート").Range("X9").Value にしたところ結合セルに値を代入することができました。

その他の回答 (7)

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.7

ところで、回答で何度か示したコードを自身の環境に変更して試したのしょうか。

nadeko666
質問者

補足

初歩的な質問にお付き合いいただき、本当にありがとうございます。 >ところで、回答で何度か示したコードを自身の環境に変>更して試したのしょうか。 Sub Step1_copy() Worksheets("リスクアセスメントシート").Range("X9").Formula = Worksheets("リスクアセスメントシート").Range("D8").Formula End Sub 補足足らずでした。別シートのセルの値ではなく、同一のシートのセルからセルへのコピーです。 仮ですが、X9に関数で抽出した値を、D8へ代入するとX9とD8が空欄になってしまいます。 .Formulaを.Valueにしても同じ現象になります。 D8が結合セルになっているからでしょうか。 ご教授ください。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.6

別シートと書きましたが質問のコードが別シートになっているのでそのようになっていると思ってますが > 代入する方法だとコピー元の抽出関数を入れたセルも抽出した値になってしまい というのは、たとえばE1の値をC3に代入したらE1も書き換わるということですよね。 コードを見直した方がいいです。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.5

> 入力フォームに必要な情報をINDEX+MATCH関数で抽出した値をコピーしようとしています。 > 抽出関数で出た値→入力フォームに貼り付け 値をコピーしたいのですよね。数式をコピーする必要はないのでは? > 代入する方法だとコピー元の抽出関数を入れたセルも抽出した値になってしまい、関数が抽出した値に上書きされてしまいます。 別のシートの入力フォームのセルに代入するのにコピー元が書き換わるわけはないでしょう。 どこかコードが間違ってます。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.4

E1の数式によってはNo.2のパターンでもいけると思いますので色々試してみてください。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.3

「仮に」のように位置が違うとしたら Worksheets("Sheet1").Range("E1").Copy Worksheets("Sheet2").Range("C3").PasteSpecial _ Paste:=xlPasteFormulas E1の式の参照位置によってはC3が#REF!になるとは思いますが、その場合は絶対参照にするとか対応が必要ですね。 数式を毎回コピペする必要があるのでしょうか。

nadeko666
質問者

補足

補足回答頂きありがとうございます。 数式を毎回コピペする必要があるのでしょうか。 >> 入力フォームに手打ち・ドロップダウンリストから選択する手間を省こうと、フォーム横の空いてるスペースに製品IDと箇所CD(検索値)を入力し、入力フォームに必要な情報をINDEX+MATCH関数で抽出した値をコピーしようとしています。 抽出関数で出た値→入力フォームに貼り付け といったイメージです。 代入する方法だとコピー元の抽出関数を入れたセルも抽出した値になってしまい、関数が抽出した値に上書きされてしまいます。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.2

> 結合セルにコピーペーストするとエラーになる 代入したらエラーにはならないですよね。 > コピー元の関数を入れたセルにも関数で抽出した値が上書きされてしまい、関数が消えてしまいます。 質問のコードをもとにした場合 Worksheets("Sheet2").Range("A1:B10").Formula = Worksheets("Sheet1").Range("A1:B10").Formula にすればいいだけだと思います。

  • kkkkkm
  • ベストアンサー率65% (1608/2445)
回答No.1

> VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 という事は、たとえばのコードを示してもそれを自身の環境に合わせることはできないという事だと思いますので、セルの位置とかを具体的に記載して、どこをどこにコピーしたいのか、貼り付けする元セルを移動させるとはどのように移動するのか等を記載しないと回答ができないと思います。 値貼り付けならコピー貼り付けでなくでも代入すれば早いです Worksheets("Sheet2").Range("A1:B10").Value = Worksheets("Sheet1").Range("A1:B10").Value これのA1:A10が変化してA1:B10とC1:D10にデータを代入するなら、 Worksheets("Sheet2").Range("A1:B10").Value = Worksheets("Sheet1").Range("A1:B10").Value Worksheets("Sheet2").Range("C1:D10").Value = Worksheets("Sheet1").Range("C1:D10").Value とは書かずに たとえば以下のように変化します。 Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") For i = 1 To 3 Step 2 ws2.Range(ws2.Cells(1, i), ws2.Cells(10, i + 1)).Value = ws1.Range(ws1.Cells(1, i), ws1.Cells(10, i + 1)).Value Next End Sub

nadeko666
質問者

補足

回答頂きありがとうございます。 どこをどこにコピーしたいのか、貼り付けする元セルを移動させるとはどのように移動するのか等を記載しないと回答ができないと思います。 >>画像を添付するべきでした。失礼いたしました。 1)既存の入力フォーム(Sheet)の横スペースにIDを入力するとINDEX関数+MATCH関数で別シートから製品名とIDに紐付いている情報を抽出(仮にE1セルとします) 2)抽出した情報をVBAで入力フォームの入力欄に貼り付け (仮にC3セルとします) 結合セルにコピーペーストするとエラーになるので予め、入力欄の結合されたセル枠を結合しないにします。 代入するVBAは、私も試してみましたが、コピー先のセルに貼り付けはできたものの、コピー元の関数を入れたセルにも関数で抽出した値が上書きされてしまい、関数が消えてしまいます。

関連するQ&A

  • 指定セルをコピー

    A2~A5,D2~D5,G2~G5をコピーしJ~P列2~5行に値を貼付け続いて9~13行、16~20行もJ~P列に貼り付けたいのですが7~8,14~15行にはセル結合されているところもあります。VBAで下記コードを入力しましたがあまりにデータが多く何か良い方法VBAコードはありますか。(For~Nextなど使用すれば良いのでしょうか) 環境はoffice2013です。 Range("A2:A6").Select Selection.Copy Range("J2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D2:D6").Select Selection.Copy Range("M2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False  Application.CutCopyMode = False

  • 【Excel VBA】シートコピー時、マクロコードはコピーしたくない

    ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

  • エクセル コピー ペースト 形式 すべて  マクロ

    エクセルの同じシート内で、セルをコピーし、他のセルにペーストするマクロを利用しております。 Worksheets("data").Range("A45").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False しかし、このマクロでは、ペーストする際に、「形式を選択して貼り付け」の「値」のみが貼り付けられてしまいます。 数式を残した状態でペーストしたいので、「すべて」の状態で貼り付け希望です。 なお、このシートは表示しない状態で使用するため、シートを選んでセルを選択してコピーする方法はできません。(マクロでエラーとなってしまいます。) どうか、よろしくお願いします。

  • 値の貼り付けをするVBA

    セルA1をコピーして、セルA2に値の貼り付けをするVBAを作っています。 下記のように記述しているのですが、 セルA2に値の貼り付けをするときに小数点第3ケタ目以下はデータを捨てることは出来ますでしょうか? セルの設定で小数点2桁目まで表示するのではなくて、セルに入力するデータを小数点2桁の数字にしたいです。 range("A1").Copy Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

  • エクセルVBAで値の貼り付けができない

    色々調べたのですが、出来ない理由が見つけられません。よろしくお願い致します。 計算式の入っているセルをマクロで貼り付けしようと思っているのですが、 貼り付ける際、値の貼り付けにしたいのです。 下記の通りすると計算式のまま貼り付けされてしまいます。 どなたか教えて下さい。お願い致します。 Selection.Copy wsKei.Select wsKei.Range("A" & intLinekeistr & ":A" & intLinekei - 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False エクセルは、2007 PCはvistaです。

  • マクロ

    値のみを貼り付けることが多いので、形式を選択して値のみを、貼り付けるを自動マクロで記述しましたが、エラーが出てしまいます。 下記が記述しましたマクロです。 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False どこが間違っているのか判りません。 ご指導のほどよろしくお願いいたします。

  • 曜日別Excelセルにデータコピー

    A1セルに2014/3/18と入力した際、入力ボタンで図のようにA2~A11に下記の式で火曜日のデーターE2~E11が入力出来たのですがA1の日付(曜日)を変更した際、入力ボタンを押すごとにA2~A11の値がその曜日ごとのデーターに変わるようにしたいのですが。VBAコードをお解りになる方よろしくお願いします。 Sub 入力() ActiveCell.Value = Range("D2:D11").Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub

  • VBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

    マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。 マクロの内容は、任意の範囲をコピー、新規book追加し、 新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。 いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。 下記にマクロ内容全部記載します。 よろしくお願いします。 ********************************************************* ********************************************************* Sub 日報別ファイルに保存したい1() Worksheets("日報").Range("A3:AF36").Copy With Workbooks.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Cells.Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("A1").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ApplicationDisplayAlerts = True '同名FILEが存在する場合' ActiveWorkbook.SaveAs Filename:= _ "c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _ , FileFormat:=xlNormal .Close file End With End Sub

  • シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

    シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

専門家に質問してみよう