アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルをコピーしてメモ帳などのテキストエディタに貼り付けると、””(ダブルクォーテーション)で囲まれますよね。

現在は、テキストエディタでデーターを使用するときに、複数セルを選択コピーして、ワードに張り付けて再度コピーして利用していますが。

複数のアクティブセルをコピーして、ワードに貼付け、それをコピーする操作をマクロにできないでしょうか。テキストエディタで使用するため。

*ダブルクォーテーションなしでテキストエディタに使用できるならその他の方法でもよいのですが・・・

何度も同じ作業をするために、ワードはすべて選択で貼付け、コピーしています。
複数のアクティブセルは、行・列は変化し、選択セル数は変化します。
データーはエクセルのシートのテーブルでソートしたあるデーターを利用するため。

又、あるサイトで「エクセルのコピー時にダイレクトにクリップボード操作するマクロ」を見つけましたが、アクティブセルのみコピーで、複数セルに対応してないとのこと
コード
Sub Copy()
Dim buf As String, buf2 As String, CB As New DataObject
buf = ActiveCell
With CB
.SetText buf ''変数のデータをDataObjectに格納する
.PutInClipboard ''DataObjectのデータをクリップボードに格納する
.GetFromClipboard ''クリップボードからDataObjectにデータを取得する
buf2 = .GetText ''DataObjectのデータを変数に取得する
End With
End Sub

これを複数のセル(アクティブにした複数セル)に対応できないものでしょうか?

A 回答 (6件)

張り付けた後、「"」を一括削除でも手間はないと思いますが。

    • good
    • 0
この回答へのお礼

そうですね。テキストエディタのマクロで削除する方法もありますよね。

お礼日時:2017/05/14 01:18

添付の図は、excelのセルをコピーして貼り付けたものです。


「””」は、つきません。どのようにコピーされたのでしょうか。
「エクセルの複数データーをダブルクォーテー」の回答画像2
    • good
    • 0
この回答へのお礼

通常のコピーです

お礼日時:2017/05/14 01:18

(´・ω・`)


自分のところでもNo.2の回答者さん同様、ダブルクォーテーションが付かないことを確認しています。

バージョンの問題でしょうかね。
当方はExcel2016です。
    • good
    • 0
この回答へのお礼

通常のコピーです
Excel2007ですと、ダブルクォーテーションががつきますね!

お礼日時:2017/05/14 01:16

一応再現性に関するコメントだけ。



そのセルの内容に「タブ文字」や「改行文字」は含まれていませんか?
    • good
    • 0

私が昔書いたコードとよく似ていますが、これは定番ですよね。


クリップボードの研究はある程度しましたが、DataObject は、簡易型ですが、非常に脆弱です。本格的なものもありますが、大げさになりがちです。
私個人は、以下のようなマクロは使わないのは、そのメモリ空間が少ないからなのです。自由に使うには、Win APIを使うのがよいかと思います。

提示されたコードの中では、 buf As String のデータ型が少し問題があるのかなって思います。

> If TypeName(Selection) = "Range" Then '選択の範囲
これをつけるのが一般的ですが、その後、私は、配列に代入してしまっています。

'//
Sub Setting_Keys()
'ショートカットキーに割り付けます。
'(Workbook_Open, Auto_Openに入れると良い)
Application.OnKey "^+1", "MyClipBoard"  'Ctrl +Shift+ 1(任意)
End Sub

Sub myClipBoard()
 Dim buf As Variant, buf2 As String
 Dim x As Variant, t As Variant
 Dim i As Long, j As Long
 Dim CB As Object
 Const DELIM As String = " " 'デリミタ
 Const CLSID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
 Set CB = GetObject("new:" & CLSID)
 If TypeName(Selection) = "Range" Then
  x = Selection.Value
  If IsArray(x) Then '配列かそうでないかの分離
  For i = 1 To UBound(x)
   For j = 1 To UBound(x, 2)
    t = Application.Clean(x(i, j))  'バイナリのゴミが入るのを防ぐ
    t = Replace(t, Chr(34), "") '「"」を除く
    buf = buf & DELIM & x(i, j)
   Next j
   buf = buf & vbCrLf
  Next
  Else
  buf = x
  End If
 Else
  Exit Sub
 End If
 With CB
  .SetText buf
  .PutInClipboard
  .GetFromClipboard
  buf2 = .GetText
  Beep
 End With
End Sub
    • good
    • 0
この回答へのお礼

コードありがとうございます。ダブルクォーテーション無しでのテキストエディッタへの貼付けが出来ました。

もう一つなんですが、テーブルでソートしたデーターの場合は、表示していない行を含めたすべてが貼りつきます。
これを、ソートして選択したもの(アクティブにした複数セル)だけのデーターにはならないのでしょうか?

お礼日時:2017/05/16 22:52

前回よりも、遅い反応になってしまうかもしれません。


DataObject の反応がイマイチなので、エラートラップをつけました。
以下は、調子が悪いようでしたら、全面的に、Win APIに切り替えなくてはならなくなると思います。

'//
Sub myClipBoard()
 Dim buf As Variant, buf2 As String
 Dim Rng As Range
 Dim x As Variant
 Dim t As String
 Dim i As Long, j As Long
 Dim CB As Object
 Const DELIM As String = " " 'デリミタ
 Const CLSID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
 On Error GoTo ErrHandler
 Set CB = Nothing
 Set CB = GetObject("new:" & CLSID)
 If TypeName(Selection) = "Range" Then
  Set Rng = Selection
  If Rng.Cells.Count > 1 Then 
   For i = 1 To Rng.Rows.Count
    If Rng.Rows(i).Hidden = False Then '行が現れているものだけ
     For j = 1 To Rng.Columns.Count
      t = Application.Clean(Rng.Cells(i, j).Text)  'バイナリのゴミが入るのを防ぐ
      t = VBA.Trim$(t) '両側の空白を取り除く
      t = Replace(t, Chr(34), "") '「"」を除く
      buf = buf & DELIM & t
     Next j
     buf = buf & vbCrLf
    End If
   Next
  Else
   buf = VBA.Trim$(Rng.Value)
  End If
 End If
With CB
 .SetText buf
 .PutInClipboard
 .GetFromClipboard
 buf2 = .GetText
 Beep
End With
ErrHandler:
If Err <> 0 Then
 MsgBox Err.Description, vbExclamation
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。思いどうりに動きました。

お礼日時:2017/05/20 07:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています