【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
皆様、お久しぶりです。エンジニアのIMMRです。
今までちょっと忙しく、バタバタして時間がなかったのですが、また時間が出来たので書いていこうと思いますので、よろしくお願い致します。
今回は、改行コードを説明していきます。
例えば、下記のようなテキストのLOGデータがあるとします。

図1 LOGデータ
テキストのLOGデータの1行1行を1つのセルに記載したい。
イメージとしてはこのような感じ

図2 イメージ図
にしたい。と思ったので
読み込みは、テキスト形式だから
Line Input で1行ずつ読んでやればいいと思い、下記のコードを作成しました。
Sub abc()
Dim i As Long
Dim INFile As String
Dim Data As String
INFile = "C:\Users\T\LOG_A.txt"
Open INFile For Input As #1
i = i + 1
Do Until EOF(1)
Line Input #1, Data
ThisWorkbook.Sheets("Sheet1").Cells(i, 1).Value = Data
i = i + 1
Loop
Close
MsgBox "終了"
End Subプログラムコード1
そして、実行を行うと

図3 プログラム実行結果
となり、1つのセルになってしまいます。
なぜこのようになってしまうのかと焦ってしまいました。
なぜこうなるのか。
WEBや本で調べるとこれは改行コードが「Lf」か「CrLf」が違うみたいです。
Line Inputでの読み込みはCrLfを対象に行っているみたいなので、Lfを対応していないみたいです。
そもそも「Lf」と「CrLf」ってなにが違うのというところですが
イメージはこんな感じです。

図4 改行コードのLfとCrLf
テキストのファイルを目視しただけでは、わからないですよね。目では見えないけど改行コードが設定されています。
このような感じで実際は「Lf」の改行コードであったのに「CrLf」専用のLine Inputで読み込んでしまったため、
正しく読み込めなかったのです。
では、どうすればよいか。というと
「ADODB.Stream」を使用します。
そうすれば、改行コードなどを正確に読み取ることができます。
Sub abc()
Dim INFile As String
Dim stream As Object
Dim txtData As String
Dim i As Long
Dim Data As Variant
Dim textData As Variant
Dim Row As Long
INFile = "C:\Users\T\LOG_A.txt"
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2
stream.Charset = "UTF-8"
stream.Open
stream.LoadFromFile INFile
textData = stream.ReadText
stream.Close
Set stream = Nothing
Row = 1
Data = Split(textData, vbLf)
For i = LBound(Data) To UBound(Data)
Cells(Row, 1) = Data(i)
Row = Row + 1
Next i
MsgBox "終了"
End Subプログラムコード2
プログラムコードは上記のような感じで
CreateObjectを作成し、Type = 2 'テキストデータ、Charset = "UTF-8"(LFを含む文字コード)
を作成して、という感じで読んでいきます。
読んだデータをtextDataに代入して、
そのデータ(textData)をSplitで分けてセルに代入していきます。
そうして、このプログラムを実施したところ

図5 プログラムコード2の実行結果
CreateObjectを使用することにより、先ほどのように1つのセルの中で表示されるというとがなくなり、
1行1行表示することが出来ました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート