
セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。
http://oshiete.goo.ne.jp/qa/5650002.html#16327676 の回答ANo2を見て
Sub test01()
Dim myData As DataObject
Dim myCb As Variant
Dim x
x = "TESTデータです。"
Set myData = New DataObject
myData.SetText x
myCb = myData.GetText
myData.PutInClipboard
End Sub
は出来ました。
そこで、セル範囲A1:B3をクリップボードに貼ろうといろいろやってみました。
一応、下記でできましたが、実際にはもっと広い範囲を取り込みたいので、もっと簡単な方法はないでしょうか?
Sub Clip()
Dim myStr As String
Dim myData As DataObject
Dim myCb As Variant
Set myData = New DataObject
With Sheets(1)
myStr = .Range("A1").Value & ":" & .Range("B1").Value & _
vbNewLine & .Range("A2").Value & ":" & .Range("B2").Value & _
vbNewLine & .Range("A3").Value & ":" & .Range("B3").Value
End With
myData.SetText myStr ', 1
myCb = myData.GetText
If MsgBox("データ" & vbNewLine & myCb & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then
Exit Sub
End If
myData.PutInClipboard
End Sub
No.5ベストアンサー
- 回答日時:
横いりすみません。
必要範囲をCoryしたら、
DataObjectのGetFromClipboardメソッドを使ってクリップボードデータを取得します。
そこからさらにDataObjectのGetTextメソッドを使うとテキスト文字列だけ取り出せます。
その後、DataObjectをClearして
あらためて取り出したテキスト文字列をSetTextすれば良いです。
各メソッドについては、DataObjectのヘルプを見て下さい。
ただし、OutlookならCtrl+VまでVBAでやれば良い気がしますが。
http://outlooklab.wordpress.com/
この辺りを参考にしてみると良いかと。
Sub try()
Const olFolderInbox As Long = 6
Const olMailItem As Long = 0
Dim obj As Object
Dim ins As Object
Dim m As Object
Dim tmp As String
If TypeName(Selection) <> "Range" Then Exit Sub
Selection.Copy
With New DataObject
.GetFromClipboard
tmp = .GetText
.Clear
End With
Application.CutCopyMode = False
On Error Resume Next
Set obj = GetObject(, "Outlook.Application")
On Error GoTo 0
If obj Is Nothing Then
Set obj = CreateObject("Outlook.Application")
obj.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Display
End If
For Each ins In obj.Inspectors
With ins.CurrentItem
If .MessageClass = "IPM.Note" Then
If Not .Sent Then
Exit For
End If
End If
End With
Next
If ins Is Nothing Then
Set m = obj.CreateItem(olMailItem)
Else
Set m = ins.CurrentItem
Set ins = Nothing
End If
m.body = tmp
m.Display
Set m = Nothing
Set obj = Nothing
End Sub
No.7
- 回答日時:
#3です。
何故か盛り上がっていますね。一つ思いついてしまいました。UserFormに、テキストボックスと、コマンドボタンを一個置きます。
UserForm1をモードレスで表示させ、セルを選択してコマンドボタンを押すと、テキストボックスや、単独セル内に貼り付けられる形で文字列がクリップボードにコピーされますので、質問者様のなさりたい事が出来ているのではと思います。
UserForm1のコードは下記だけです。ご参考まで。
Private Sub CommandButton1_Click()
Selection.Copy
With Me.TextBox1
.Paste
.SetFocus
.SelStart = 0
.SelLength = Len(Me.TextBox1)
.Copy
End With
End Sub
Private Sub UserForm_Initialize()
Me.TextBox1.MultiLine = True
End Sub
No.6
- 回答日時:
げっ
>必要範囲をCoryしたら、
必要範囲をCopyしたら、
..です...orz
No.4
- 回答日時:
こんな感じじゃ?
Sub てすと()
Dim rC As Long, rR As Long
Dim strT As String
Dim myStr As String
Dim myData As DataObject
'Dim myCb As Variant
Set myData = New DataObject
Range("A1:D10").Select 'か適当に選択しておいて
For rR = 1 To Selection.Rows.Count
For rC = 1 To Selection.Columns.Count
strT = strT & vbTab & Selection(1).Offset(rR - 1, rC - 1)
Next rC
strT = Mid(strT, 2)
myStr = myStr & vbCrLf & strT
strT = ""
Next rR
myStr = Mid(myStr, 3)
myData.SetText myStr ', 1
'myCb = myData.GetText
If MsgBox("データ" & vbNewLine & myStr & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then
Exit Sub
End If
myData.PutInClipboard
End Sub
ありがとうございます。
思った通りの動きです。
お礼が遅くなり、大変申し訳ございません。
いろいろなトラブルがあり、このサイトを見に来れませんでした。
No.3
- 回答日時:
添付図はxl2000の例ですが、セルをクリップボードにコピーすると、ここに上がっている全ての形式で格納される事になります。
RangeObjectだけで貼り付けられる訳ではありません。テキストの他にも、画像形式とか色々ありますね。例えばBiff?というのは、2003までのエクセルネイティブなデータ構造です。
なお、2列表示の図にする際に、clipbrd.exeで表示できない、グレー表示されている形式の部分は見難いので少し濃い色に変えてあります。
さて本題ですが、Range("A1:C3").Copyを実行後に、テキストエディターに貼り付けると、TAB区切りで貼り付けられます。
emaxemax様が、Outlookに貼り付けるときに期待した姿にならないとすると、Outlook側の問題だと思います。

ありがとうございます。
思った通りの動きです。
お礼が遅くなり、大変申し訳ございません。
いろいろなトラブルがあり、このサイトを見に来れませんでした。
No.2
- 回答日時:
>AとB列のテキストをコロンで結んだのは、それしかやりようがなかったからそうしましたが、本当はTabキーを打ったようにしたいのです。
If C.Column = 1 Then 'C.Column = 1はA列の意味
myStr = myStr & vbNewLine & C.Value
Else
myStr = myStr & vbTab & C.Value
End If
と":"をvbTabにすればいいです。
>やはりループさせる方法しかないのでしょうか?
本当にあなたがしたいことが、どういうことなのかしりませんが、通常セルをコピーしてExcelのクリップボードに入れたいだけであれば、以下の1行で用が足せます。
Range("A1:B100").Copy
何度もありがとうございます。
やりたいことは、一番最初に書いたとおり、
セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。
Range("A1:B100").Copy
では、テキストではなくRangeObjectが入ってしまいます。
Ctrl+VキーでOutlookメールの本文にテキストで貼り付けたいのです。
No.1
- 回答日時:
以下の様な感じでどうでしょうか
Sub Clip()
Dim myStr As String
Dim myData As DataObject
Dim myCb As Variant
Set myData = New DataObject
Dim C As Range
With Sheets(1)
For Each C In .Range("A1:B100")
If myStr = "" Then
myStr = C.Value
Else
If C.Column = 1 Then 'C.Column = 1はA列の意味
myStr = myStr & vbNewLine & C.Value
Else
myStr = myStr & ":" & C.Value
End If
End If
Next C
End With
myData.SetText myStr ', 1
myCb = myData.GetText
If MsgBox("データ" & vbNewLine & myCb & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then
Exit Sub
End If
myData.PutInClipboard
End Sub
さっそくありがとうございます。
やはりループさせる方法しかないのでしょうか?
あと、AとB列のテキストをコロンで結んだのは、それしかやりようがなかったからそうしましたが、本当はTabキーを打ったようにしたいのです。
わがまま言ってすみません。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
EXCEL/VBA 変数の値をクリップボードにコピーする方法
Visual Basic(VBA)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
セルの値だけクリップボードにコピーするマクロ
Visual Basic(VBA)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
二次元配列をクリップボードにコピーするためには
Visual Basic(VBA)
-
6
【VBA】エクセルで選択した範囲の値のみをクリップボードにコピーするコードについて
Excel(エクセル)
-
7
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
8
クリップボードの内容を変数に取り込みたい(EXCEL VBA)
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
11
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
12
VBAのテキストボックスに文字列を貼り付ける方法
Access(アクセス)
-
13
エクセル マクロ オートフィルの終点の指定について
Excel(エクセル)
-
14
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
15
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
16
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
17
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
18
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
19
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
20
エクセルのシート連番の振り直し
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの画面で十字マークが...
-
excelで、スクロールをすると限...
-
複数のセルの入力内容を一度に...
-
エクセルで連続データから、数...
-
エクセルでハイパーリンクのU...
-
Excel選択を繰り返すとセルの色...
-
Excelで急に動かなくなる
-
セルをクリックすると付箋のよ...
-
Excelで表のデータを並び替えた...
-
EXCEL アルファベットと数字の...
-
Shift押しながら、矢印ボタンで...
-
フィルタを解除した後の表示位置
-
エクセルで0を除いて昇順に並...
-
エクセル 数値を全て「1」にす...
-
エクセルVBAでセル範囲のデータ...
-
エクセル フィルター選択解除時...
-
エクセル2016の特定の文字列を...
-
エクセルで「1~15」の乱数...
-
エクセル 画面上の行数を調節...
-
エクセル マクロ クリックした...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの画面で十字マークが...
-
excelで、スクロールをすると限...
-
複数のセルの入力内容を一度に...
-
エクセルで連続データから、数...
-
Excel選択を繰り返すとセルの色...
-
EXCEL アルファベットと数字の...
-
エクセルでハイパーリンクのU...
-
セルをクリックすると付箋のよ...
-
エクセル 数値を全て「1」にす...
-
Shift押しながら、矢印ボタンで...
-
Excelで表のデータを並び替えた...
-
エクセルVBAでセル範囲のデータ...
-
Excelで急に動かなくなる
-
エクセルで「1~15」の乱数...
-
エクセルでカーソルが四方に矢...
-
フィルタを解除した後の表示位置
-
EXCELで広い範囲のセルに簡単に...
-
エクセルで0を除いて昇順に並...
-
エクセル2016の特定の文字列を...
-
エクセルの複数セルに同時に同...
おすすめ情報