テキスト形式の罫線要素を用いた表をEXCELに貼り付けるマクロ

クイズで学ぼう!『エクセル』の小技のメルマガ活用

ふとした切っ掛けで、クイズで学ぼう!『エクセル』の小技というメルマガを知りまして、今、勉強中です。練習問題として、以下のような、メールマガジンでも配信できる形式の表の表現が書かれています。
┏━┳━━━━┯━━━━┯━━━━┯━━━━┓
┃ ┃A   │B   │C   │D   ┃
┣━╋━━━━┿━━━━┿━━━━┿━━━━┫
┃1┃    │晴れ  │曇り  │雨   ┃
┠─╂────┼────┼────┼────┨
┃2┃晴れのち│=$A2&B$1│=$A2&C$1│=$A2&D$1┃
┠─╂────┼────┼────┼────┨
┃3┃曇りのち│=$A3&B$1│=$A3&C$1│=$A3&D$1┃
┠─╂────┼────┼────┼────┨
┃4┃雨のち │=$A4&B$1│=$A4&C$1│=$A4&D$1┃
┗━┻━━━━┷━━━━┷━━━━┷━━━━┛

一太郎Ver.3というMS-DOSのワープロソフトを使ったことのある私には、とても懐かしい形式なのですが(笑)。 これを、EXCELのワークシートに簡単に貼り付けるマクロを考えました。

Sub クイズで学ぶEXCEL貼付け()
'
    Dim moji(50) As String

'クリップボードの中身を貼付け
    ActiveSheet.Paste

'データを配列に読み込んで削除
    ys = Selection.Row
    xs = Selection.Column
    ye = ys + Selection.Rows.Count - 1

    i = 1
    For y = ys + 3 To ye
        dmy = Cells(y, xs).Text
        If Not (InStr(1, dmy, "─") > 0 Or InStr(1, dmy, "━") > 0) Then
            moji(i) = Cells(y, xs).Text
            i = i + 1
        End If
    Next y
    ie = i

    Selection.Delete

'データの中身をセルに分配しながら再貼付け
    For i = 1 To ie
        dmy = "": k = 1
        mend = Len(moji(i))
        For m = 1 To mend
            hitomoji = Mid(moji(i), m, 1)
            If (hitomoji = "┃" Or hitomoji = "│") Then
                If k > 2 Then
                    Cells(ys + i - 1, xs + k - 3).Value = Trim(dmy)
                End If
                k = k + 1
                dmy = ""
            Else
                dmy = dmy + hitomoji
            End If
        Next m
    Next i
    Cells(ys, xs).Select
End Sub

使い方は、このマクロをEXCELのブックに組み込んだあと、メルマガの表を選択&コピーして、ワークシート上で貼り付けたいセルをクリックしてから、マクロを走らせればOKです。(上の例では、A1に貼り付けないと上手く計算式が動きません…念のため。)

2008.05.31

[HOME][とまて週報TOP]