フォームメールを使いアンケートを行ったのですが、
予想以上に沢山メールがきてしまい、手で打ち込むには多すぎて困っています。どなたか一度にアンケートの内容をACCESSに取り込める良い方法を教えていただけないでしょうか?
OEのまとめてデコードという機能を使ってメールを一つにまとめ、それを区切って取り込む?という様な設定をすればいいのかな、と思ったのですが、やり方がわかりません。。
OS:WindowsMe
メーラー:OutlookExpress6
ACCESS:97
ちなみにフォームメールからは以下の様な形で送られてきます。
(項目との区切り文字は半角スペース=半角スペースです)
--- ここから ---
お名前 = 山田花子
年齢 = 99
職業 = 主婦
性別 = 女
email = ○○○○@△△.△.△△
電話番号 = 000-111-2222
住所 = *******************
ご意見 = ○○○○○○○○○○○○○○○○
submit = 応募する
--- ここまで ---
No.5ベストアンサー
- 回答日時:
あと、Accessのテーブルからアンケートを取り込んで、「=」の右側を取り出すには、例えば以下のようなコードを書きます(Access97には置換関数が無いので自作になります。
)以下の例は、「test01」という名前のテーブルに、「body」というフィールドを設け、そこにご質問のアンケートサンプル内容をそのまま貼り付けて、実行すると、イミディエイトウィンドウに、「=」の右側が表示されるというものです。
実行結果は
山田花子
99
主婦
女
○○○○@△△.△.△△
000-111-2222
*******************
○○○○○○○○○○○○○○○○
応募する
のようになります。
Sub test01_97()
Dim db As DAO.Database
Dim rs As Recordset
Dim body_str As String
Dim record_01(19) As String '要素数が20個の配列
Dim kaisi_num As Integer '改行コードまでの文字を数えるときの基準位置
Dim syuuryou_num As Integer '改行コード直前の文字の位置
Dim cnt02 As Integer '改行コードを見つけ出した回数と配列の添え字とをシンクロさせるためのカウンタ
Dim temp_str01 As String '文字列からスペースを消す処理につかう一時的な変数1
Dim temp_str02 As String '文字列からスペースを消す処理につかう一時的な変数2
Set db = CurrentDb
Set rs = db.OpenRecordset("test01", dbOpenDynaset)
body_str = rs!body
' Debug.Print body_str
' Debug.Print InStr(1, body_str, vbCrLf, vbBinaryCompare)
kaisi_num = 1 '初期化
cnt02 = -1 '初期化(配列の添え字が0から始まるのでそれにあわす為)
'**************************************************************************
'改行コードが全文字列内のどの位置にあるかを調べながら、必要な文字列を切り出す.
'**************************************************************************
For i = 1 To Len(body_str)
If Mid(body_str, i, 1) = Chr(13) Then '改行コードが見つかるたびに行なう処理
cnt02 = cnt02 + 1 '配列の添え字シンクロさせるためのカウント
temp_str01 = Mid(body_str, kaisi_num, i - kaisi_num) '一時的な変数に1行分を格納する
temp_str02 = F_Wchikan(temp_str01, " ", "") 'その1行から半角スペースをすべて消す
temp_str02 = F_Wchikan(temp_str02, " ", "") 'ついでに全角スペースもすべて消す
temp_str02 = Right(temp_str02, Len(temp_str02) - InStr(1, temp_str02, "=", vbBinaryCompare)) '= の右側を切り出して・・・
record_01(cnt02) = temp_str02 '配列に格納
kaisi_num = i + 1 '次の開始位置を設定(iは今回の改行コードの「位置」と同じ意味)
End If
Next
'**************************************************************************
'改行コードが全文字列内のどの位置にあるかを調べながら、必要な文字列を切り出す続き
'文字列の最後は改行コードが無い場合もあるので以下の処理をする。最後に改行コードがあってもなくてもやる。
'もし、最後が改行コードでもフィールド数は固定なので関係ない。
'**************************************************************************
cnt02 = cnt02 + 1 '配列の添え字の照らし合わせるためのカウント
temp_str01 = Mid(body_str, kaisi_num, Len(body_str) - kaisi_num + 1)
temp_str02 = F_Wchikan(temp_str01, " ", "") '半角スペースをすべて消す
temp_str02 = F_Wchikan(temp_str02, " ", "") '全角スペースをすべて消す
temp_str02 = Right(temp_str02, Len(temp_str02) - InStr(1, temp_str02, "=", vbBinaryCompare)) '= の右側を切り出して・・・
record_01(cnt02) = temp_str02
'配列の中身を表示
Debug.Print record_01(0) _
& vbCrLf & record_01(1) _
& vbCrLf & record_01(2) _
& vbCrLf & record_01(3) _
& vbCrLf & record_01(4) _
& vbCrLf & record_01(5) _
& vbCrLf & record_01(6) _
& vbCrLf & record_01(7) _
& vbCrLf & record_01(8)
Set rs = Nothing
Set db = Nothing
'**********************************************************
'このあと、もしくは、前処理の途中で別のテーブルに配列の中身を
'転記する処理をすればよい
'rs02.Fields(i) = record_01(i) みたいな感じ
'**********************************************************
End Sub
'************************************************
'置換関数
' 文字列の一部を置きかえる
' 引数は、元になる文字列(F_Text - String型)
' 検索する文字列(F_Kugiri - String型)
' 置換文字列(F_Chikan - String型)
' 戻り値は、取り出された文字列(F_Wchikan - String型)
' 関数名は、F_Wchikan
'************************************************
Public Function F_Wchikan(F_Text As String, F_Kugiri As String, F_Chikan As String) As String
Dim strWord As String
Dim intPos As Integer
If IsNull(F_Text) Then
Exit Function
End If
If IsNull(F_Kugiri) Then
Exit Function
End If
If IsNull(F_Chikan) Then
Exit Function
End If
intPos = Len(F_Text)
Do Until Len(F_Text) = 0
If StrComp(Mid(F_Text, 1, Len(F_Kugiri)), F_Kugiri) = 0 Then
strWord = strWord & F_Chikan
intPos = intPos - Len(F_Kugiri)
Else
strWord = strWord & Mid(F_Text, 1, 1)
intPos = intPos - 1
End If
F_Text = Right(F_Text, intPos)
Loop
F_Wchikan = strWord
End Function
以上は、1つのメール内容だけをテーブルに貼り付けて、「=」の右側を取り出すだけなので、ちゃんとしたものにしようと思うと、そのあとのテーブルへ格納する処理も書かなければなりません。
テキストファイルから読み取るなら、その処理も書かなければなりません。
AccessVBAがわかる場合はさほど難しくないのですが(もっと簡単な方法があるかもしれません)、逆に、わからない場合は、非常に面倒なので、できればExcel上で処理できてしまった方がいいのかな・・・と思います。
またまたお返事が遅くなり申し訳ございません(≧≦)
こんなに沢山書き込んでくださってありがとうございます☆
早速コピっていろいろやってみたのですがうまくいかず・・。
初心者の私にはちょっと難しすぎたようですo((>ω<o))
EXCEL上で処理したいと思います。
まだまだ勉強不足なのでこれから頑張っていきたいと思います。
本当にありがとうございました(o*。_。)oペコッ
No.4
- 回答日時:
ExcelのVBAで、空欄には「なし」を自動的に入力するとか、そういう方法は取れないでしょうか?
(僕、Excelは全然わからないもんですから・・・(^^))
AccessのVBAなら、例えばまとめてデコードしたときに一旦テキストファイルにそれをコピペして保存し、それをAccessに読み込んでテーブルの中に入れていくということが出来ますが、ただ、ここで説明するには手間がかかりすぎます。(データが重複してしまう場合に何をもって一意のレコードと判断するのかの基準もわからないですし、お客さんがどんなデータ入力をしているかもわからないので・・・)
ちなみに、Excel上で空欄を「なし」にするには、前回の置換の要領で、「検索する文字列」に何も入力しないで、「置換後の文字列」に「なし」と入力してすべて置換します。あらかじめ広範囲に選択範囲を指定してから置換すれば、その中の空白セルがすべて「なし」となりますので、一発で置換できると思いますが・・・
年齢なども同様に「歳」とか「才」が入力されていたり、半角全角が混ざっていたり・・・という場合は置換やVBAなどで文字列操作するといいとは思うのですが・・・
ダメですか?(^^)
No.3
- 回答日時:
「mail2table」見ました。
(^^)操作説明書どおりに、A2以降にアンケートデータを貼り付け、以下のようにすると「=」を指定して処理できませんでしょうか?(Excel2000ではできました)
処理前に「=」の前と後のスペースを「すべて置換」で消すのです。
まず事前に「Paras」シートの「KugiriLbl⇒」を「お名前=」に変更しておきます。
また、「Rslts」シートの一行目をアンケートの項目名に変更しておきます。
(1)A2以降にまとめてデコード等を利用してまとめたアンケートデータを貼り付け(ただし、アンケート以外の不要データは消す?検証してません。)
(2)Excelの「A」の部分をクリックして、1列全てを選択
(3)Excelの「編集」「置換」をクリック
(4)「検索する文字列」に半角スペースを入力
(5)「置換後の文字列」は何も入れない。スペースを消すので。
(6)「すべて置換」を押す
で、あとは「Quest」シートの「処理」ボタンを押します。
これでできないでしょうか?
この回答への補足
返事が遅くなり申し訳ございません。
ちょっとバタバタしていまして。。
わざわざフリーソフトまで見ていただきありがとうございますm(_ _"m)
まさに、今そのやり方でやっているのですが、もっと手間が省けないかな。。と思いまして。
というのも、この他に、年齢の欄の入力の仕方がばらばらだったり、ACCESSに取り込むときに空欄があるとエラーが出て取り込めなかったので、空欄には「なし」という字を入れたりとデータの手直しが結構必要なのです(x_x;)
No.1
- 回答日時:
もし、OutlookExpressではなくてOutlook2000などをお持ちでしたら、OutlookExpressからOutlook2000などにエクスポートしてから、Outlook2000でmdbファイル形式でメール内容を書き出せます。
そのファイルのテーブルの「本文」をVBAなどで操作して名前等を抽出すればいいと思います。(=より右の文字列を取り出す…などで)
Outlook2000の受信フォルダからmdbにメールを取り込む方法もあるのですが、97で使えるかわかりません。
一応参照設定をすればOutlook2000のメールデータが以下のようなサンプルのように取り出せます。
http://homepage1.nifty.com/tsware/tips/tips_257. …
もしかしたらAcc97でも使えるかも・・・
OE6から直接mdbにメールを取り込むにはMAPIコントロールというのが必要ですが、これはVB6とか、OfficeDeveloppperなんかが無いとできなかったように思います。僕が試した限りでは受信トレイ以外のメールは取り込めませんでした。(他のフォルダも取り込める方法がきっとあるんだと思うんですが…)
あとは、フリーウェアなどを使って特定のフォルダにメールをeml形式のファイルとして書き出し、それをAccessで読み込む…かでしょうか?(これは文字コードの問題がめんどくさかったような・・・)
以上はOutlook2000での例なのでOutlook97で通用するかどうかはわかりません。
CDOなんちゃらかんちゃらというのもあるらしいです。
いろいろ試してみてください。
ではでは~!
参考URL:http://homepage1.nifty.com/tsware/tips/tips_257. …
この回答への補足
教えていただいたURL見ました。
こんな便利なページがあるんですね。
早速お気に入りに登録しました。
けど、OUTLOOKはないんです。。
それでフリーソフトでいいのがないかな、と思って探していたら「mail2table」というのを見つけました。http://www.vector.co.jp/soft/dl/win95/business/s …
これは、複数のメールを「まとめてデコード」で一つにし、指定した区切り文字で分けるというようなものなのですが、区切り文字を1文字しか指定できないのです。。
送られてくるメールの区切りは半角スペース=半角スペースなので
うまくないんです。変更しようにもロックがかかっていて開けませんでした。これと同じようなものを作れれば、最後にACCESSからこのファイルをインポートすればいいと思うのですが、知識不足なものでちんぷんかんぷんなのです・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スペースを検索したい
-
select文のwhere句に配列を入れ...
-
INSERT文などの列名などの半角...
-
顧客データベースを作る場合、...
-
PHPでPostgreSQLを使う場合
-
WHERE条件の最終桁のスペースに...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
EXISTSを使ったDELETE文
-
SELECT 文 GROUP での1件目を...
-
エクセルの関数について教えて...
-
for whichの使い方
-
重複していないレコードの抽出...
-
副問合せの書き方について
-
Access:クエリーにて集計後に...
-
SQLで列名を変数にできないでし...
-
php mysql で WHERE句内に変数...
-
datetime型でNULL値を入れたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スペースを検索したい
-
あいまい検索で英文字の全角半...
-
顧客データベースを作る場合、...
-
select文のwhere句に配列を入れ...
-
INSERT文などの列名などの半角...
-
ストアドの戻り値で配列を返す方法
-
末尾の全角スペースの削除
-
SQLServer2005のストアドプロシ...
-
Trimの使い方
-
外部結合で取得した項目にNVL関数
-
ORACLEの「DECODE」と同じ意味...
-
WHERE条件の最終桁のスペースに...
-
DTSパッケージについて
-
SQL SERVER 2005 にて全テーブ...
-
セッション変数に格納されてい...
-
Oracleのスペース文字について。
-
phpMyAdminの使い方(SQL文記述)
-
文字列置換
-
可変長多次元配列でのソートに...
-
SUBSTR関数の結果が予想と異なる
おすすめ情報