dポイントプレゼントキャンペーン実施中!

8月7日の質問No.8708191「Accessクロス集計で列数が多い場合の処理方法」ですが一部、未解決となります。
ですので、一旦その質問は締切りまして、再度内容を吟味して質問させていただきます。

関連会社から商品情報(十万件以上)に関する複数の「.txt」ファイルを頂きました。
この「.txt」ファイルには、商品に関する情報が記載されており、それぞれが関連し合ったファイルです。

これらを適切に関連を持たせ、最終的にはアップロード用に「.csv」として出力させたい為、内容が横1行に吐き出されるようにしたいです。

初歩的な質問になりますが教えてください。

作業環境はWindows7にExcel2003、Access2003がインストールされていますが、そのどちらも素人程度にしか扱えない状況です。
「.txt」の主情報(商品マスタ)は十万行以上になります。

金銭的なバックアップは見込めませんが、無料ソフトの導入などは問題ないです。
また、私以上に素人がこの処理をするかもしれない場合、どのような方法でアップロード用の情報にするのが良いでしょうか?

※添付画像が削除されました。

A 回答 (37件中31~37件)

回答No.6の前半が飛んでいましたので再提示します。

ごめん

回答No.5のお礼でシステムを再構築します。

少し息抜きです。
VB記述画面は既に見つけられた、フォームを右クリックしてボックスのイベントからコードビルダ
デザインビューのコード表示ツールから開く事も出来ます。

1.フォームを右クリックしてボックスのイベントからコードビルダ で
VBAの基本構文でボックス名にイベントがついた
下記は商品登録ボックスのイベントがクリックで入ったときの状態です

Private Sub 商品登録_Click()

End Sub

2.コード表示ツールから開いたときは
画面の左のプルダウンでボックス名等を選び、
右のプルダウンで動作を選ぶと 1.と同様のVBAの基本が表示されます。
テーブルのフィールドと連結しているときは、データの入力になり、
連結してないときは変数となります。

ボックス名の確認は、フィールドプロパティーのその他タグの初めにあります。
ラベルボックスもボックス名は同じ場所ですが、
画面に表示する文字列は書式タグの最初の表題で。

これらをふまえて、メニュー画面に日付関係のテキストボックスを配置し
次のコードをコード表示ツールから開いた画面にコピペして下さい。

Private Sub Form_Load()
基準日 = Date
基準日変更RTN
開始日 = 月初日: 終了日 = 月末日
End Sub

Private Sub 商品登録_Click()

End Sub

Private Sub 前日_Click()
基準日 = 基準日 - 1
基準日変更RTN
End Sub

Private Sub 翌日_Click()
基準日 = 基準日 + 1
基準日変更RTN
End Sub

Private Sub 基準日_BeforeUpdate(Cancel As Integer)
基準日変更RTN
End Sub

Private Sub 基準日変更RTN()
月初日 = 基準日 - Day(基準日) + 1
月末日 = 月初日 + 31: 月末日 = 月末日 - Day(月末日)
End Sub
    • good
    • 0

Private Sub Form_Load()


基準日 = Date
基準日変更RTN
開始日 = 月初日: 終了日 = 月末日
End Sub

Private Sub 商品登録_Click()

End Sub

Private Sub 前日_Click()
基準日 = 基準日 - 1
基準日変更RTN
End Sub

Private Sub 翌日_Click()
基準日 = 基準日 + 1
基準日変更RTN
End Sub

Private Sub 基準日_BeforeUpdate(Cancel As Integer)
基準日変更RTN
End Sub

Private Sub 基準日変更RTN()
月初日 = 基準日 - Day(基準日) + 1
月末日 = 月初日 + 31: 月末日 = 月末日 - Day(月末日)
End Sub
「関連がある複数のテキストファイルの扱い方」の回答画像6
    • good
    • 0

おじゃまします



今回のご質問は、多数のテキストファイルを今後どうするか・・・
というものになりますか?

テキストファイル内を変更しないのなら、
手っ取り早いのは、テキストファイルはインポートしないで
リンクテーブルとして参照するようにしておくというのはどうでしょう?
リンクしておけば、それはテーブルとして扱えるので、
各テーブルの結び付けとかは、クエリを作っておけばよいと思います。

試しに、新規 mdb を作成後、
添付ファイルの所からリンクテーブルを作成してみてください。
メッセージに従って進めていけば、出来上がると思います。

