• ベストアンサー

エクセルVBA、セルのコピー

VBAにて あるセルに何かを入力した瞬間に、そのセルの内容をコピーし違うセルに貼り付ける という事を実装したいです。 (セルが変更された時に)入力した時に実行されるというVBAはわかりました。 わからないのは、 「入力したセル」をコピーし、違うセルに貼り付ける というところなのですが・・・ ちなみに、貼り付ける場所の指定や入力したセルの内容、などなど かなり条件があるので、関数はで厳しいのでVBAにてお願いいたします。 よろしくお願いいたします!

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

>(セルが変更された時に)入力した時に実行されるというVBAはわかりました。 とのことですので、あえていう事ではありませんが、 シートを右クリックで「コードの表示」を選び以下のコードを貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target(1).Copy Range("A1") Application.EnableEvents = True End Sub どこかのセルの内容が変われば、A1セルにそのセルがコピーされます。 入力ではなく、コピー貼付でも反応します。 (複数の貼付時には範囲の中の左上のセルをA1にコピーします) 「セルの内容をコピー」とあるので値のみのコピーであれば以下をご利用ください。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Range("A1").Value = Target(1).Value Application.EnableEvents = True End Sub

その他の回答 (3)

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

手順: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに記載済みの内容を全て消去する 改めて下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("A:A"))   if h.value > worksheets("Sheet2").range("A1").value then    h.copy worksheets("Sheet2").range("A65536").end(xlup).offset(1)   end if  next end sub ファイルメニューから終了してエクセルに戻る A列のセル(セル範囲)を変更すると、シート2のA1と比較してシート2のA列にコピーする 「指定された列」とかって具体的に何列なのか、「固定のセル」ってどこ番地のセルなのか、どうして説明できないのですかね。わざわざ言い換える手間をかけるだけのいったいどんなナイショなのか、とっても不思議です。 既に一回回答した内容や皆さんから寄せられているマクロからほとんど変える必要ありませんし、もうイチイチ聞きませんのであとは勝手にどうぞ。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

サンプルだけ有れば良いですかね? 1列目を1セルだけ更新した場合、C3セルに更新した値を表示します。 Private Sub Worksheet_Change(ByVal Target As Range)   If (Target.Row <> 1) * (Target.Count <> 1) Then Exit Sub   Application.EnableEvents = False 'イベント停止   Range("C3") = Target.Value   Application.EnableEvents = True 'イベント再開 End Sub

kayomana
質問者

補足

(Target.Row <> 1) * (Target.Count <> 1) この「* 」はどういう意味なのでしょうか?

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

シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("A:A"))  h.copy h.offset(0, 2)  next end sub ファイルメニューから終了してエクセルに戻る A列のセル(セル範囲)を変更すると、C列にコピーする #「入力したセル」とか「あるセル」とか「条件がある」とか、どこからどこに何をしたいのか「具体的な説明」が何一つありません。自力で適切にあなたのヤリタイ事に、しっかり応用してください。

kayomana
質問者

補足

すみません。 「指定された列」のセルを変更すると その値が2シート目の「固定セル」の値より大きければ 2シート目の「指定された列」のデータ最終行の一つ下に入力されるというものです

