- ベストアンサー
コピペして元のセルに戻るVBAについて
VBAのことで質問させていただきます。 エクセルのバージョンは2010です。 3行目から100行目までの間にカーソルがあった場合、その行のA列に異動し、 その値をコピーし、A2のセルに貼りつけ、コピーしたセルに戻る、というVBAを 作れたらと思っているですが、可能でしょうか? VBAは本を読んでかじったりはしているのですが、自分では組めないんです。 狩野であれば、どなたかよろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
あなたがヤリタイ事: >3行目から100行目までの間にカーソルがあった場合、その行のA列に異動し、 >その値をコピーし、A2のセルに貼りつけ、コピーしたセルに戻る、 ヤリタイ事の整理: 1:3行目から100行目までの間にカーソルがあった場合 2:その行のA列に異動し、… コピーしたセルに戻る、 3:その値をコピーし、A2のセルに貼りつけ 回答したマクロ: sub macro2() if activecell.row < 3 or activecell.row > 100 then exit sub ’←1を実施 cells(activecell.row, "A").select ’←2を実施 range("A2").value = activecell.value ’←3を実施 end sub という意味づけになります。
その他の回答 (5)
- tom04
- ベストアンサー率49% (2537/5117)
No.2です。 >また、ダブルクリックしなくても(ワンクリックでカーソルをセルに合わせただけでも)、 とありましたので・・・ 本来ですと、間違ったセルを選択してもマクロが走ってしまいますので、 前回、ダブルクリックの方法を提案したのですが、 シングルクリックでやりたい場合の一例です。 シートモジュールですので、画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてセルを選択してみてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'この行から With Target If .Row >= 3 And .Row <= 100 Then Cells(.Row, "A").Copy Range("A2") Cells(.Row, "A").Select End If End With End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
お礼
親切に丁寧な回答をしていただき、ありがとうございます。 インターネットで調べたら、だいたい意味がわかった気がします。 (自分では到底組めなさそうですが) 勉強になりました。
- keithin
- ベストアンサー率66% (5278/7941)
ん? >コピーしたセルに戻る とは「コピーしたときに選ばれていたセル」に戻る,という意味じゃなかったんですか。 まぁでも、単にセルを選ぶ命令を追加するだけですが。 sub macro2() if activecell.row < 3 or activecell.row > 100 then exit sub cells(activecell.row, "A").select range("A2").value = activecell.value end sub
お礼
再度、お答えいただき、ありがとうございます。 ただ、「range("A2").value = activecell.value」の部分が理解できなかったのですが、 教えていただけると幸いです。 よろしくお願いします。
- keithin
- ベストアンサー率66% (5278/7941)
sub macro1() if activecell.row < 3 then exit sub range("A2").value = cells(activecell.row, "A").value end sub とかでいいです。
お礼
ありがとうございます。 しかし、実行してみたのですが、A2にコピペした後、 最初のセルのあった行のA列にカーソルが移動してくれません。 ご教授していただけるとありがたいです。 よろしくお願いいたします。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! こういうコトですかね? ダブルクリックでの方法としています。 シートモジュールです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) With Target If .Row >= 3 And .Row <= 100 Then Cancel = True Cells(.Row, "A").Copy Range("A2") Cells(.Row, "A").Select End If End With End Sub 適当なセルでダブルクリックしてみてください。m(_ _)m
お礼
ありがとうございます。 書いていただいたプログラムをシートのモジュールに貼り付けたのですが、 なぜか起動しません。(というか、開発タブ→マクロで表示されません) また、ダブルクリックしなくても(ワンクリックでカーソルをセルに合わせただけでも)、 起動するようなマクロはできないでしょうか。 何度も申し訳ありませんが、ご教授いただけると幸いです。
- denbee
- ベストアンサー率28% (192/671)
可能です。 マクロの記録機能を使ってその操作を行えば、質問者が必要としているコードが記録されます。
お礼
自動記録では無理だと思います。
お礼
丁寧に教えていただきありがとうございます。 理解できました。