※ インポートした時よりも、テーブルへのアクセスは遅くなると思います
テキストファイルの置き場所が変わったら、
メニューのツールにあるリンクテーブルマネージャを使って変更します

※ 遅くて使えない・・・ なら、却下ということで


なお、前の質問は良く見ていませんが

>【「hoge.txt」のクロス集計理想】
> 商品番号,商品説明,使用上の注意,成分,含有成分,…他、項目2000以上
> A11111,○○○○,△△△,□□□□, ,
> F22222,◆◆◆, , ,▼▼▼▼

Access でのフィールド数/Excel での列数は、
2003 環境ではどちらも 255 近辺がリミットだと思います。
2007 以降であれば、Excel の列数は 16384 に広がった様です。
この 255 近辺のリミット以内に収める方向に向かっていたのでしょうか?

直接 csv ファイルを作るのであれば、このリミットは関係なくなると思います。

Accessで縦に情報が展開されてるテーブルの処理
http://oshiete.goo.ne.jp/qa/8733543.html

に回答しましたが、これをチョッと変更すれば対応できると思います。
この方法で良いのなら、サンプルを作ってみますが・・・

※ 上記のクロス集計理想で、直接 csv ファイルをつくるには、
基本的に使用するテーブルは1つで【説明.txt】をリンクしたもの
(もしくは、【説明.txt】をインポートしたもの)
(正式な出力項目がわからないので、上記理想の見える項目に特化してみると)

直接【説明.txt】ファイルを触る方法もありますが・・・
テーブルとして参照できた方が簡単と思います。


※ 商品番号って、商品コードの事?
「関連がある複数のテキストファイルの扱い方」の回答画像5

この回答への補足

回答ありがとうございます。

何種類も同じような質問をしていてすみません。
長くなっては読みづらいのでファイルの詳細を省きましたが、この質問が全てを意味していまして、

全部別の質問としてQを立てていますが

1.質問No.8708191「Accessクロス集計で列数が多い場合の処理方法」では、この全ての「.txt」ファイルの関係性と処理、
2.質問No.8733543「Accessで縦に情報が展開されてるテーブルの処理」では、質問No.8708191に含まれる1つの「.txt」ファイルの処理、
3.今回の質問は「これは本当にAccessで処理する案件なのか?」という事です。「.txt」は今後更新される可能性があります。

↓ ↓ ↓ ↓ ↓ ↓ ↓ 

実は1つの話に元づいています

1.リレーションされたテーブルを選択クエリでそれぞれの「.txt」の必要な項目を拾って1つのアップロード用「.csv」を作っていたがうまくいかない
2.この縦に情報が展開されるテーブルのお陰で項目の数×縦になってしまう為、このテーブルだけでもなんとかできないか
3.アップロード用に「.csv」として出力したかった為、“横一列”に躍起になっていたが、本当にAccessで横一列が最適な方法?

この様な事だったのです。
(むしろ更に分かりづらいでしょうか??)

> テキストファイル内を変更しないのなら、
なるほど、リンクテーブルとして参照するという方法もあるのですね。
テキストファイル内は変更しないので、試してみます。

自宅にAccessがない為、休み明けの明後日にでも試した内容をこちらにご報告しますね。

> 直接 csv ファイルを作るのであれば、このリミットは関係なくなると思います。
当初の質問は初の質問且つ、Accessについてよく知らない為、要領を得ない質問になってしまったのですが、この「hoge.txt」こそが質問No.8733543「Accessで縦に情報が展開されてるテーブルの処理」の事です。

実際はアップロード時に制限がある為、ある程度の範囲だけ取り出したいので直接CSVファイルを作らなくても問題ないです。
※他の「.txt」ファイルとは切り分けたい内容の為、どちらでも構わないのです。

> 直接【説明.txt】ファイルを触る方法もありますが・・・
テキストファイルに変更を加えたくはない為リンクやインポートが理想…ですかね?

> ※ 商品番号って、商品コードの事?
色々な呼び方をして紛らわしいのですが、商品番号=商品コードです。

補足日時:2014/09/06 20:03
    • good
    • 0

chayamatiさんが精力的に書き込まれているのでしゃしゃり出るのは気が引けますが、前回の質問を閉め切られたので切り口を変えたいのかなと感じたので書き込みをしました。



