アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。
やりたいことは以下の通りです。

カンマ区切りの文字が記載された.txtデータをExcelファイルに取り込みたいと思っています。

①自動でフォルダを開いて手動で任意のテキストデータを選ぶ
②データを文字
化けなくカンマ区切りでセルごとにExcelに表示
③元データの.txtはファイルによって空白行が1行のときもあれば2行のときもありまちまちなので自動で空白行をスキップして呼び込みたい
④呼び込んだ.txtの内容を元に読み込先のExcelに関数(I列に来るべき.txtのデータを参照してJ列「収支」K列「勝率」が出る)が仕込んであるが、ファイルによってデータの行数が違うため最終行を取得したい

特定の.txtファイルではなくこちらで選べるようにしたいので以下に示したソースの通りGetOpenFilenameで自動でファイルを開いて手動で選べるようにしています。

その際、一部別の漢字に変換されたり、カンマがひとつだけ・に代わっていたり文字化けがあります。

呼び込みたい.txtは空白行が1行あったり、2行あったりするのでそこをスキップして純粋に文字のある行から取り込みたい。読み込み先のExcelには事前に項目を作っているため、空白行をスキップできれば自動的に項目の下にデータが表示されるようになっています。※予め空白のないテキストを呼び込んでテストすると(文字化けは別として)上手くいきました。

④は難しくてもせめて①~③までは自力でできないかと調べていますがうまくいきません。UTF-8をANTI形式に保存しても直ったり直らなかったり、またVBAのADODB.Streamオブジェクト(Microsoft ActiveX Data Objects x.x Library)を試そうとするもファイルパスやターゲットで特定のファイルを指定する部分があり、それを指定しないで使うにはどうすればいいのかがわかりません。

ご査収いただけましたら嬉しいです。

下記はネットのソースを一部直して作成。これを利用してできないでしょうか。

Option Explicit
'===================================================================================================
Private Const g_cnsTitle As String = "テキストファイル読み込み"
Private Const g_cnsFilter As String = "全てのファイル (*.*),*.*"
Sub Txt読み込み()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long


varFileName = Application.GetOpenFilename(FileFilter:="txtファイル(*.txt),*.txt", _
Title:="txtファイルの選択")
If varFileName = False Then
Exit Sub
End If

intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'txtファイルをオープン

i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
For j = 0 To UBound(strSplit)
Cells(i, j + 1) = strSplit(j)
Next
'配列をそのまま入れる方法も、ただし全て文字列として入力される
'Range(Cells(i, 1), Cells(i, UBound(strSplit) + 1)) = strSplit
Loop

Close #intFree
End Sub

A 回答 (1件)

Officeをぶっ壊した初級者ですから『文字化け』についての参考例を(ググるしかできないですが)。



https://okwave.jp/qa/q9221981.html
    • good
    • 1
この回答へのお礼

ありがとうございます!!いろいろな方が回答をされているページなので、詳しく確認してみますね。

お礼日時:2020/09/12 18:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!