• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでセル範囲のデータをクリップボードに)

エクセルVBAでセル範囲のデータをクリップボードに

end-uの回答

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答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

emaxemax
質問者

お礼

ほんとうにお世話になりました。 ありがとうございます。

関連するQ&A

  • Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーする

    Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーするマクロとして以下をメニューから呼び出せるようにしています。 が、呼び出すたびにエラーが出て、手動で「Microsoft Forms 2.0 Object Library」を参照設定しています。マクロ内で「Microsoft Forms 2.0 Object Library」を自動で参照設定ONにするようにはできないでしょうか。 --- Sub SumCopy() Dim MyData As DataObject Set MyData = New DataObject MyData.SetText Application.WorksheetFunction.Sum(Selection), 1 MyData.PutInClipboard End Sub ご存知の方がいらっしゃればご教授よろしくお願い致します。

  • アクセスvbaでクリップボードにコピーの動作を実行

    アクセスvbaでクリップボードにコピーの動作を実行したいです。 エクセルなら、 Sub test() Dim buf As String Dim CB As New DataObject buf = "test" With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する .GetFromClipboard ''クリップボードからDataObjectにデータを取得する Debug.Print .GetText ''DataObjectのデータを変数に取得する End With End Sub これが実行できるのですが、 どうやらアクセスだと Dim CB As New DataObject これがエラーになるようです。 Dim CB As Objectにすると .SetText buf で実行時エラー91になります。 (「オブジェクト変数またはWithブロック変数が設定されていません」) http://officetanaka.net/excel/vba/tips/tips20.htm によると、 「DataObjectオブジェクトはMSFormsのメンバです。使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します。または、ブックにUserFormを挿入すると自動的に参照設定されます。」 なので、アクセスvbaの参照設定で「Microsoft Forms 2.0 Object Library」を探したのですが、 ありませんでした。 当方バージョンは2010です。 アクセスでは不可能と言うことでしょうか? ご教授よろしくお願いします。

  • エクセルデータをWebに入力する方法(VBA)

    エクセル2000、IE6.0、Windows2000です。 エクセルのデータを1個ずつ社内のイントラネットの入力欄に転記し、そこで検索した結果を見て一つずつ、ある判断をする業務を前任者から引継ぎました。 やってみたところ、あまりの単純作業に嫌気がさしました。Σ( ̄ロ ̄lll) そこで、見よう見真似で、セレクトしたエクセルのデータを一個ずつクリップボードにコピーし、対象のURLを開くところまでは出来ました。 現在は、開いた画面の入力欄を選択し、Ctrl+Vで貼り付けしています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub '複数セル不可 If Target.Column <> 1 Then Exit Sub 'A列のみ対象 Dim myData As DataObject Dim IE As Object Dim myCb As Variant Set myData = New DataObject myData.SetText Target.Text, 1 myCb = myData.GetText myData.PutInClipboard 'データをクリップボードへ Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate "http://******.co.jp/******/**/***/Details/DetailsScr/init" '入力画面を開く End Sub 改善したい点は、セルを選択する都度、新しいウィンドウが開いてしまうことです。 しかし、その都度入力画面を立ち上げないと、最初の入力画面のページは、データを入力して検索ボタンを押した後には別の画面(検索結果の画面)に変わってしまうので、新しいウィンドウを開かざるをえません。 今はその都度検索結果画面を手動で(右上の×ボタンで)終了させています。 一番いいのは、エクセル画面で新しいデータをクリップボードにコピーした段階で入力画面に自動的に戻ればいいのですが、その方法がわかりません。 ヾ( ̄∇ ̄; )ノ!   また、欲を言えば入力欄にクリップボードのデータを自動的に貼り付け、検索ボタンを押すところまで自動化できれば最高なのですが、これもWebにはとんと疎いものでしてわかりません。 ご教示いただけたら幸いです。 宜しくお願いいたします。 (o。_。)oペコッ

  • Excel-VBA セルのデータ書出し(Q2)

    セル[A1:G5]に次の様なデータが適当に在るとします。 各セル内のデータ数は様々で空のセルも在ります。 セルの書式設定は「折り返して全体を表示する」です。 '---------- 中国 '---------- 鳥取県  ←各データは[Alt]+[Enter]で改行。 島根県 '---------- 岡山県 広島県 山口県 '---------- ▼やりたい事は、セル[A1:G5]のデータを、 セル[A11]直下へ次々と書き出したいのですが、 選択範囲が、 [A1:A5]とか[B1:B5]…は上手く張り付きますが、 [A1:G1]とか[A1:G5]…は上手く張り付きません!? ご教授宜しくお願い致します。 '--------------------------- Sub test22() '行列のデータ範囲を選択して実行 Dim s As String Selection.Copy With New DataObject .GetFromClipboard s = .GetText .Clear .SetText Replace$(s, """", "") .PutInClipboard End With ActiveSheet.Paste Range("A11") End Sub '--------------------------- 以上

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • 選択範囲の合計値をクリップボードへコピー

    エクセルで選択範囲の合計をクリップボードにコピーするマクロを作成し、メニューもしくはショートカットに割り当てようと思っています。 下記でやってみたのですが、うまくいきません。いい方法をご存知の方、ご教授願います。 Sub ClipSum() Dim temp As Variant temp = Application.WorksheetFunction.Sum(Selection) Range("IV1").Value = temp Range("IV1").Copy Range("IV1").ClearContents End Sub

  • エクセルVBAで任意の文字列を抽出するには・・・

    エクセル2003で作成した住所録があります。 県名(3文字)のみを抽出して、新たに設けたD列に表示させたいと考えています。 Sub 県名の列作成()  Dim myStr As String  myStr = ActiveCell.Value  Range("D2").Value = Left(myStr,3) End Sub ここまで、できたのですが・・・・ B列の2行目から順に処理をして、一覧表の最後まで行って、 空白セルの行が見つかったら終了させる方法が分かりません。 どうかよろしくお願いします。

  • セル番地をvbaで探したい

    エクセルのセルに A1→あ B1→い C1→う がはいっています。 この状態で Sub Macro1() Dim mystr1 As String mystr1 = "c1" MsgBox mystr1 & "の値は、" & "です。" End Sub を実行した時に、mystr1のアドレスを探して、msgboxに表示させたいのですが、 どのような方法があるのでしょうか? アドバイスよろしくお願いします。

  • エクセルVBAを教えて下さい

    エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() Dim d1 As Long Dim d2 As Long Dim ret As Variant Dim FindValue As String Dim TotalAddress As String If Range("E1").Value = "" Or Range("F1").Value = "" Then MsgBox "該当する場所にデータが入っていません。", vbCritical Exit Sub End If d1 = Range("A65536").End(xlUp).Offset(1).Row d2 = Range("B65536").End(xlUp).Offset(1).Row FindValue = """" & Range("E1").Value & Range("F1").Value & """" TotalAddress = Range("A1").Resize(d1).Address & "&" & Range("B1").Resize(d1).Address ret = Evaluate("MATCH(" & FindValue & "," & TotalAddress & ",0)") If IsError(ret) Then Cells(d1, 1) = Range("E1").Value Cells(d2, 2) = Range("F1").Value Else MsgBox "既に同じ組み合せがあります。", vbInformation End If End Sub というものを作ったのですが、E1=18、F1=1及びコマンドボタンを別シートに作成し、上記の表への登録をできるようにしたいのですが、なにかいい方法はありませんか?

  • エクセル VBA

    A1,A2,A3→RAND()*99+1 B1→MAX(A1:A3) Sub test() Worksheets("sheet1").Calculate Dim x As Integer x = Range("B1") Range("C1").Value = x End Sub このように記述すると、B2とC2で結果が変わってしまうのですが、どうしてでしょうか?結果を同じにするにはどうすればいいですか?