エクセルなどに作った 表を テキストベースに変換するVBS
エクセルの表を選択コピーして、vbsを実行すると、クリップボードからデータを取得して、変換後クリップボードに再度入れます
(自分メモ)
使い方:ソースをコピーして (xxxxxx).vbs xxxxxxは適当に として保存します
あとは
エクセルの領域を選択してctrl+c
vbsをダブルクリックで実行します。
エディタなどに ctrl+v
これだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
dim tblText dim lines dim fields dim line_lens() dim field_lens dim field_max dim hankaku dim zenkaku dim hankaku_len dim zenkaku_len dim coLen field_max=0 '------------------------------------------------- Set objRegExp = new RegExp tblText = GetClipBoardText() objRegExp.Pattern = "[\r\n]+$" tblText = objRegExp.Replace(tblText,"") '------------------------------------------------- objRegExp.Global = true objRegExp.Pattern = "[\t]+" tblText = objRegExp.Replace(tblText,vbTab) '------------------------------------------------- objRegExp.Pattern = "[\t]+\r\n" tblText = objRegExp.Replace(tblText,vbCrLf) objRegExp.Pattern = "[\t]+$" tblText = objRegExp.Replace(tblText,"") '------------------------------------------------- objRegExp.Pattern = "[\n]+" tblText = objRegExp.Replace(tblText," ") 'なんで" "なんだろ? '------------------------------------------------- lines = split(trim(tblText),vbCr) '最大値取得 for i= 0 to UBound(lines) fields = split(lines(i),vbTab) lines(i) = fields if(field_max < Ubound(fields)) then field_max = Ubound(fields) end if next Redim field_lens(field_max) for i = 0 to UBound(field_lens) field_lens(i) = 0 next '各カラム幅の最大値を取得する for i = 0 to UBound(lines) fields = lines(i) for j = 0 to UBound(fields) colLen = LengthByHankaku(fields(j)) '偶数化 colLen = colLen + (colLen Mod 2) ' if field_lens(j) < colLen then field_lens(j) = colLen end if next next '-----------------------------------------------------------上線 outStr = "┌" for i = 0 to UBound(field_lens) outStr = outStr & String(field_lens(i)/2,"─") if i < UBound(field_lens) then outStr = outStr & "┬" else outStr = outStr & "┐" end if next '-----------------------------------------------------------出力 for i=0 to UBound(lines) fields=lines(i) outStr = outStr & vbCrLf for j=0 to UBound(fields) outStr = outStr & String(1,"│") 'カラムの文字列をセットする objRegExp.Pattern = "^[0-9, ]+$" '数字とカンマのみ if objRegExp.Test(fields(j)) = true then '数字のみは右詰め outStr = outStr & String(field_lens(j) -LengthByHankaku(fields(j))," ") & fields(j) else outStr = outStr & fields(j) & String(field_lens(j) -LengthByHankaku(fields(j))," ") end if next outStr = outStr & String(1,"│") '----------------------------------------------------下線 if i < UBound(lines) then '中間行 LT = "├" MD = "┼" RT = "┤" else LT = "└" MD = "┴" RT = "┘" end if '罫線 outStr = outStr & vbCrLf outStr = outStr & String(1,LT) for j= 0 to UBound(fields) outStr = outStr & String(field_lens(j)/2,"─") if j< UBound(fields) then outSTr = outStr & String(1,MD) else end if next '右端 outSTr = outStr & String(1,RT) next SetClipboardText(outStr) MsgBox("クリップボードにコピーしました") '----------------------------------------------------------------- '半角換算文字数 '----------------------------------------------------------------- Function LengthByHankaku(str) Set RegExp = New RegExp RegExp.Global = true '半角文字数 RegExp.Pattern ="[^\x01-\x7E]+" '半角以外をリプレース 半角が残る hankaku = RegExp.Replace(str,"") '全角文字数 RegExp.Pattern ="[\x01-\x7E]+" '半角をリプレース 全角が残る zenkaku = RegExp.Replace(str,"") '換算文字数 colLen = Len(zenkaku)*2 +Len(hankaku) LengthByHankaku = colLen End Function '------------------------------------------------------------------ 'クリップボード取得 '------------------------------------------------------------------ Function GetClipBoardText() dim objHTML Set objHTML = CreateObject("htmlfile") GetClipBoardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("Text")) End Function '------------------------------------------------------------------ 'クリップボードコピー '------------------------------------------------------------------ Function SetClipboardText(text) set WshShell = CreateObject("WScript.Shell") wshShell.Exec("clip").stdIn.write text Set wshShell = nothing End Function |