
セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。
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も見ています
-
【VBA】エクセルで選択した範囲の値のみをクリップボードにコピーするコードについて
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
EXCEL/VBA 変数の値をクリップボードにコピーする方法
Visual Basic(VBA)
-
-
4
【VBA】エクセルで値のみクリップボードにコピーするコードについて(貼り付け時の空白削除)
Visual Basic(VBA)
-
5
クリップボードの内容を変数に取り込みたい(EXCEL VBA)
Visual Basic(VBA)
-
6
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
7
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
8
EXCELのSheet番号って変更できる!?
Visual Basic(VBA)
-
9
Excel コピーしたセルの範囲を取得するには?
Excel(エクセル)
-
10
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
11
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
12
EXCEL VBA 複数セルのコピー
Excel(エクセル)
-
13
セルの値だけクリップボードにコピーするマクロ
Visual Basic(VBA)
-
14
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
15
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
16
エクセルVBAでオプションボタンを無効にする方法
Excel(エクセル)
-
17
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
18
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
19
【Excel】 セルの色での判断はできますか?
Excel(エクセル)
-
20
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelで、スクロールをすると限...
-
エクセルで任意のセルをクリッ...
-
エクセルで連続データから、数...
-
エクセルの画面で十字マークが...
-
セルをクリックすると付箋のよ...
-
EXCEL アルファベットと数字の...
-
エクセル 画面上の行数を調節...
-
Excel 小さくなったスクロール...
-
フィルタを解除した後の表示位置
-
複数のセルの入力内容を一度に...
-
エクセル 数値を全て「1」にす...
-
エクセルでハイパーリンクのU...
-
エクセルで、結合したセルを選...
-
excelで1行ごとに一気に削除す...
-
エクセルでカーソルが四方に矢...
-
Excelで飛び飛びのセルにある文...
-
ピポットテーブルエラー解決方法
-
エクセル フィルター選択解除時...
-
Excelで表のデータを並び替えた...
-
エクセルでウインドウ枠を固定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで連続データから、数...
-
excelで、スクロールをすると限...
-
Excel 小さくなったスクロール...
-
複数のセルの入力内容を一度に...
-
セルをクリックすると付箋のよ...
-
エクセルの画面で十字マークが...
-
エクセル 画面上の行数を調節...
-
excelで1行ごとに一気に削除す...
-
EXCEL アルファベットと数字の...
-
エクセルでハイパーリンクのU...
-
エクセルで任意のセルをクリッ...
-
エクセル 数値を全て「1」にす...
-
エクセルで、結合したセルを選...
-
ピポットテーブルエラー解決方法
-
Excelで表のデータを並び替えた...
-
エクセルVBA 複数行にまたがっ...
-
エクセルで0を除いて昇順に並...
-
エクセルでカーソルが四方に矢...
-
Excel選択を繰り返すとセルの色...
-
列選択で勝手に広範囲に範囲選...
おすすめ情報