• ベストアンサー

Excelのマクロ 

データが入力されている任意のセルでダブルクリックすると、 そのセルから右隣のデータが入力されているセルが全てコピー状態になる。 E1データ有 E2 データ有 E3データ有 E4データ有 E5データ無 E6 データ有 E7 データ有 E8データ無 上の例だと、E2でダブルクリックすると、E2~E4がコピー状態になる。E4でダブルクリックすると、E4だけがコピー状態になる。 以上のことがマクロで可能なら教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

No3です。 先ほどのを実際にテストしてみたら、ひとつ右側(または下)のセルが空白のときはコピーされないことがわかりました。 修正です。 下方向だったら、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Offset = "" Then Exit Sub If Target.Offset(1) = "" Then Cancel = True Selection.Copy Exit Sub Range(Selection, Selection.End(xlDown)).Select Selection.Copy End Sub 右方向だったら Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Offset = "" Then Exit Sub If Target.Offset(0, 1) = "" Then Cancel = True Selection.Copy Exit Sub End If Range(Selection, Selection.End(xlToRight)).Select Selection.Copy End Sub

chamire
質問者

お礼

ありがとうございます。 完璧です。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

sheet1のイベントプロシジュアーに Private Sub Worksheet_SelectionChange(ByVal Target As Range) s = "" If Target.Column = 5 And Target.Row <= 10 Then For J = Target.Row To (Int(Target.Row / 5) + 1) * 5 If Cells(J, "E") <> "" Then s = s & "E" & J & "," End If Next s = Left(s, Len(s) - 1) Worksheets("Sheet1").Range(s).Select Selection.Copy End If End Sub を貼り付けてやってみてください。 上記のコードは、Rows<= 10のところを変えるともっと下まで5行単位で同じことができるはずです。

chamire
質問者

お礼

ありがとうございます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

可能ですよ。 ただ、E1~E8ですと、右隣(行方向)ではなく上から下への列方向ですよ。 1.シートタブを右クリックして、コードの表示。 2.出てきたVisualBasicEditorに下記コードをコピペ 3.Alt+F11キーでワークシートに戻ります。 これでOK. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Offset = "" Then Exit Sub If Target.Offset(1) = "" Then Exit Sub Range(Selection, Selection.End(xlDown)).Select Selection.Copy End Sub もし、E1~E8が書き間違いで、本当は行方向(右側へ)にコピーしたいのなら、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Offset = "" Then Exit Sub If Target.Offset(0, 1) = "" Then Exit Sub Range(Selection, Selection.End(xlToRight)).Select Selection.Copy End Sub です。(コピペはどちらかだけにしてくださいね。両方貼るとエラーになりますよ)

chamire
質問者

お礼

ありがとうございます。 E1~E8は書き間違えでした。

回答No.2

試しにマクロを作ってみました。 該当シートのコードウインドウに貼り付けてお試しください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column <> 5 Then Exit Sub If Target.Value = "" Then Exit Sub Cancel = True If Target.Offset(1) = "" Then Target.Copy Else Range(Target, Target.End(xlDown)).Copy End If End Sub

chamire
質問者

お礼

ありがとうございます。

noname#17648
noname#17648
回答No.1

アドバイス このケースでは E2にカーソルがある場合  Shift + ctrl + → で選択し  ctrl + c でもよいかと思います。

chamire
質問者

お礼

ありがとうございます。