- ベストアンサー
エクセル2013 マクロをご教示ください
Sheet1 4行目に見出し。 5行目A列からU列までデータが入力されています。 中には空白セルもあります。 1行目から4行目迄はロックされています。 5行目以降の、あるセルをアクティブにすると、 該当行のC列からS列迄を Sheet2のA列を先頭に 5行目にコピペするには どうしたら宜しいでしょうか? Sheet2も4行目が見出しです。 Sheet1でのアクティブセルは 複数の場合もあります。 ただし、同じ行でセルを複数アクティブにしても Sheet2への貼り付けは1行とします。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
シート1のシート名タブを右クリックしてコードの表示を選ぶ 現れたシートの記載内容を全て消去してから、下記をコピー貼り付ける private sub Worksheet_SelectionChange(byval Target as excel.range) on error resume next worksheets("Sheet2").rows("5:" & rows.count).clearcontents application.intersect(selection.entirerow, range("C5:S" & rows.count)).copy _ destination:=worksheets("Sheet2").range("A5") end sub ファイルメニューから終了してエクセルに戻る 5行目以下のセルを選択する。 #まだ何か違う事がしたいのでしたら、一度ご相談は解決で閉じてから、ホントにヤリタイ事を全部書いて新しいご質問として投稿し直して下さい。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
#複数のセルを選択したとき、その中で一つだけ、逆反転になってるセルをアクティブセルと言います。 #わざわざ複数セルが選択されてる状況をご相談で想定するのであれば、当然複数行に渡って選択されている状態も考慮すべきです。 >5行目以降の、あるセルをアクティブにすると、… シート1でシート名タブを右クリック、コードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_SelectionChange(byval Target as excel.range) if activecell.row < 5 then exit sub application.intersect(activecell.entirerow, range("C:S")).copy _ destination:=worksheets("Sheet2").range("A5") end sub ファイルメニューから終了してエクセルに戻る 5行目以降のセルをアクティブにする。
補足
>当然複数行に渡って選択されている状態も考慮すべきです。 稚拙な文章ですみません。「アクティブセル」とは、選択されているセルのつもりでした。 なので、下記文内の「アクティブセル」を 「選択セル」に置き換えてください。 >Sheet1でのアクティブセルは >複数の場合もあります。 >ただし、同じ行でセルを複数アクティブにしても >Sheet2への貼り付けは1行とします。 または、上記条件とは異なりますが ご教示頂いたマクロは常に Sheet2の5行目に貼り付けられますが Sheet1でのアクティブセル該当行がマクロ実行後 6行目、7行目・・・と追加されるにはどうしたら宜しいでしょうか? ただし、Sheet2への貼り付け内容が同じだった場合は 注意喚起のため メッセージで 「重複データが存在します」を表示したいです。
お礼
ありがとうございます。 もう少し、質問内容を纏めてから再投稿します。