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

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

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

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

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

2329閲覧

【ACCESS VBA】マルチフォーマットテキストをテーブルに取込したい

aki_matrix

総合スコア3

VBA

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

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/05/15 05:35

前提・実現したいこと

超初心者です。見当違いな質問をしていたら、申し訳ありません。
ACCESSにて、マルチフォーマットの固定長データをテーブルにVBAを使用し、取込したいと考えています。
マルチフォーマットのデータは

AA20200515
BBトウキョウ
CCスシロー サバ 10
CCクラスシ カレイ 20
CCカッパスシマグロ30
DDヨビ
BBカナガワ
CCハマスシ ウニ 40
CCチョウシマルイクラ 50
DDヨビ

のようになっており、
最終的には、テーブルに

日付,場所,商品,個数
20200515,トウキョウ,サバ,10
20200515,トウキョウ,カレイ,20
20200515,トウキョウ,マグロ,30
20200515,カナガワ,ウニ,40
20200515,カナガワ,イクラ,50

のように
CCの行数分(5行)となるよう、取込をしたいと考えています。
(CC行には3から8カラム目のように不要な文字列も存在)
※AAはファイルヘッダ
BBは伝票ヘッダ
CCは伝票明細
DDは予備(カット対象)
のイメージです。

試したこと

・Line Input
・Select Case (Leftで2文字目で判定していく)
等を使用すれば出来るかと思ったのですが、
どうにも上手くいきません。。
お手数ですが、アドバイス頂ければと思っております。。

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

ACCESS2010を使用しております。

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

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

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

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

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

guest

回答1

0

ベストアンサー

サンプル作って見ました。もっと良いやり方が必ずある筈です。
参考程度に見て下さい。
ファイルをC:¥Data.txtへ置いて動かせば、結果をイミディエイト画面で見れます。
Excelで作りましたがAccessでも同じ筈です。

Option Explicit Private Type Table_You_Data strDate As String strBasyo As String strName As String strNumber As String End Type Private TesRec() As Table_You_Data Private intCountRec As Integer Private iX As Integer Private MyStr As String Private strWorkAADate As String Private strWorkBBBasyo As String Private buf As String Sub Test_Sample_Miniature() Open "C:\Data.txt" For Input As #1 intCountRec = -1 Do Until EOF(1) Line Input #1, buf If Left(buf, 2) = "AA" Then strWorkAADate = Mid(buf, 3) Else Call SampleBB End If Loop Close #1 For iX = 0 To intCountRec MyStr = "" MyStr = MyStr & TesRec(iX).strDate & "," MyStr = MyStr & TesRec(iX).strBasyo & "," MyStr = MyStr & TesRec(iX).strName & "," MyStr = MyStr & TesRec(iX).strNumber Debug.Print MyStr Next End Sub Sub SampleBB() Do Until EOF(1) If Left(buf, 2) = "BB" Then strWorkBBBasyo = Mid(buf, 3) Line Input #1, buf Else Call SampleCC End If Loop End Sub Sub SampleCC() Do Until EOF(1) If Left(buf, 2) = "CC" Then ' intCountRec = intCountRec + 1 ' ReDim Preserve TesRec(intCountRec) TesRec(intCountRec).strDate = strWorkAADate TesRec(intCountRec).strBasyo = strWorkBBBasyo TesRec(intCountRec).strName = Mid(buf, 9, 4) TesRec(intCountRec).strNumber = Mid(buf, 13) Line Input #1, buf ' Else If Left(buf, 2) = "AA" Or Left(buf, 2) = "BB" Then Exit Do End If Line Input #1, buf End If Loop End Sub

投稿2020/05/15 07:32

編集2020/05/21 23:56
tosi

総合スコア553

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

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

aki_matrix

2020/05/15 07:35

ご回答ありがとうございます! 私にとっては、長いコードですので、動きを試してみます。
aki_matrix

2020/05/20 07:34

遅ればせながら、解決致しました! 実際はもう少し複雑な取込テキストだったのですが、頂いたサンプルを元に作成する事が出来ました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問