人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【エクセルVBA】クリップボードにある言葉をすべて選択したセルの後につけたしたい。

クリップボードにある言葉(例 ぜひご検討下さい。)

をエクセルで選択しているセルの言葉すべてにつけたしたいです。
選択しているセルにはすでにそれぞれ文字列がはいっています。その後に入れたいのです。

例A1とA2をクリックしている。A1には青森県のりんごです。A2にはタイのカレーです。とあります。

マクロを実行すると、クリップボードに現在ある言葉がつけたされて、
A1は青森県のりんごです。ぜひご検討下さい。
A2はタイのカレーです。ぜひご検討下さい。

となります。

マクロのみのご回答をぜひお願いいたします。(関数やその他アドバイスには恐れ入りますが、ポイントをおつけできません)

どうかよろしくお願いいたします。

●質問者: naranara19
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ken3memo
●150ポイント ベストアンサー

途中までしかできていないので、ポイントはいりません。
解説もいらないとのことですが、
参照設定だけ、下記の動画を見てください。

D

VBA クリップボードで検索する
とイロイロなページがヒットします。
http://pckowaza.web.fc2.com/html/excel_vba_clipboard_format_confirm.html
http://officetanaka.net/excel/vba/tips/tips20.htm
https://www.moug.net/tech/exvba/0150091.html

上記を参考にして、

参照設定で
「Microsoft Forms 2.0 Object Library」
と言われるが、見つからない ぉぃぉぃ

で、フォームを挿入すると簡単と書いてあったので、
一つフォームを挿入する

Sub はてな回答テスト20170802()

 Dim CB As Variant 'クリップボードにはさまざまな形式なので
 Dim strADDTEXT As String  'クリップボードから追記するテキスト保管
 Dim selectRANGE As Range  '選択範囲
 Dim n As Integer  'N番目
 Dim y As Integer  '行
 Dim x As Integer  '列
 
  'クリップボード内のデータ種類を判断
 CB = Application.ClipboardFormats
 
 If CB(1) = -1 Then
 Debug.Print "クリップボードには何も入っていません。"
 Exit Sub
 End If

  'テキスト形式か?
 If CB(1) = xlClipboardFormatText Then
  'テキストデータを取り出す
 With New MSForms.DataObject
 .GetFromClipboard  ''変数のデータをDataObjectに格納する
 strADDTEXT = .GetText 'テキストを取得
 Debug.Print strADDTEXT
  '選択されているセルに対して処理を行う
 Set selectRANGE = ActiveWindow.Selection
  '複数セル、範囲もあるのでループさせる
 For n = 1 To selectRANGE.Areas.Count  '※nは1から
  'セルが範囲選択されている可能性があるので、
 Debug.Print n & " " & selectRANGE.Areas(n).Address
 Debug.Print selectRANGE.Areas(n).Rows.Count
 Debug.Print selectRANGE.Areas(n).Columns.Count
 For y = 1 To selectRANGE.Areas(n).Rows.Count  '行のループ
 For x = 1 To selectRANGE.Areas(n).Columns.Count '列のループ
 Debug.Print selectRANGE.Areas(n).Cells(y, x).Address
 Debug.Print selectRANGE.Areas(n).Cells(y, x).Value
 selectRANGE.Areas(n).Cells(y, x).Value = selectRANGE.Areas(n).Cells(y, x).Value & strADDTEXT
 Next x
 Next y
 Next n
 End With
 End If

End Sub

↑のコードを貼り付けて、テストしてみてください。
Debug.Print は 必要ないので、消してください。

動画の後半で、テスト時、Excelのセルをコピーしてクリップボードに入れた場合、
テキストとして 反応しないので、バグってます。
'テキスト形式か?
If CB(1) = xlClipboardFormatText Then
以外を見ると、できると思います。

以上、完璧じゃないので、ポイントはゼロでオッケーです。
解決の糸口、回答のたたき台となれば幸いです。


a-kuma3さんのコメント
ActiveSheet.Paste で、適当なセルに貼り付けて、その Value をくっつけていく方が良いんじゃないかと思ったり。

naranara19さんのコメント
ありがとうございます!僕がやってほしいところは十分にできましたので、ポイントもちろん差し上げます。お付き合いありがとうございました!!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