関連するQ&A

  • エクセルVBAに関して

    VBAの知識があまりないので教えて頂きたいのですが、セルの内容が変更されたら マクロが実行される Private Sub Worksheet_Change(ByVal Target As Range) というのがあるかと思います。 セルに書かれた関数によって、セルの内容が変化したときにマクロが実行されるVBA関数はあるのでしょうか?

  • 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です。 詳しい方いましたらご教授ください。よろしくお願い致します。

  • VBA(エクセル)でコピー+文字を足す

    エクセルのVBAを使ってシート1の指定セルに打った内容を、マクロを実行するとシート2の指定セルに入力できるようにしました。 プログラムは s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") な感じです。 ここに文字を追加して出力したいのですが、どうすればいいのでしょうか? シート2にコピー出力される内容に、 『成績 第○位』という文字を追加して出力したいのです。つまり○の部分にシート1で打った内容(例11)を、 シート2では(例『成績 第11位』)という内容を表示したいのですが、どのようなプログラムを追加すればよいのでしょうか? 本当に困っています。どなたか助けてください。

  • EXCEL VBAでのセル高の範囲指定コピーについて

    いつも活用させて頂いております。 ExcelのVBAで、範囲指定したセルのコピーを行い、コピー先のセルに コピー元のセルの高さをコピーさせるロジックを組みました。 始めは、範囲指定してセル高もコピーしようとしたのですが、 上手く行かなかったので、現在は、ループさせて1行ずつ行っています。 できれば、範囲指定して一括で行いたいのですが、 そのような事は可能なのでしょうか? ご教授願います。

  • エクセルVBAについてお尋ね致します。数式が入力されたセルを異なるセル

    エクセルVBAについてお尋ね致します。数式が入力されたセルを異なるセルの条件によって「値」のみ残す方法を模索しております。 使用する列および行の例 列=A、B  行=5~10、15~20、25~30(A列、B列共通) 上記対象セルの内訳 A列(参照セル)=数値 ※空欄の場合もあります B列(変更セル)=数式(Aセル数値 * ○○%) ※B1セルの例:=IF(A1="","",A1*10%) のような数式が記入されております。 (例) Private Sub CommandButton1_Click() ’参照セルの指定 ("A5:A10","A15:A20","A25:A30") のようなコード*** ※現在はAセルの範囲としておりますが、後に変更の可能性を有しますので範囲指定が可能な形式を望みます。 ’変更セルの指定 セル指定のコード*** ※現在はBセルとしておりますが、これも後に変更の可能性を有しますのでA・B・Cのような入力(もしくはA=1、B=2、C=3)による指定可能な形式を望みます。 ’参照セル(Aセル)に数値が入力されている場合、数式から得られた変更セル(Bセル)の値を”値のみ”で残す。 実行コード*** ※参照セル(Aセル)が空欄の場合は変更を望まないので、変更セル(Bセル)は何も致しません。(数式のまま残す) End Sub このようなマクロを望んでおります。 イメージとしては数値がAセルに入力されていた際に同じ行のBセルにおいて右クリックコマンド内〔コピー〕 → 〔形式を選択して貼り付け〕 → 〔値〕の貼り付けを行うことをご想像下さい。 列や行の変更が予想されるので変更が可能なことを望んでおりますが、結果が伴えば他の体裁は気に致しません。 お手数ですがご教授宜しくお願い致します。 以上

  • エクセルで複数のセルをコピー出来ます?

    エクセルのセルでA1,A3,A7とか離れたセルをコピー する事は出来ますか?関数とかVBAとかじゃなく単純に コピーしたいのですが・・・

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • VBAでセルのコピーがおかしい??バグ??

    VBAでセルのコピーをする際におかしいことがあります。 詳しい方よろしくお願いします。 sheet2のA1からZ5の間に罫線と5個のセルに入力規則を貼ったものをただターゲットセルからオフセットした所へコピーするだけのプログラムなのですが画面更新を停止していてもブルブル揺れてしまいます。 しかし、画面更新は停止しているので動作自体は見えませんが画面が揺れます。何故なのでしょうか? また別の問題ですが、Sheet2の入力規則なのですが名前の定義とINDIRECT関数を利用して連動したドロップダウンリストにしています。 C1セルにドロップダウンリストを作りその内容に応じてD1~D5のリストを変化させています。 =INDIRECT($C$1)と固定してあるのですがこれをSheet1にそのままコピーしていくと値がおかしくなってしまいます。 動的に変化させるいい知恵は無いでしょうか?

  • Excel VBAで可視セルをコピーしようとすると結合されたセルを変更

    Excel VBAで可視セルをコピーしようとすると結合されたセルを変更する事が出来ないとメッセージが出て進めないのは、何故でしょうか。

  • EXCELのセルのコピー

    EXCELで、セル(例えばE8)に「=VLOOKUP(D8,携帯番号一覧!A1:B18,2,0)」と入力して、この関数を下のセル(E9~)にどんどんコピーをしたいのですが、普通にコピーをするとE9のセルでは「=VLOOKUP(D9,携帯番号一覧!A2:B19,2,0)」となってしまいます。「D9」はいいのですが、「A2:B19」ではなく、「A1:B18」のままでコピーをしたいのです。今は、一つ一つコピーしては変更を繰り返していますが、もっと簡単にコピーする方法は無いのでしょうか?

専門家に質問してみよう