メモ帳にあらかじめサイトの記事などを書いたものを、
Excelの一覧表に取り込みたい時がある。

その場合は、手動だと意外と手間なので、自動化してみました。

読み込み元のソースは環境に合わせて記入してください。

今回は、”☆”と”△”で区切りました。

標準モジュールのソース


Option Explicit

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)

'画面移動の完了待ち
Public Sub ieCheck(ie As Object)
    Do While ie.Busy Or ie.ReadyState < 4
        DoEvents
    Loop
End Sub

'文字列内の文字をカウントする
Public Function getCntStr(ByVal str As String, ByVal target As String) As Integer
    Dim i As Long
    Dim cnt As Long
    For i = 1 To Len(str)
        If Mid(str, i, 1) = target Then cnt = cnt + 1
    Next i
    getCntStr = cnt
End Function

実行するsheetのソース

Option Explicit

Sub Sample()

    Dim buf As String
    Dim i As Integer
    Dim str As String
    Dim period As Variant
    Dim sentence As Variant
    Dim timesPird As Integer
    Dim timesMaxPird As Integer
    Dim timesSent As Integer
    Dim timesMaxSent As Integer
    Dim row As Integer
    Dim col As Integer
    
    '--------
    '初期設定
    '--------
    row = 2
    
    '------------------
    '元データを読み込む
    '------------------
    '初期化処理
    i = 2
    Close #1
    
    Open "C:\Users\user\Desktop\20191028\記事管理等\ライブラリ②.txt" For Input As #1
        Do Until EOF(1)
            Line Input #1, buf
            str = str & buf & vbCrLf
            i = i + 1
        Loop
    Close #1
    
    '--------------------------------
    '元データから余計な単語を削除する
    '--------------------------------
    str = Replace(str, "△タイトル", "△")
    str = Replace(str, "△記事の内容", "△")
    str = Replace(str, "△ページ", "△")
    str = Replace(str, "△カテゴリ(親)", "△")
    str = Replace(str, "△カテゴリ(子)", "△")
    str = Replace(str, "△タグ", "△")
    str = Replace(str, "△URL", "△")
    
    '--------------------------
    '元データから文章を取得する
    '--------------------------
    '初期化処理
    period = Split(str, "☆")              '元データから「全ての段落」を取得する
    timesMaxPird = getCntStr(str, "☆")    '「全ての段落」から"☆"の数をカウントする
    
    '"☆"の数だけ繰り返す
    For timesPird = 1 To timesMaxPird
        '初期化処理
        col = 2
        sentence = Split(period(timesPird), "△")            '「1つの段落」から「全ての文章」を取得する
        timesMaxSent = getCntStr(period(timesPird), "△")    '「1つの段落」から"△"の数をカウントする
        '"△"の数だけ繰り返す
        For timesSent = 1 To timesMaxSent
            Cells(row, col) = Trim(sentence(timesSent))      '「1つの文章」を保存する
            col = col + 1
        Next
        row = row + 1
    Next
       
End Sub