フォームメールを使いアンケートを行ったのですが、
予想以上に沢山メールがきてしまい、手で打ち込むには多すぎて困っています。どなたか一度にアンケートの内容をACCESSに取り込める良い方法を教えていただけないでしょうか?
OEのまとめてデコードという機能を使ってメールを一つにまとめ、それを区切って取り込む?という様な設定をすればいいのかな、と思ったのですが、やり方がわかりません。。
OS:WindowsMe
メーラー:OutlookExpress6
ACCESS:97
ちなみにフォームメールからは以下の様な形で送られてきます。
(項目との区切り文字は半角スペース=半角スペースです)
--- ここから ---
お名前 = 山田花子
年齢 = 99
職業 = 主婦
性別 = 女
email = ○○○○@△△.△.△△
電話番号 = 000-111-2222
住所 = *******************
ご意見 = ○○○○○○○○○○○○○○○○
submit = 応募する
--- ここまで ---
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からこのファイルをインポートすればいいと思うのですが、知識不足なものでちんぷんかんぷんなのです・・。
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.4
- 回答日時:
ExcelのVBAで、空欄には「なし」を自動的に入力するとか、そういう方法は取れないでしょうか?
(僕、Excelは全然わからないもんですから・・・(^^))
AccessのVBAなら、例えばまとめてデコードしたときに一旦テキストファイルにそれをコピペして保存し、それをAccessに読み込んでテーブルの中に入れていくということが出来ますが、ただ、ここで説明するには手間がかかりすぎます。(データが重複してしまう場合に何をもって一意のレコードと判断するのかの基準もわからないですし、お客さんがどんなデータ入力をしているかもわからないので・・・)
ちなみに、Excel上で空欄を「なし」にするには、前回の置換の要領で、「検索する文字列」に何も入力しないで、「置換後の文字列」に「なし」と入力してすべて置換します。あらかじめ広範囲に選択範囲を指定してから置換すれば、その中の空白セルがすべて「なし」となりますので、一発で置換できると思いますが・・・
年齢なども同様に「歳」とか「才」が入力されていたり、半角全角が混ざっていたり・・・という場合は置換やVBAなどで文字列操作するといいとは思うのですが・・・
ダメですか?(^^)
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ペコッ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 助けてください!スパムメールがとんでもなく大量に届きます。 3 2023/08/10 16:32
- Access(アクセス) Access で半角スペースと全角スペースの区別について 3 2022/11/05 23:54
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- アルバイト・パート 面接を途中で辞退したパートに再応募したい 4 2023/03/04 16:57
- その他(メールソフト・メールサービス) Gmailについて 3 2023/02/23 21:07
- Access(アクセス) accessでexcelを読み込む時のデータ型 1 2022/03/28 19:45
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- その他(資産運用・投資) 助けてください 株購入、配当について 正式なグリー株式会社から 身に覚えのない手紙が届きました。 手 8 2023/08/28 12:50
- その他(スマートフォン・携帯電話・VR) 電話番号0355455667(paidyカスタマーサポート)からのSMS 2 2022/09/03 07:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スペースを検索したい
-
SQLServer2005のストアドプロシ...
-
ORACLEの「DECODE」と同じ意味...
-
INSERT文などの列名などの半角...
-
SUBSTR関数の結果が予想と異なる
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
for whichの使い方
-
フィルターかけた後、重複を除...
-
INSERT文でフィールドの1つだ...
-
SQLで特定の項目の重複のみを排...
-
外部参照してるキーを主キーに...
-
Oracleのデータ型、NUMBERについて
-
カーソル0件の時にエラーを発生...
-
重複していないレコードの抽出...
-
SQL Date型の列から年月だけを...
-
日本語のエイリアスは" "で囲...
-
Outlook 送受信エラー
-
SQLServerで文字列の末尾からあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スペースを検索したい
-
顧客データベースを作る場合、...
-
あいまい検索で英文字の全角半...
-
末尾の全角スペースの削除
-
INSERT文などの列名などの半角...
-
select文のwhere句に配列を入れ...
-
ORACLEの「DECODE」と同じ意味...
-
SQLServer2005のストアドプロシ...
-
ストアドの戻り値で配列を返す方法
-
外部結合で取得した項目にNVL関数
-
WHERE条件の最終桁のスペースに...
-
MYSQL 右埋め 半角スペース
-
DTSパッケージについて
-
セッション変数に格納されてい...
-
Trimの使い方
-
アンケートメールをACCESSに取...
-
EXCELのVBA NULL、スペ...
-
ストアドプロシジャで配列
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
おすすめ情報