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

私は、WEBデザイナーで、ある業者様より下記のような依頼を受けました。

ある商品のネット通販を行いたいのですが、今までオフラインでは販売もされておられ、その受注管理などは全てエクセル上にて手書きで行われておられました。
今回、オンラインショッピングを構築いたします。
オーダーは、購入の際に、1オーダーにつき、メール及びCSV形式ファイルがそれぞれ一個ずつ送られてくる仕組みなります。
※CSV形式に書き出すのは、レンタルサーバー会社が提供しているメールフォームCGIの仕組みでおまけ機能としてついているようです。


この際、CSVで送られてきたファイルを、1ファイルずつ既存の受注管理を行っているエクセルファイルに読み込ませたいのですが、そういったことは可能なのでしょうか?

(つまり、メールで送られてきたデータを、エクセルファイルに書きこもうとすると、購入者住所なら購入者住所の箇所をメールからコピーして、それをエクセルに貼り付け、購入者電話番号なら購入者電話番号のセルに貼り付け。。。。と非常に煩わしいですよね。

CSVなら、1オーダーつき、1クリックで、購入者住所、購入者電話番号、購入商品名、購入商品数。。。などの情報を一気にデータを読み込ませる事ができるかと思いまして。)

その場合は、やはりマクロなどの知識が必要になってくるのでしょうか?

ちょっと説明が悪い箇所などもございますが、
ご指導いただけると助かります。どうぞよろしくお願いします。

A 回答 (6件)

#4について


メールとCSVはすでに別になっていたのですね。
申し訳ありませんでした。

OutlookにCSVを添付したメールが送られて
来た場合、Excelのマクロを使って、メール
内のCSVを自分のPCに保存するサンプルを
#4で紹介しました。

#1の後半についてですが、Excelのどこに
挿入するか、指定ができたと思います。
    • good
    • 0
この回答へのお礼

返事が遅くなり申し訳ございませんでした。
何とか解決できそうです。ありがとうございました。

お礼日時:2005/05/28 10:31

似たような質問が今まであって、同じようなコードを書いていますが勘弁してください。

参考までに。
質問のCSVファイルが、たくさんあって、それぞれの一行目に購入者住所、購入者電話番号、購入商品名、購入商品数のタイトル、二行目にデータが入っているとして、自動読み込みを作りました。

(1)"Main.xls"ブックの、「標準モジュール」の所に下のコードをコピーしてください。
(2)次に、"Main.xls"ブックに"search","Master"の名前の2つのシートを作ってください。"Master"シートの一行目は、項目名を入れておいてください。
(3)さて、任意のフォルダ内に、"Main.xls"と合成したいCSVファイル(名前は異なるようにしてください。番号でもいいです。)を全部いれます。あとは、マクロのFileSearchを実行すれば、Masterシートにすべて順番にコピーされます。この順番は、searchシートの所の順番と同じです。
(4)この後は、お使いの管理台帳などにまとめてコピーすればいいでしょう。
(5)項目数は、コードの初期設定の所の数字を変更してください。

=============
(メインコード)
Sub FileSearch(): 'ファイル検索

Dim sfolda As String
Dim SName As String
Dim i, j, k, n As Integer
Dim ww As String
Dim L, S As Integer
Dim ws As Object

Dim DName As String
Dim PP, FF, GG As String
Dim MaxG, DKoumoku, DLine As Integer
Dim MaxFileSu As Integer

'各値初期設定
MaxFileSu = 100: '最大ファイル数
DKoumoku = 4: 'データ項目数(実際の項目に応じて変えてください)
DName = "Master": 'シート名
MaxG = 1000: '最大検索行数(複数行あっても可能です)
DLine = 1: 'データ入力行数カウント

Application.ScreenUpdating = False

'現在のフォルダのパスを設定
sfolda = ThisWorkbook.Path

'ファイル名を入れるシートをセットおよび初期化
Set ws = Workbooks("Main.xls").Worksheets("search")
ws.Range("B1").ClearContents
ws.Range("A4:B200").ClearContents
ws.Cells(1, 2).Value = sfolda

'各ファイル名を検索しsearchシートに登録
SName = "*.csv"
n = 1

With Application.FileSearch
.LookIn = sfolda
.Filename = SName
rs1 = .Execute
If rs1 = 0 Then Exit Sub
For Each nm In .FoundFiles
ww = nm
S = 1
While S > 0
S = InStr(1, ww, "\", 1)
L = Len(ww)
ww = Right(ww, L - S)
Wend
If ww <> "Main.xls" Then
ws.Cells(n + 3, 1).Value = n: '1列目に番号セット
ws.Cells(n + 3, 2).Value = ww: '2列目にファイル名セット
n = n + 1
End If
Next nm
End With

'======================================================================
'合成処理

For n = 1 To MaxFileSu

'ファイル名をセット
PP = ws.Cells(1, 2).Value
If ws.Cells(n + 3, 2).Value = "" Then Exit For
FF = ws.Cells(n + 3, 2).Value
PP = PP & "\" & FF
GG = Left(FF, Len(FF) - 4)

'ファイルオープン
Workbooks.Open (PP)

'各シートからデータをMainに追加貼り付け
For i = 1 To MaxG
If Workbooks(FF).Worksheets(GG).Cells(i + 1, 1).Value = "" Then
Exit For
Else
For j = 1 To DKoumoku
aa = Workbooks(FF).Worksheets(GG).Cells(i + 1, j).Value
Workbooks("Main.xls").Worksheets(DName).Cells(DLine + 1, j).Value = aa
Next j
DLine = DLine + 1
End If
Next i

'ファイルクローズ
Workbooks(FF).Close
Next n

End Sub

=============
(6)なお、もとのcsvファイルに項目名がなくデータのみの場合は次のように、一部変更すればいいです。

(変更)
'各シートからデータをMainに追加貼り付け
For i = 1 To MaxG
If Workbooks(FF).Worksheets(GG).Cells(i, 1).Value = "" Then
Exit For
Else
For j = 1 To DKoumoku
aa = Workbooks(FF).Worksheets(GG).Cells(i , j).Value
    • good
    • 0
この回答へのお礼

ありがとうございます。助かりました。参考にいたします。


※※※※※※※※※※※※※※※※※※※※
この場を借りて皆様にお礼を申し上げます。ありがとうございました。
今は、まだ営業の段階でしたし、あくまでもWEBの開発がメインの事業ですので、クライアントには、「この要望には、最終的にはできるかどうか確約はできないが、できるように努力する。」という形でお応えさせていただきました。実作業になったときには、また改めて疑問などが出てくる可能性があるので、その際はまた皆様のお力をお貸しください。どうぞよろしくお願いします。
※※※※※※※※※※※※※※※※※※※※

お礼日時:2005/05/28 10:36

Outlookのメールから、CSVファイルを


切り離すマクロ(VBA)のサンプルを
紹介します。

参考URL:http://www.geocities.co.jp/SiliconValley-Bay/347 …

この回答への補足

ありがとうございます。
すいません。。ちょっと、あまり意味が分からないのですが、可能であればもう少し噛み砕いてご説明いただけますか。申し訳ございません。

補足日時:2005/05/25 09:27
    • good
    • 0

初歩のマクロの知識で十分可能になりますよ。


私はエクセルそのものの知識はほとんどありませんがVBAにていろいろな事が可能です。
ファイル操作~データ取り込みも問題なくできます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
何とかできる可能性は有りそうですね。
実は最近私はexcelマクロを少し勉強し始めておりまして。。

がんばってみます。

お礼日時:2005/05/25 09:25

それなりにマクロの知識は必要ですよね。



それにしても
メールからCSVに落とす作業のことが抜けてますが既に目処は立っているのでしょうか?

もしまだなら、どうせメールからCSVに落とすなら
直接DB(EXCEL?)に放り込んだほうが効率もいいですよね?

この回答への補足

ありがとうございます。

>メールからCSVに落とす作業のことが抜けてますが既>に目処は立っているのでしょうか?

こちらに関しては、ファーストサーバーというレンタルサーバー会社の提供するCGIを利用いたしますので、(参照:http://www.fsv.jp/function/cgi/form.html
メール→CSVではなく、お客様がフォームに入力した時点で、メールとCSVのそれぞれに書き出すことができます。

補足日時:2005/05/25 09:18
    • good
    • 0

CSVファイルをダブルクリックするだけで、


Excelになりますけど、意図されているもの
ではなさそうですね。
すでに作成されたテンプレートみたいなExcel
にCSVファイルを埋め込むんですよね。
「データ」「外部データの取込み」「テキスト
ファイルのインポート」でファイルの種類を
”すべての種類(*.*)”にして、指定するCSV
を選択し、カンマ区切りを選択すれば、シート
内に、CSVデータが読み込まれますよ。
ハズしていたら、ごめんなさいです。
    • good
    • 0
この回答へのお礼

ありがとうございます。データを読み込むのはそれでいいのですが、出来上がったexcelデータ(データベース)に新たに追加していくと言うことなんです。

お礼日時:2005/05/25 09:18

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