横の列数がものすごく多そうなので手でいろいろ設定するのはかなり大変かなという気がしていましたので、それなら別のやり方もと思い書き込みました。Rは本来は統計計算用のソフトウエアであまり馴染みがないと思いますが、このような集計の分野に適した命令が用意されており、CVSファイルを読み込む命令(read.cvs)、データを結合する命令(merge)、CSVファイルを書き込む命令(write.csv)の三つの命令をただ並べるだけで集計できそうなのです。日本語の情報はかなり有って検索すればでてきますが、少し癖があって手ほどきを受けないと最初は無理かなと感じています。一旦出来上がると(といっても三種類+αの命令なので)簡単なマニュアルさえ作っておけば初心者でも使えるので、質問者さん向きかなと(最初は手ほどきを受けた方が効率が全然違う)
興味を持たれましたらあたらしく質問でもしてください。
    • good
    • 0
この回答へのお礼

私が出来る・出来ないはともかくとして、そういった有益な情報を教えて頂けてとても感謝しております^^

なるほど、統計ソフトと言えど求めている「読み込み」「結合」「書き込み」を兼ね備えているのならうってつけです。

R言語というものでプログラミングするようですね。
プログラミングはやったことがない為てこずりそうですが、書籍なども出ているようですし週末を利用し少し触ってみようと思います。

お礼日時:2014/09/06 12:10

他の件は後で対応しますが



▼困っているのは「説明.txt」データをAccessにインポートした時、
下の例のように縦に情報を展開している為、横1列に情報が並ばない事です。

商品番号/配番/項目/項目の説明
A0000001/1000/注意/高温多湿の…(長文)
A0000001/2000/説明/大人気です…(長文)
C0000003/1000/注意/高温多湿の…(長文)
C0000003/3000/規格/100ml

少し視点が違いますが、今まで配番が気になっていましたが、
A0000001の配番が1000と2000の2つがあり
配番の1000がA0000001とC0000003にあります

配番1000の項目/項目の説明がありますね、配番とは説明の主キーになるのでは

配番でソートし同じ配番の「項目/項目の説明」が一致するか確認ください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

「説明.txt」のフィールドの関係性ですが、この「説明.txt」は商品説明欄の情報が入っております。

配番は商品説明欄の中での表示順位です。
配番=項目でもあります。その為、項目名が多少違くても同じ意味合いのものは配番が一致します。
また、項目の説明は同じものもありますが(サイズ違いの商品などがそれに当たります)、基本的に違う説明です。

▼例えば「説明.txt」がこうあった場合…

商品番号/配番/項目/項目の説明
C0000001/1/規格/3cm×15cm×1cm
A0000001/2/説明/大人気です…(長文)
A0000001/3/注意/高温多湿の…(長文)
C0000003/1/規格/100ml
A0000003/2/説明/大人気です…(長文)
C0000003/3/ご注意下さい/長時間の…(長文)
C0000003/4/表示色について/実際の色と…(長文)


▼商品説明欄はこういった順番で表示されます。

【A0000001】
規格:3cm×15cm×1cm
説明:大人気です…(長文)
注意:高温多湿の…(長文)


【A0000003】
規格:100ml
説明:大人気です…(長文)
ご注意下さい:長時間の…(長文)
表示色について:実際の色と…(長文)

お礼日時:2014/09/05 19:31

前の質問を完全に理解している訳ではないのですが、GUIインターフェースを主体としたAcessやExcelではちょっと荷が重いかなと思ったりしたいます。



このような処理は比較的簡単にできるツールがいくつか有るのですが、気分を変えて挑戦してみる気があればここに書き込むか、新しい質問にでもしてください。

データベースで処理するのが一番正当だとは思いますが、スクリプト言語で処理するのが手っ取り早いように感じます。
rubyなどでも良いのですが、Windowsですのでインストールを考えるとRが意外と適しているのかと思います。
http://cran.md.tsukuba.ac.jp/
このソフトはデータをメモリ上に全部読み込んでからやるので、データ量が多そうなので分割しないと駄目な可能性はありますが、比較的簡単にできるのではないかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

比較的簡単にできるツールもやはり存在してるのですね。
探してみたいと思います。

