セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。
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(エクセル)
-
EXCEL/VBA 変数の値をクリップボードにコピーする方法
Visual Basic(VBA)
-
セルの値だけクリップボードにコピーするマクロ
Visual Basic(VBA)
-
-
4
クリップボードの内容を変数に取り込みたい(EXCEL VBA)
Visual Basic(VBA)
-
5
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
6
VBAでセルがコピーされているか判定したい
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
[VBA][Excel]クリップボードからフィールドを区切って貼り付けるマクロ
Excel(エクセル)
-
9
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
10
【VBA】エクセルで値のみクリップボードにコピーするコードについて(貼り付け時の空白削除)
Visual Basic(VBA)
-
11
エクセルでエラーが出て困っています。
Excel(エクセル)
-
12
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
13
【エクセルのマクロ】クリップボードのbitmapをフォームに表示させたい
Visual Basic(VBA)
-
14
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
15
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
16
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
17
Excel コピーしたセルの範囲を取得するには?
Excel(エクセル)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
VBA コードを実行すると画面が真っ白になる
Visual Basic(VBA)
-
20
ListView 項目の選択/選択解除について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelで、スクロールをすると限...
-
EXCEL アルファベットと数字の...
-
エクセル 数値を全て「1」にす...
-
複数のセルの入力内容を一度に...
-
excelで1行ごとに一気に削除す...
-
セルをクリックすると付箋のよ...
-
エクセルで1つおきに列を削除...
-
エクセルの画面で十字マークが...
-
エクセルで任意のセルをクリッ...
-
Shift押しながら、矢印ボタンで...
-
エクセルで0を除いて昇順に並...
-
エクセル 画面上の行数を調節...
-
Excel選択を繰り返すとセルの色...
-
データが入力された際に空白行...
-
エクセルでカーソルが四方に矢...
-
エクセルで連続データから、数...
-
SUM関数、行挿入時に自動更新す...
-
EXCELで不規則的に行の高さを変...
-
エクセルVBAでセル範囲のデータ...
-
エクセルの複数セルに同時に同...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelで、スクロールをすると限...
-
エクセルの画面で十字マークが...
-
EXCEL アルファベットと数字の...
-
エクセルで連続データから、数...
-
複数のセルの入力内容を一度に...
-
excelで1行ごとに一気に削除す...
-
エクセル 数値を全て「1」にす...
-
エクセルで任意のセルをクリッ...
-
セルをクリックすると付箋のよ...
-
エクセル 画面上の行数を調節...
-
エクセルでハイパーリンクのU...
-
Excel選択を繰り返すとセルの色...
-
Excelで表のデータを並び替えた...
-
Shift押しながら、矢印ボタンで...
-
ピポットテーブルエラー解決方法
-
エクセルでカーソルが四方に矢...
-
エクセルで1つおきに列を削除...
-
エクセルで0を除いて昇順に並...
-
エクセルVBAでセル範囲のデータ...
-
エクセルでウインドウ枠を固定...
おすすめ情報