こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのマクロで文章を作成し、コピーする方法について

エクセルのマクロについて教えていただきたいです。
私は、下記に記載しているような、あるセルをダブルクリックするとそこに他のセルの内容を一部引用して
文章を作成し、そのセルをコピー状態(Ctrl+C)にするというマクロを作成しています。

下記のマクロでも動くのですが、実際はもっと長い文章になってしまうので、エクセルがとても大きなサイズに
なってしまいます。
そこで、セルをダブルクリックすると下記と同じように文章を作成し、それをクリップボードへ格納し、セルには
表示しない方法はないかと考えております。
どなたか、いい方法をご教授お願いいたします。
※文章が下手で申し訳ございません・・・

☆まとめ
~現在のマクロ~
(1)Y列で8行目以上をダブルクリック
(2)ダブルクリックしたセルにマクロで文章を記入
(3)(2)のセルをコピー状態(Ctrl+C)にする
(4)Ctrl+Vで(2)のセルの内容を掲示板などに貼り付け可能

~希望マクロ~
(1)Y列で8行目以上をダブルクリック
(2)ダブルクリックしたセルには何も入れず、クリップボードへ文章を格納
(3)Ctrl+Vで(2)のセルの内容を掲示板などに貼り付け可能


☆現在のマクロ
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Long '変数宣言
If Target.Column = 25 And Target.Row > 7 Then 'ターゲットが25列目(Y列)で8行目以上

r = Target.Row 'ターゲットの行番号を取得し変数rに代入

Target = Range("Q" & r) & "さま" _
& Chr(&HD) & Chr(&HD) & "商品の発送が完了致しましたので、ご連絡致します。" _
& Chr(&HD) & Chr(&HD) & "発送情報は以下となります。" _
& Chr(&HA) & "----------------------" _
& Chr(&HA) & "日付指定:" & Range("U" & r) _
& Chr(&HA) & "時間指定:" & Range("V" & r) _
& Chr(&HA) & "問い合せNo:" & Range("W" & r) _
& Chr(&HA) & "----------------------" _

Cancel = True 'ダブルクリック状態をキャンセル
Target.Copy 'ターゲットをコピー

Else
Exit Sub

投稿日時 - 2009-04-15 23:46:36

QNo.4882699

すぐに回答ほしいです

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

他の質問か、同一人か判らないが、数日前の質問で、現データはエクセルシートでも、最終完成文章をCSVファイルを作成するのはどうかと示唆した。そういうのはどうか。
ーーー
質問の表現が質問者の(多分我流の)VBAコード中心で、読者には推測や解読が大変。
簡単な(とは5行・数列ぐらいの実例と言う意味)模擬実例(需要な特徴は保存しつつ)を質問に載せて、虚心になって、処理ロジックや使う道具立て(この例ではクリップボード利用)、コーディングは回答者の経験や叡智に任せるのはどうか。質問者が自分の深くない経験からの思いつきの路線(クリップボード)に拘り、その延長線で、自分のコードを修正指摘してくれというのが多いが、本当の勉強にならない。
いままで回答者は、質問者の路線に易々と応じて、回答している例が多いが。

投稿日時 - 2009-04-16 09:46:15

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

VBEの参照設定から「Microsoft Forms 2.0 Object Library」を参照するよう設定します。(バージョンは違うかもしれません)
その上で下記のように変更すればうまくいくと思います。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Long '変数宣言
'データオブジェクトの浅間
Dim myDO As MSForms.DataObject
Dim st As String

Set myDO = New MSForms.DataObject

If Target.Column = 25 And Target.Row > 7 Then 'ターゲットが25列目(Y列)で8行目以上

r = Target.Row 'ターゲットの行番号を取得し変数rに代入

'stに文字列を格納します
st = Range("Q" & r) & "さま" _
& Chr(&HD) & Chr(&HD) & "商品の発送が完了致しましたので、ご連絡致します。" _
& Chr(&HD) & Chr(&HD) & "発送情報は以下となります。" _
& Chr(&HA) & "----------------------" _
& Chr(&HA) & "日付指定:" & Range("U" & r) _
& Chr(&HA) & "時間指定:" & Range("V" & r) _
& Chr(&HA) & "問い合せNo:" & Range("W" & r) _
& Chr(&HA) & "----------------------" _

Cancel = True 'ダブルクリック状態をキャンセル
'文字列stをクリップボードに送信します。
With myDO
.SetText st
.PutInClipboard
End With

Set myDO = Nothing

Else
Exit Sub

投稿日時 - 2009-04-16 00:15:26

あなたにオススメの質問