UTF-8形式のテキストファイルを読み込んで、SHIFT-JIS形式に変換後、先頭から指定文字数だけ抜き出して、対応するASCIIコードを表示します。
出力先をイミディエイトウィンドゥだけにしておけば手間もかからなかったのですが、シートへの出力についての体裁を考えていたら、コードが増えてしまいました。
今回追加したプロシージャは
- Sub 出力用シート整形
- Sub テキスト分割文字コード表示
の二つです。今回のメイン処理は Sub テキスト分割文字コード表示 の
ch1 = Mid(tmpText, c, 1)
chAsc = Asc(ch1)
chHex = Hex(chAsc)
の変換箇所だけで、あとは表示上の体裁を整える処理がほとんどです。
pkupChr = 200
この値を変更することにより、出力する文字数を変えられます。
ただし、一文字ずつセルに書き込む方式なので、時間がかかります。とりあえずこの数値で実行してみてください。
Sub UTF8形式のテキストファイルの改行コード調査()
Dim filePas As String
filePas = ファイルパスを取得
If filePas = "False" Then End
Dim stCell As Range
Set stCell = 出力開始セルを指定
Dim pkupChr As Long
pkupChr = 200
Call 出力用シート整形(stCell, pkupChr)
Dim tmpText As String
tmpText = UTF8をSHIFTJIS化(filePas)
Call テキスト分割文字コード表示(tmpText, stCell, pkupChr)
End Sub
Function ファイルパスを取得() As String
ファイルパスを取得 = Application.GetOpenFilename( _
FileFilter:="Text(*.txt),*.txt,CSV,*.csv,全部(*.*),*.*", _
TITLE:="ファイルを選択")
Debug.Print ファイルパスを取得
End Function
Function 出力開始セルを指定() As Range
Worksheets.Add after:=Sheets(Sheets.Count)
Set 出力開始セルを指定 = ActiveSheet.Range("A1")
End Function
Sub 出力用シート整形(stCell As Range, pkupChr As Long)
With stCell.Offset(0, 4)
.ColumnWidth = 60
.Font.Size = 9
.Font.Name = "MS ゴシック"
End With
With stCell
.Offset(2, 0) = "連番"
.Offset(2, 1) = "文字"
.Offset(2, 2) = "10進数"
.Offset(2, 3) = "16進数"
.Offset(1, 2) = "ASCIIコード"
.Range(.Offset(1, 2), .Offset(1, 3)) _
.HorizontalAlignment = xlCenterAcrossSelection
.Range(.Offset(2, 3), .Offset(pkupChr + 2, 3)) _
.HorizontalAlignment = xlRight
.Range(.Offset(2, 1), .Offset(pkupChr + 2, 1)) _
.HorizontalAlignment = xlCenter
End With
End Sub
Function UTF8をSHIFTJIS化(filePas) As String
Dim ADODBobj As Object
Set ADODBobj = CreateObject("ADODB.Stream")
With ADODBobj
.Charset = "UTF-8"
.Open
.LoadFromFile filePas
End With
UTF8をSHIFTJIS化 = ADODBobj.ReadText
ADODBobj.Close
Set ADODBobj = Nothing
End Function
Sub テキスト分割文字コード表示 _
(tmpText As String, stCell As Range, pkupChr As Long)
stCell.Offset(0, 4) = Left(tmpText, pkupChr)
Dim c As Long
Dim ch1 As String
Dim chAsc As Integer
Dim chHex As Variant
For c = 1 To Len(tmpText)
ch1 = Mid(tmpText, c, 1)
chAsc = Asc(ch1)
chHex = Hex(chAsc)
With stCell
.Offset(2 + c, 0) = c
.Offset(2 + c, 1) = ch1
.Offset(2 + c, 2) = chAsc
.Offset(2 + c, 3) = chHex & " h"
End With
Debug.Print "c="; c, ch1, chAsc, chHex
If c = pkupChr Then Exit For
Next c
With Cells
.EntireColumn.AutoFit
.EntireRow.AutoFit
End With
End Sub
はてなブログの記事のエクスポートファイルを読み込ませてみると、改行コードが 10 (16進数で A)(LF) であることがわかります。
Excel では LFは、セル内改行に使用されています。
この、改行コードが入っているセルは、文字が表示されていませんが、セル内で改行されていますので、セルの高さが2行分になっています。
ほとんどコメントを入れておらず、見づらくて申し訳ありません。