Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7991 / 13645 ツリー ←次へ | 前へ→

【35624】別シートの行末へコピー オタピョン 06/3/8(水) 17:33 質問[未読]
【35640】Re:別シートの行末へコピー ponpon 06/3/8(水) 21:11 発言[未読]
【35670】Re:別シートの行末へコピー オタピョン 06/3/9(木) 19:55 お礼[未読]
【35651】Re:別シートの行末へコピー ゆと 06/3/9(木) 8:04 発言[未読]
【35671】ありがとうございます オタピョン 06/3/9(木) 20:03 お礼[未読]

【35624】別シートの行末へコピー
質問  オタピョン  - 06/3/8(水) 17:33 -

引用なし
パスワード
   こんにちは。 VBA初心者のため、試行錯誤中です。どなたか、お知恵を拝借させてください。
 シート2の任意のセルをダブルクリックした場合、そのセルの値(テキストです)をシート1の指定行の行末にコピー貼付けしたいのです。

 コピーしたい対象列と貼付け先の列は決まっていて、シート2のB列とD列にあるセルをダブルクリックした場合には、シート1のD列の最終入力セルの下の空欄のセルへコピー・貼り付けし、
 シート2のE列のセルをダブルクリックした場合には、シート1のE列の最終入力セルの下の空欄のセルへコピー・貼り付けしたいのです。

 ちなみに、貼り付け先のシート「台帳」のD列とE列は、2行を結合して1つのセルとしています。つまり、D5とD6は結合して1つのセルとなっているので、D5の1つ下のセルはD7になっています。

 どうか、ご存知の方、教えてください。よろしくお願いします。
 この質問は、3月4日に質問しましたが返信がもらえませんでした。
 自分なりに、考えましたが、上手くいきません。

 ダブルクリックは、   Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) だと分かりました。
 B列は    If .Column <> 2 Then Exit Sub だと思います。
 行末は    Worksheets("Sheet1").Range("B65536").End(xlUp).Row + 1
なのでしょうか

 クリップボードを経由しないですぐに行えるコピペは、よく分かりません。

 よろしくお願いします。

【35640】Re:別シートの行末へコピー
発言  ponpon  - 06/3/8(水) 21:11 -

引用なし
パスワード
   こんばんは。
いくつかわからないことがありますので、質問させてください。

>そのセルの値(テキストです)をシート1の指定行の行末にコピー貼付けしたいのです。
>貼り付け先のシート「台帳」は

貼り付け先は、「シート1」ですか?「台帳」ですか?


結合セルがある場合、マクロはうまく動作しないことがありますので
うまくいかなかったら、ごめんなさい。
シート2のシートモジュールにコピペして実行してみてください。
シート1で考えてます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  
  With Target
    If .Count > 1 Then Exit Sub
    If IsEmpty(.Value) Then Exit Sub
    If .Column = 2 Or .Column = 4 Then
      Sheets("Sheet1").Range("D65536").End(xlUp).Offset(1).Value = .Value
    ElseIf .Column = 5 Then
      Sheets("Sheet1").Range("E65536").End(xlUp).Offset(1).Value = .Value
    End If
  End With
  Cancel = True
End Sub

【35651】Re:別シートの行末へコピー
発言  ゆと  - 06/3/9(木) 8:04 -

引用なし
パスワード
   オタピョンさんこんにちは。
コメントだけですが。

> この質問は、3月4日に質問しましたが返信がもらえませんでした。
> 自分なりに、考えましたが、上手くいきません。
質問確認しましたが、文章が理解できない点が多々ありました。
第三者はシートの構造を見えませんので…。

> ダブルクリックは、   Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) だと分かりました。
記載モジュールを気をつけてください。

> B列は    If .Column <> 2 Then Exit Sub だと思います。
列がB列ではない場合、Subを終了させる。

> 行末は    Worksheets("Sheet1").Range("B65536").End(xlUp).Row + 1
結合セルを対象にしない場合は上記の様な記述と
Worksheets("Sheet1").Range("B65536").End(xlUp).Offset(1).Row
違いは、自分で試してみてくださいね。

> クリップボードを経由しないですぐに行えるコピペは、よく分かりません。
Copy についてHelpを参照してみてください。
引数としては、Destinationの事だと思いますが。

【35670】Re:別シートの行末へコピー
お礼  オタピョン  - 06/3/9(木) 19:55 -

引用なし
パスワード
   ▼ponpon さん:
ありがとうございました。希望どおりの動きができました。

このようなVBAができないかと、3週間近く悪戦苦闘していました。
おかげさまで、今日は満足感で何をするにも気分ウキウキでした。

ご確認いただいた
>>貼り付け先のシートは、
実際は「台帳」と名付けています。一般的なシート名の方がいいかと思い、
「シート1」として質問しました。

シートモジュールに貼り付ける際に、「台帳」として書き換えました。


>結合セルがある場合、マクロはうまく動作しないことがありますので

とご忠告いただきましたが、貼り付け先は結合セルでしたが、無事に動作しました。
ただ、コピー元のセルが2行ごとの結合セルの列があり、そこは動作しませんでしたが
セルの結合を解除して対応しました。

本当に、大感謝しています。ありがとうございました。

【35671】ありがとうございます
お礼  オタピョン  - 06/3/9(木) 20:03 -

引用なし
パスワード
   ▼ゆと さん:
いろいろ教えていただきありがとうございます。
VBAって難しいですが、分かったら世界が変わる気がします。

>> 行末は    Worksheets("Sheet1").Range("B65536").End(xlUp).Row + 1
>結合セルを対象にしない場合は上記の様な記述と
>Worksheets("Sheet1").Range("B65536").End(xlUp).Offset(1).Row
>違いは、自分で試してみてくださいね。

確かめてみます。ありがとうございます。


>引数としては、Destinationの事だと思いますが。

実は、ネットで調べて、Destinationの事だと思っていましたが、自信がないのと、
使い方が分からなかったので記入しませんでした。

Destinationの事をもっと調べようと思います。

ありがとうございました。

7991 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free