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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

受付中

VBAを使用してテキストファイルを読み込みたい

s.s.s.s.
s.s.s.s.

総合スコア3

VBA

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0回答

0評価

0クリップ

164閲覧

投稿2022/05/23 11:31

編集2022/07/19 12:37

はじめまして。プログラミング初心者です。
この度VBAを使用して以下のようなプログラムを作りたいです。

【作成したいプログラム】
①Excel上でボタンを押下
②フォルダを選択
③「sh~」で始まるファイル以外のテキストファイルをすべて1行ずつ読み込む
④③で読み込んだ内容から以下の内容を抽出しエクセルに張り付ける
・日付(行頭~23文字)(Excel:A2~)
・ファイル名(Excel:B2~)
・件数(「~ 件数=○○)」の○○部分のみ抽出)(Excel:C2~)

現在、①②はできているのですが、③④で躓いています。

【現状】
・ファイルのフルパスを取得後、MsgBox FilePath(i)で中身が正しく出力されている
⇒取得したパスを使用し、フォルダの中を1行ずつ見る、という方法がわからない。
・(内容を編集した結果手前でエラーが出てしまって今はでないのですが)
エクセルに結果を出力した際、文字化けしてしまっている
⇒UTF-8にしたい
・日付、ファイル名、件数にそれぞれ変数を指定し結果を得たいが
型が間違っていますというエラーが出てしまって設定できない。

【発生しているエラー】
・実行時エラー55 ファイルは既に開かれています。

初めて書いたコードなのであきれてしまうような内容かもしれませんが、
これから習得したいと頑張っておりますのでどなたか模範解答、またはアドバイス
頂けますと幸いです。よろしくお願いします。

また、VBAを習得するにあたりおすすめの書籍等ありましたら
教えていただけると嬉しいです。

※途中MsgBoxがあるのは確認用です。
※変数の宣言が途中コメントになっているのはインターネットから引用したものを
自分で先頭に宣言するよう編集したため、残しておこうとコメントにしました。

Sub GetAllTextData() ' '【変数の宣言】 ' Dim Fname Dim FSO As Object Dim Folder As Variant Dim File As Variant Dim FilePath As Variant Dim Hozon As Variant Dim GetData As Variant 'フォルダ指定用のダイアログを表示します With Application.FileDialog(msoFileDialogFolderPicker) 'カレントディレクトリを指定します .InitialFileName = ThisWorkbook.path '設定しなかったら終了します If .Show = False Then Exit Sub '設定したフォルダを表示します 'Dim Fname Fname = .SelectedItems(1) End With '参照設定 'Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") 'Dim FilePath As Variant ReDim FilePath(1 To 100) As Variant '指定フォルダ内の.logファイルを探索します i = 0 For Each File In FSO.GetFolder(Fname).Files If InStr(File.Name, "sh") > 0 Then i = i + 1 Else If InStr(File.Name, ".log") > 0 Then i = i + 1 FilePath(i) = File.path 'ファイルのフルパスを取得 MsgBox FilePath(i) End If End If Next '配列の大きさは状況に応じ変更してください 'Dim Hozon, GetData As Variant ReDim GetData(1 To 100, 1 To 100) As Variant '全テキストファイルの任意行のデータを取得する m = 0 For k = 1 To UBound(FilePath, 1) 'テキストファイルが存在する場合に実行 If IsEmpty(FilePath(k)) = False Then '保存する配列を空にする ReDim Hozon(1 To 100, 1 To 100) As Variant 'テキストを開いて配列にデータを保存 Open FilePath(k) For Input As #1 Line Input #1, buf tmp = Split(buf, vbLf) '改行コードで分割 For i = 1 To UBound(tmp) - 1 'インデックス番号の最大値-1まで繰り返し LogDate = Left(tmp(i), 23) 'FileType = workbok(FilePath).Name '件数の取得 abc = Mid(tmp(i), InStr(tmp(i), "件数=") + 1) CaseNum = Left(abc, InStr(abc, ")") - 1) Cells(i + 1, 1).Resize(1, UBound(tmp) + 1).Value = LogDate 'Cells(i + 1, 2).Resize(2, UBound(tmp) + 1).Value = FileType Cells(i + 1, 3).Resize(3, UBound(tmp) + 1).Value = CaseNum ' Cells(i + 1, 1).Resize(1, UBound(tmp) + 1).Value = abc Next i End If Next End Sub

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

dodox86

2022/05/23 12:44

> ①Excel上でボタンを押下 > ②フォルダを選択 > ③「sh~」で始まるファイル以外のテキストファイルをすべて1行ずつ読み込む > ④③で読み込んだ内容から以下の内容を抽出しエクセルに張り付ける > ・日付(行頭~23文字)(Excel:A2~) > ・ファイル名(Excel:B2~) > ・件数(「~ 件数=○○)」の○○部分のみ抽出)(Excel:C2~) それぞれを個別にみて、結局どれが理解し、動いていてどれが理解できなく、動いていないでしょうか。あれもこれも分からない状況だと完成はおぼつかないので、ひとつひとつ確実に片づけましょう。そしてなるべくトピックを絞って質問するのが有用な回答をいただくコツです。 [質問するときのヒント] https://teratail.com/help/question-tips [推奨していない質問] https://teratail.com/help/avoid-asking > 思うように動かず修正を繰り返しているうちに今まで動いていた部分もエラーが返ってくるようになってしまいました… 「ここまではちゃんと動いた」と言う時点でそれぞれバックアップしましょう。経験者は普通にやっています。 また「エラーが返った」と言われてもその再現ができない閲覧者、回答者には実際に試さない限り分かりません。詳細を質問文中に示しましょう。そういった注意事項はteratailに限りません。
s.s.s.s.

2022/05/23 13:45

ありがとうございます。質問内容を再度修正します。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。