[[20220123105453]] 『複数セルのセルを一括クリップボードにコピー』(かつ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数セルのセルを一括クリップボードにコピー』(かつ)

お世話になります。まったくの初心者でいろいろ検索しているのですがわかりませんので質問いたします。
複数セル(例えばA3:E8)に文字を入力してるシートを作り、入力している文字列の内容をすべてコピーした文字列(5列は連続した文字列に、見た目通りに改行して6行の文字列)を別のテキストソフト(例えばメモ帳)に貼り付けたいです。マクロでクリップボードにコピーするところまで作りたいのですが、うまくいきません。宜しくお願い致します。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


>うまくいきません。
どのようにうまくいかないのですか?
とりあえず、現状のコードを示して、××になるはずが△△になってしまう。のように説明されてはいかがでしょうか?

(もこな2) 2022/01/23(日) 11:18


もこな2様
説明が稚拙で申し訳ありません。以下で試したのですがコンパイルエラーが出ます。小生が行いたい作業のコードの例を教えて頂ければ大変ありがたいです。

Sub テスト()

Dim myCopy As New MSForms.DataObject
With myCopy
.SetText B3: E6.Value
.PutInClipboard
End With

End Sub
(かつ) 2022/01/23(日) 11:40


Dim myCopy As New MSForms.DataObject
SetText B3: E6.Value
見直してみては?
(???) 2022/01/23(日) 12:06

???様
すみません。A3:E8に訂正します。宜しくお願い致します。
(かつ) 2022/01/23(日) 12:19

必要な命令に当たりは付けられているように思います。
↓などを参考にして、何がマズイのか再考されてはどうですか?
http://officetanaka.net/excel/vba/tips/tips20.htm

 (1)DataObjectに【Range("B3:E6").Value】を格納して
 (2)(1)をクリップボードに格納すればいいわけですよね。

・・・と書きかけてこちらで↓のようにして試したんですが型が一致しませんと出ちゃうんですよね。

    Sub テスト()
        Dim myCopy As New DataObject

        With myCopy
            .SetText ActiveSheet.Range("B3:E6").Value
            .PutInClipboard
        End With
    End Sub

なので、セル範囲を一旦、ループ処理とJoin関数を使って文字列に直し、格納するというのはどうでしょうか?

    Sub テスト_改()
        Dim myCopy As New DataObject
        Dim セル範囲 As Range
        Dim buf  As String, i As Long
        Dim 配列 As Variant

        Set セル範囲 = ActiveSheet.Range("B3:E6")
        For i = 1 To セル範囲.Rows.Count
            配列 = WorksheetFunction.Transpose(WorksheetFunction.Transpose(セル範囲.Rows(i).Value))
            buf = buf & Join(配列, "") & vbLf
        Next

        buf = Left(buf, Len(buf) - 1)

        With myCopy
            .SetText buf
            .PutInClipboard
        End With
    End Sub

もうちょっと良いアプローチがあるかもしれませんが、私だとこれ以上は思いつかなそうです。

(もこな2) 2022/01/23(日) 12:48


もこな2様
御親切に早速ご指南頂き深謝です。トライしてみます。今後ともよろしくお願い致します。
(かつ) 2022/01/23(日) 12:52

終わってるのかも知れませんが、
単にコピーして、タブを除去すれば良いのではと思います。
但し、 Application.CutCopyMode = Falseにはできません。

 Sub test()
    Dim myCopy As New MSForms.DataObject
    Range("A3:E8").Copy
    With myCopy
        .GetFromClipboard
        .SetText Replace(.GetText, vbTab, "")
        .PutInClipboard
    End With
 End Sub

(kazuo) 2022/01/23(日) 23:52


連投失礼
バッファ咬ませば入れられた
        buf = Replace(.GetText, vbTab, "")
        Application.CutCopyMode = False
        .SetText buf
でも
メモ帳やexcelシートには貼り付けられるが、
この方式vbeペインに貼り付けるとexcelクラッシュする。
(もこな2) 2022/01/23(日) 12:48では、vbeペインには貼り付けられない。

(kazuo) 2022/01/24(月) 07:24


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.