質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

983閲覧

エクセル VBA テキストファイルを開きたい

beta1

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/07/16 01:43

前提・実現したいこと

エクセルVBAでテキストファイルを開き、開いたファイルのデータをB列の一行目から一行ずつ代入していきたい。

発生している問題・エラーメッセージ

現在、拡張子"ls"だけ実行するようにしているが、拡張子"jbi"の時も実行するようにしたいがうまくいかない。

該当のソースコード

Const FILTER_JOB_JBI As String = "JBIファイル,.JBI,"
Const FILTER_JOB_LS As String = "LSファイル,
.LS,"
Const FILTER_ALL As String = "すべてのファイル,."
Const DLG_TITLE_OPEN As String = "ファイルを開く"
Const JOB_ROW As Long = 2
Const JOB_COL As Long = 2

Public Sub File_Open()
Dim intFreeFile As Integer, fileToOpen As String, vBuff1 As Variant, vBuff2 As Variant
Dim i As Long, j As Long, strbuff1 As String, strBuff2() As String

' ---<ファイルを開く>ダイアログの表示
fileToOpen = Application.GetOpenFilename _
(FileFilter:=FILTER_JOB_LS & FILTER_JOB_JBI & FILTER_ALL, Title:=DLG_TITLE_OPEN)

' ---キャンセルされると<False>が返される
If fileToOpen = "False" Then Exit Sub

' ---ファイル名の取得
vBuff1 = Split(fileToOpen, "")
vBuff2 = Split(vBuff1(UBound(vBuff1)), ".")

' ---マクロの速度を向上させるため、画面を更新しないようにします
Application.ScreenUpdating = False

' ---使用可能なファイル番号を取得するために
intFreeFile = FreeFile

' ---ジョブの場合
If Not LCase(vBuff2(1)) = "ls" Then Exit Sub

' ---ファイルのオープン
Open fileToOpen For Input As intFreeFile

' ---マクロの速度を向上させるため、画面を更新しないようにします
Application.ScreenUpdating = False

Cells.Clear

' ---変数の初期化
strbuff1 = vbNullString
j = 0

' ---セルの行設定
i = JOB_ROW - 1

' ---データの読み込み
Do While Not EOF(intFreeFile)
i = i + 1

Line Input #intFreeFile, strbuff1 If Left$(strbuff1, 6) = "//NAME" Then Cells(1, 1).Value = "ジョブ名称 <" & Mid$(strbuff1, 8) & ">" ElseIf Left$(strbuff1, 5) = "/PROG" Then Cells(1, 1).Value = "プログラム名称 <" & Mid$(strbuff1, 7) & ">" End If

' ---セルにデータを書く
Cells(i, JOB_COL).Value = strbuff1
Loop

End Sub

試したこと

If Not LCase(vBuff2(1)) = "ls"の後にOr Case(vBuff2(1)) = "jbi"を追加してみました。

補足情報(FW/ツールのバージョンなど)

開くテキストファイルは200行くらいのデータです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/07/16 01:59

提示のコードではどういう動作になるんでしょうか。 また、あなたはどうなってほしいんでしょう。 問題がなにかわかりません
beta1

2021/07/16 02:07

上のコードは、拡張子"ls"のファイルだけが開けるようになっており、開いたファイルのデータをエクセルのB列の上から順に一行ずつ書き出しています。 問題は、拡張子"ls"にプラスして拡張子"jbi"のファイルも開きたいのですが、うまくいきません。
guest

回答1

0

ベストアンサー

いろいろとやりようはあると思いますが。

vba

1Select Case LCase(vBuff2(1)) 2Case "ls", "jbi" 3Case Else 4 Application.ScreenUpdating = True 5 Exit Sub 6End Select

投稿2021/07/16 03:41

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beta1

2021/07/16 03:51

やりたいことが無事にできました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問