1506595275 【エクセルVBAマクロ】クリップボードからの各セルへの貼付



クリップボードの中に、下記のような書式があります。
これをいま選択中のセルから真下に向かって切り取って貼り付けていってほしいのです。

★詳しくは画像をご確認ください。

クリップボード内
---

0927~など日付からはじまる文字列(0もそのまま)
言葉~
httpから始まるURL



1001~など日付からはじまる文字列(0もそのまま)
言葉~
httpから始まるURL

1215~など日付からはじまる文字列(0もそのまま)
言葉~
httpから始まるURL


ずっと同じような繰り返し

---
いずれも4桁の数字からはじまり、URLで終わります。
その3行がワンセットで、そのワンセットずつの間の改行数は3行だったり、1行だったり一定しません。

URLを目印にしていただくと良いかもしれません。


マクロを実行すると、選択しているセルに一番初めの3行分が貼り付けられ、すぐ真下のセルに、次の3行分が貼り付けられます。その真下に3つ目の3行が貼り付いていくという感じです。3行のまとまりがなくなったら、マクロが止まります。


★マクロでのご回答のみ、ポイント対象となります。
どうかよろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/09/30 07:15:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント300pt

こんな感じでどうでしょう。

Function get_clipboard_data() As Variant
    Dim ret()
    Dim temp_sheet, target_sheet
    Set target_sheet = ActiveSheet
    Set temp_sheet = Worksheets.Add
    temp_sheet.Paste Range("a1")
    last_row = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim ret(last_row)
    For r = 1 To last_row
        ret(r) = Cells(r, 1).Value
    Next
    get_clipboard_data = ret
    Application.DisplayAlerts = False
    temp_sheet.Delete
    Application.DisplayAlerts = True
    target_sheet.Activate
End Function

Sub set_data()
    '   クリップボードのデータを取得
    Data = get_clipboard_data()

    Set re_date = CreateObject("VBScript.RegExp")
    re_date.Pattern = "^[01][0-9][0-3][0-9]"
    Set re_url = CreateObject("VBScript.RegExp")
    re_url.Pattern = "^https?://"

    r = Selection.Row
    c = Selection.Column
    For i = 1 To UBound(Data)
        If re_url.test(Data(i)) Then
            If i >= 3 And re_date.test(Data(i - 2)) Then
                Cells(r, c).Value = Data(i - 2) & vbLf & Data(i - 1) & vbLf & Data(i)
                r = r + 1
            End If
        End If
    Next
End Sub

set_data サブルーチンを実行してください。
イレギュラーなデータのことをどこまで考えるか、ということはありますが、

  • http:// か https:// で始まる行を探す
  • その 2行前の行が、日付っぽい 4桁の数字であるか確認する
  • もし、日付っぽい数字 4桁だったら、間の 3行をひとつのセルに入れる

を繰り返してます。
1セットの 3行が空業で区切られていなくても、ひとつのデータと見なします。

クリップボードからのデータの取得は、以前の質問のときのように、作業用のシートにいったん貼り付けてセルの値を抜き出しています。

id:naranara19

いつもありがとうございます!毎度ながら完璧でした。心より、感謝いたします。

2017/09/30 07:12:16
  • id:lovevoiceryu
    できるけど、これ質問者さんのアルバイトとかじゃないんですかね?
    だとしたら200ptで作ってもらおうというのは虫がよい気がしました。
  • id:smithy250
    そのまま貼り付けて
    httpから始まる文字列を含む行にマーク付け。
    マークを付けた行を2行上と1行上と改行を入れながら結合。
    データの並べ替えかナニカで空白行を取り除き、
    最初に貼り付けた列とマーク列を削除

    くらいで良いんじゃないでしょうか。
    これならマクロの記録機能で自分で作れますよ!頑張ってね!^^
  • id:naranara19
    lovevoiceryuさんへ

    アルバイトどころか、仕事や趣味に使わせていただいております。ヤフー知恵袋のように無料のサイトですら、質問者の方と回答者の方の利害が一致したら良いと思っていますよ。


    smithy250さんへ
    ありがとうございます。マクロを自分でつくりたいのはやまやまなのですが、回答者の方に頼っております。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません