▽1
●
a-kuma3 ●300ポイント ベストアンサー |
こんな感じでどうでしょう。
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 サブルーチンを実行してください。
イレギュラーなデータのことをどこまで考えるか、ということはありますが、
を繰り返してます。
1セットの 3行が空業で区切られていなくても、ひとつのデータと見なします。
クリップボードからのデータの取得は、以前の質問のときのように、作業用のシートにいったん貼り付けてセルの値を抜き出しています。