どちらかと言うと、Excelなどの定番ツールであれば行き詰っても検索でかなりの解決策がヒットすると思われますので、1から操作を覚えそれ1つで処理を完結させるものより、Excelなどを主に使い補助的に別ツールを利用する方法が、スマートではないのですが、わかりやすいかなと考えておりました。

ご紹介頂きましたRと触り比べてより良い方法を考えてみようと思います。

貴重な情報をありがとうございます。

お礼日時:2014/09/05 19:26

補足下さい



回答No.27の最後に聞きましたが、大変お忙しいようなので抜粋です。

関連会社から商品情報について次の件補足願います
1.テキストファイルの1行目は見出し行ですか
 VBAでインポートするとき、この項目名が全てテーブルのフィールドが必要です
 またテキストファイル名をVBAに記述します。
 ファイル名と項目名も補足して下さい。

2.在庫情報も商品番号、在庫情報の2項目ですか
 在庫情報には 商品番号、日付、在庫数等が必要かと

3.成分情報と注意事項、これは一つのファイルor二つのファイル?
 一つファイルのときは区切り記号(スペース、コンマ、等)はありますか

この回答への補足

回答ありがとうございます。

> 関連会社から商品情報について次の件補足願います
失礼しました。回答No.27のお礼の方へ返答したのですが、返答自体長くて埋もれちゃってますね^^;

> 1.テキストファイルの1行目は見出し行ですか
いいえ、いきなり情報が入っています。

ファイル名と項目名につきましてはこちらのQのお礼へ書きますね。
※項目名のうち、明らかに使用しないものに関しては省いて記載しています。

> 2.在庫情報も商品番号、在庫情報の2項目ですか(在庫情報には 商品番号、日付、在庫数)
いいえ、在庫情報としての単独の「.txt」データ自体がありません。
複数の「.txt」データがあり、そのうちの商品マスタらしき「.txt」のフィールドに含まれた状態でなら在庫情報は存在しますが、フラグのような「1」か「0」です。(在庫というよりは廃盤情報)
また、フラグを拾い上げるような「.txt」データはありません。

> 3.成分情報と注意事項、これは一つのファイルor二つのファイル?
> 一つファイルのときは区切り記号(スペース、コンマ、等)はありますか
これは1つのファイルです。
「.txt」データをテキストエディタで開いた時にカンマやスペースが見られない為、区切り記号はタブとしています。

補足日時:2014/09/05 14:13
    • good
    • 0
この回答へのお礼

▼商品情報に関する「.txt」について

・商品マスタ.txt(商品に関する主要情報)
・ブランド.txt(ブランドのリスト)
・メーカー.txt(製造メーカーのリスト)
・カテゴリ.txt(カテゴリのリスト)
・カテゴリ関連.txt(カテゴリ間の関連が記載)
・説明.txt(商品に関する説明)
・成分.txt(成分の内容が記載)
・成分関連.txt(商品マスタと成分の関連が記載)


▼「.txt」のフィールド名について

【商品マスタ.txt】
商品コード(文字列)
商品名(文字列)
メーカーコード(文字列)
ブランドコード(文字列)
成分コード(文字列)
販売価格(数値)
廃盤フラグ(数値)
更新日(数値)

【ブランド.txt】
ブランドコード(文字列)
ブランド名(文字列)

【メーカー.txt】
メーカーコード(文字列)
メーカー名(文字列)

【カテゴリ.txt】
カテゴリコード(文字列)
カテゴリ名(文字列)
親カテゴリ(文字列)
成分フラグ(数値)
階層(数値)

【カテゴリ関連.txt】
大分類コード(数値)
中分類コード(数値)
小分類コード(数値)
成分コード(数値)

【説明.txt】
商品コード(文字列)
配番(数値)
項目(文字列)
項目の説明(文字列)

【成分.txt】
成分コード(文字列)
成分名(文字列)
成分説明(文字列)

【成分関連.txt】
商品コード(文字列)
成分コード(文字列)



▼困っているのは「説明.txt」データをAccessにインポートした時、下の例のように縦に情報を展開している為、横1列に情報が並ばない事です。

商品番号/配番/項目/項目の説明
A0000001/1000/注意/高温多湿の…(長文)
A0000001/2000/説明/大人気です…(長文)
C0000003/1000/注意/高温多湿の…(長文)
C0000003/3000/規格/100ml

お礼日時:2014/09/05 14:13
←前の回答 1  2  3  4

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