[No.20 C,VB,Access,Excel ここはどこ?私は誰?] [No.21 VBやAccessからExcelにデータを書き込む] [No.22 Excel VBA からOutLookデータを読む] [No.23 Access97で半角カナをローマ字へ変換、、] [No.24 仕様は、よく聞きましょう・確認しましょう、、ね] 広告: |
No.20 | 1999/11/20 C,VB,Access,Excel ここはどこ?私は誰? |
[ページTOPへ戻る] |
<C,VB,Access,Excel ここはどこ?私は誰?> 目次 1.はじめの挨拶 2.Excel VBA ここはどこ?私は誰? 3.Access VBA ここはどこ?私は誰? 4.VB ここはどこ?私は誰? 5.C ここはどこ?私は誰? 6.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 今回は、 タイトル、 C,VB,Access,Excel ここはどこ?私は誰? ---> 記憶喪失? あなたは、どこから来たの?どこのダレ? ---> 職務質問? です。 えっ何???いつも、タイトル変でわからないよ。 そんなんだと、読まないで、ゴミ箱に入れられちゃうよ。。。。 改めまして、今回は、自分が起動した場所と自分の名前を調べる方法です。 C,VB,Access,Excelによって、違うので、4パターン書きました。 実行できるサンプルを hosoku/020/index.html に置いておくので、あわせてみてください。 Excel,Access,VB,Cの順番に解説します。 枠外解説・グチ --- 最近、職務質問、されてない いきなり、関係無い話ですが、 最近、帰りが早いので、警察官に職務質問されてない。 6・7年前、夜中に帰ったときは、たまに質問されてたっけ、、、 また、早朝出勤時に、警察官に「いま、帰りですか」とAM4時頃に聞かれ、 「いまから出勤です」 なんて、いったら、 「どこに?行くんだ、会社のガギは?」 と連続に質問され、 その時、自転車の前カギがたまたま付いてなく、盗難自転車扱いされたり、、 なんて、こと、ありました。 最近は、仕事でハマってないのと、警察官が熱心じゃないのかなぁ? まぁ、いいことなんだけど、チョット思い出したので。 警察官殿に、 自販機荒しや変造500円なんとかしろ、、 と言いたい酒屋の次男坊でした。 /* * 2.Excel VBA ここはどこ?私は誰? */ Excelファイルが、 どこから起動したか(どこに保管されているか) 知りたい時、ありませんか? えっ、無い。。。さようなら。 じゃなくて、相対パスとかで、 処理したいとき、知っていると便利だと思うので、説明します。 *各処理言語によって、微妙にちがう、、、VBAで一緒にならないの?かなぁ ----- Sub Record1() MsgBox "Application.Path = " & Application.Path MsgBox "Application.Name = " & Application.Name MsgBox "ActiveWorkbook.Path = " & ActiveWorkbook.Path MsgBox "ActiveWorkbook.Name = " & ActiveWorkbook.Name End Sub ----- を実行してみてください。 Application.Pathかな?と思ったのですが、 これは、Excel本体のインストールされているパスで、 目的のほうは、 ActiveWorkbook.Pathです。 う〜ん。。。 /* * 3.Access VBA ここはどこ?私は誰? */ 次に、Access MDBの位置です。 ----- Private Sub B_RUN_Click() Dim dbsA As Database Set dbsA = CurrentDb MsgBox "name = " & dbsA.Name MsgBox "Ver = " & dbsA.Version Set dbsA = Nothing End Sub ----- よく、わからなかったので、 CurrentDbを開いて、.Nameを見てます。 *ここの.Nameってパス付きなんだよね、、、逆に.Pathがなかったような? う〜ん、、、私の調べ方が悪い? /* * 4.VB ここはどこ?私は誰? */ 次にVBです(私の環境VB5です、、、) ---- Private Sub Command1_Click() MsgBox "App.Path = " & App.Path MsgBox "App.EXEName = " & App.EXEName End Sub ---- あれ、Appなの、、こんどは。。。 で、.EXENameですか、、、 まぁ、気にしない、気にしない、、、 /* * 5.C ここはどこ?私は誰? */ 最後に、Cです(Ms−DOSコンソール) ----- #includeint main(int argc, char *argv[]) { printf("argv[0] = %s\n", argv[0]); } ----- まだ、講座でやってませんが、Main関数の引数の、 argvの0番目に、位置が入っていると思います。 Cは、違っても、気にならないのですが、 Excel,Access,VB と微妙に違ったので、なぜ?と思いました。 /* * 6.おわりの挨拶 */ 次は、デルファイ、、、では、、と行きたいとこですが、 私、まだ、デルファイやってないので、、、、、 前回の文字コードと今回の起動位置?を使用して、 次回ぐらいに、ファイル処理とは、、とカッコつけて、発行したいと考えてます。 今回も軽めにサヨナラです。 お時間のある人は、サンプルダウンロードして、研究してください。 では、また。 三流PGのKen3でした。 PS.なんか、20回もメルマガ発行したけど、進んでないし、 あまり、タメになってないような気がします。 5回に1回ぐらいはタメになるマルマガめざして、がんばりますかねぇ。
No.21 | 1999/11/22 VBやAccessからExcelにデータを書き込む |
[ページTOPへ戻る] |
<VBやAccessからExcelにデータを書き込む> 目次 1.はじめの挨拶 2.VBやAccessからExcelにデータを書き込む 3.Excel起動解説 4.Excelを操作する 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 今週も、始まりますね。今日月曜日お休みの人は、4連休?いいですね。。。 今回は、 VBやAccessからExcelにデータを書き込む です。 実行できるサンプルを hosoku/021/index.html サンプルから、落とせるようにしておきます。あわせてみてください。 枠外解説・グチ --- 休みたい病、、、と、、自分勝手なリーダー君? またまた、関係無い話ですが、 22日、月曜日、休みたい、、、昔だったら、休んでたな、、 リーダーもどきをやっている今、、なんとなく、休めなくなった? 立場が、人を変える?(変えた?) チームのみなさんが、頼りないリーダーでも、 居ないと困るかなぁと思って、休めない。 なんて、カッコよくいいたいけど、 実際は、、、居ないほうが作業が進んだりして? 自分がバリバリ作業者だった頃、変に上司が残業につきあってるより、 早く帰ってくれよ、、、と思うことが多かったような。。 *ソリティアやってないで、帰ってくださいよ、、頼むから。。 また、上司や先輩に「進捗どう?」と聞かれたとき、 面倒なので「まあまあです」なんて、無表情で言ってたっけ。。。 今、聞く立場になって、「進みは?、何か問題点は?」と聞いたとき、 「何もないです」と答えられると、チョットさびしい。。 *順調で何も無いのは、いいことなんだけど、、、 新人の人は、少しできないフリをすると、先輩にかわいがられるかもよ? また、ウソ教えてるよ。 ダメダメそんなことしちゃ、、通用するのは、あんた(Ken3)にだけだよキット そうかなぁ、、、 あっ、長くなったので、続き?は、また、今度、、 /* * 2.VBやAccessからExcelにデータを書き込む */ いろいろな場面で、 VBやAccessからExcelを起動し、 データを書き込みたいと思います。 今回は、そんな時のサンプルになれば、、と思い書いてみます。 *指摘・要望、まってます。 例として、調査したいディレクトリを受け取り、 Excelを起動して、結果を書き込むモジュールを下記に記述します。 * 起動方法 DirListToExcel("C:\windows") など、引数でディレクトリを渡す ---- Public Sub DirListToExcel(strDIR As String) On Error GoTo Err_DirListToExcel Dim MyDirName As String Dim MyPath As String Dim oApp As Object Dim nYLINE As Integer '¥を付けるか判断する。 If Right(Trim(strDIR), 1) <> "\" Then strDIR = Trim(strDIR) & "\" '\を追加する End If 'ディレクトリが存在するか、チェックする。 If Dir(strDIR, vbDirectory) = "" Then MsgBox strDIR & "ディレクトリが見つかりません" Exit Sub End If '検索するパターンを渡す MyPath = Trim(strDIR) MyDirName = Dir(MyPath, vbDirectory) ' 最初のディレクトリ名を返します。 If MyDirName = "" Then MsgBox "該当ファイルが一件もありません" Exit Sub End If 'Excel を起動 ' ↓Accessウイザードで作成されます Set oApp = CreateObject("Excel.Application") oApp.Visible = True 'Only XL 97 supports UserControl Property On Error Resume Next oApp.UserControl = True '------------------------------- 'ここから、がんばって、自分で作成 oApp.Workbooks.Add '新規のワークシートを追加する 'タイトルを入れる oApp.Cells(1, 1) = MyPath & " から下のディレクトリ一覧 " & Date 'ディレクトリの出力 nYLINE = 2 Do While MyDirName <> "" ' ループを開始します。 ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。 If (GetAttr(MyPath & MyDirName) And vbDirectory) = vbDirectory Then oApp.Cells(nYLINE, 1) = MyPath & MyDirName 'ディレクトリ名を送信 nYLINE = nYLINE + 1 End If MyDirName = Dir ' 次のディレクトリ名を返します。 Loop Set oApp = Nothing Exit_DirListToExcel: Exit Sub Err_DirListToExcel: MsgBox Err.Description Resume Exit_DirListToExcel End Sub ---- /* * 3.Excel起動解説 */ Access,VB 同じ関数で動くみたいなので、 共通して、説明します。 まず、Excelの起動方法です。 Dim oApp As Object で、操作用の変数を確保します Set oApp = CreateObject("Excel.Application") oApp.Visible = True 'Only XL 97 supports UserControl Property On Error Resume Next oApp.UserControl = True CreateObjectを使用し、エクセルのオブジェクトを作成します。 何いってんの、、英単語翻訳しただけジャン? まぁまぁ、、 oApp.Visible = True で見えるようにして、、、 oApp.UserControl = True でユーザーが操作可能に、、 なんか、自信なさそうだけど、、? はい、実は、Accessのボタンのウイザードで作成してくれるんですよ。。 あっ、そうなの。 じゃ、Excelを操作するときの決り文句で知っとけばいいの? ホントは、知らないと、Wordの時は、、など、応用できないので、、、 わかりやすい資料見つけたら、また、解説します。 /* * 4.Excelを操作する */ Excelの起動が無事にできたところで、 次に、Excelを操作するには? です。 oApp.Workbooks.Add '新規のワークシートを追加する で新規のブックを追加します。 'タイトルを入れる oApp.Cells(1, 1) = MyPath & " から下のディレクトリ一覧 " & Date セルのA1(1,1の座標)にタイトルを入れます。 oApp.Cells(nYLINE, 1) = MyPath & MyDirName 'ディレクトリ名を送信 .Cells(Y, X) でデータをY行X列に入れることができます。 解説途中で悪いけど、 なんで、Workbooks.Add は、新規ブックの追加、 Cells(1, 1)は、、、って知ったの?どこみるの? えっとですね、下準備で、Excelを起動して、 ツール・マクロの記録で記録して、 それをヘルプで調べたんですよ。 * hosoku/021/index.html に画像、置いてます。参照してください。 Excelのオブジェクト体系がわかってくると、いろいろできますよ。 (楽しいですよ) それをもっと知りたいんだけど、、なぁ。。 今回は、 Workbooks.Add と Cells(Y, X) で、、、落ち着いたら、いろいろやりましょう。 じゃ、次回以降って約束で、、、 枠外解説・グチ --- 行儀が悪い書き方です oApp.Cells(nYLINE, 1) = XXXX って書き方、行儀が悪い書き方です。 オブジェクト.ブック.シート.セル が よい書き方です。 ExcelのVBAをやるときに、詳しく、解説したいと思います。 /* * 5.おわりの挨拶 */ なんとなく?わかりましたか?(楽しめましたか?) 処理結果をExcelに出力できると、 意外と便利なので、この機会に、、おぼえていただけると、、 オマエの教え方がイマイチ、、だよ、、 そうですか、、、次回はビシット、、なんてね。 そろそろ、しこみ?も終わったので、 宿題(質問・要望)をやっていこうと思ってます。 では、また。 三流PGのKen3でした。
No.22 | 1999/11/23 Excel VBA からOutLookデータを読む |
[ページTOPへ戻る] |
次は、受信したメールに対して処理を行いたい、そんな流れだと思います。。。
MailItem オブジェクト
http://msdn.microsoft.com/ja-jp/library/cc359390.aspx
↑MSDNを参考にして、
|
←をそのまま実行すると、セキュリティのエラーがでるし・・・(涙) ↓実行結果の動画 http://www.youtube.com/watch?v=utXGuzkJ27M ↑三流解説 [え〜と] And [こんな感じ] の音声付き(笑) ↓エラーの画像 ↑ここで、1分や2分・・を選択するとうまくデータを取ることができます・・・ |
<Excel VBA からOutLookデータを読む> 目次 1.はじめの挨拶 2.質問内容 3.サンプル 4.サンプル解説 5.積み残し、残作業項目(食い残し) 6.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 なんか、かぜぎみのKen3です。 今回は、 Excel VBA からOutLookデータを読む です。 いつになったら、C言語やるの? メルマガタイトル、Officeと戦うVBA講座に直したら? VBAネタ、消化できるまで、待ってくださいよ。 あれ、ハッシュと二分岐は? それも、、、もうチョット。(もう、忘れたかな?みんな?) 今回の実行できるサンプルを hosoku/022/index.html サンプルから、落とせるようにしておきます。あわせてみてください。 *テスト環境は、Excel97 と OutLook97 です。 枠外解説・グチ --- 食べたいものから、食べてると or 食い散らかし またまた、前置きが長い、関係無い話ですが、 みなさん、ご存知だと思いますが、 私宛てに、質問、いろいろ来てます。 簡単なのからレベルの高いのまで、、、(あれ、そんなに来てたっけ?) で、通常は、先に来た質問からやっていかないといけないのですが、 (基本は、先入れ先出しですよね、、) 興味のある・できそうな、、、 など自分で消化しやすいものから食べてます(解説始めてます) そのような、ことをしていると、消化できない難しい物や、 自分のキライナものが残ってしまいます。 仕事も同様で、よく、後輩や新人が自分のやりやすい、 画面や帳票から、やっていくと、 難しいモジュール系が残ってしまいます。 このような形で、食い散らかすと、あとで食べるの手伝う時、 もうぐちゃぐちゃで手伝いたくない、状況がうまれます。 *キレイに計画的に食べましょう? あと、自分の分は自分で、、と責任感強いの居るし、 これ、私の仕事、、とツバつけて、渡したくない人居るしなぁ、、 *あいつの食べ残しはイヤ?この子のなら、進んで手伝う? いろいろあって、配分考えるのツライ。 また、栄養が偏った食事ばかりしていると、、、(仕事でVBAばかり) まぁ、仕事は部署やその時のタイミングあるから、 足りない栄養は、自宅で自分で補給? 勝手に盛り上がってるけど、(それは、それで、いいとして) テメエが噛み砕いて教えてないから、 新人・後輩が消化できない件は、忘れたの? 忘れてないけど、、、 まぁ、プログラマーの栄養士にはなれそうないなキット。 あっ、長くなったので、続き?は、また、今度、、 /* * 2.質問内容 */ 読者の人から、質問で、 ---- >実は以前MicrosoftからフリーでACCESS97からOutlookのデータへ >リンクかインポートできるというものがでていたんですが >Outlook5には対応してなくて困っています。 >そこでACCESS97からOutlook5(Outlook Express5も)へリンクする方法を >お願いいたします。 ---- とメールをいただきました。 私事ですが、今度、仕事で(来年以降)、 メールで発注書を受け取って、処理したい そんな感じのシステムの見積もり作るので、 興味があったので、少しやってみました。 *メールで注文受けて処理、、、大丈夫なのかなぁ? Webを立ち上げて、、のほうがいいような気がするけど。。。 /* * 3.サンプル */ Excel97 VBA からOutLook97データを読んでみました。 test4が完成版です。 *Access や VBでも、結果の書き込み部分だけ変更すれば、 動作すると思います。 '----- ここから 'TEST()は、Access,VBでも、動作すると思う。 Sub TEST() 'Outlook にアクセスして、フォルダー名?をMsgboxで表示 'テストバージョン Dim olAPP As Object Dim olNameSPC As Object Dim nFCNT As Integer Set olAPP = CreateObject("Outlook.Application") Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト 'MsgBox olNameSPC.Folders.Count For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count MsgBox olNameSPC.Folders(1).Folders(nFCNT).Name Next nFCNT End Sub Sub TEST2() LookOutLookMSG ("受信トレイ") '↑半角で打ってください、 End Sub 'フォルダー名を受け取り、メッセージを表示、、デバッグ中? 'これも、Access,VBでも、動作すると思う。 Sub LookOutLookMSG(strFNAME As String) Dim olAPP As Object Dim olNameSPC As Object Dim objItem As Object Dim dteCreateDate As Date Dim strSubject As String Dim strItemType As String Dim strBody As String Dim intCounter As Integer Dim strOKNG As String Dim strMSG As String Dim nFCNT As Integer Set olAPP = CreateObject("Outlook.Application") Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト 'MsgBox olNameSPC.Folders.Count strOKNG = "NG" For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count If olNameSPC.Folders(1).Folders(nFCNT).Name = strFNAME Then strOKNG = "OK" Exit For '見つかったので抜ける End If Next nFCNT If strOKNG = "NG" Then MsgBox strFNAME & "フォルダーは、見つかりませんでした" Exit Sub End If For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items intCounter = intCounter + 1 With objItem dteCreateDate = .CreationTime strSubject = .Subject strItemType = TypeName(objItem) strBody = .Body End With strMSG = vbTab & "アイテム番号" & intCounter & " - " _ & strItemType & " - 作成日 " _ & Format(dteCreateDate, "yyyy/mm/dd hh:mm am/pm") _ & vbCrLf & vbTab & vbTab & "件名 : '" _ & strSubject & "'" & vbCrLf _ & strBody If MsgBox(strMSG, vbOKCancel) = vbCancel Then Exit For End If Next objItem End Sub Sub test3() Dim strInName As String strInName = InputBox("名称を入れてください") LookOutLookMSG (strInName) End Sub 'TEST4()は、ワークシート系のプロパティ、、 'を使っているので、Excelだけで、動作します。。チョット改造してください。 Sub test4() Dim olAPP As Object Dim olNameSPC As Object Dim objItem As Object Dim dteCreateDate As Date Dim strSubject As String Dim strItemType As String Dim strBody As String Dim intCounter As Integer Dim strMSG As String Dim nFCNT As Integer Dim nYLINE As Integer Workbooks.Add '新規ブックを作成する Set olAPP = CreateObject("Outlook.Application") Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト nYLINE = 1 For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count 'フォルダーの名称を書き込む Cells(nYLINE, 1) = olNameSPC.Folders(1).Folders(nFCNT).Name nYLINE = nYLINE + 1 '見出しを書き込む Cells(nYLINE, 1) = "No." Cells(nYLINE, 2) = "タイプ" Cells(nYLINE, 3) = "作成日" Cells(nYLINE, 4) = "件名" Cells(nYLINE, 5) = "内容" nYLINE = nYLINE + 1 'メッセージ数分ループ For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items intCounter = intCounter + 1 '変数に代入(セルに直接でもいいかも?) With objItem dteCreateDate = .CreationTime strSubject = .Subject strItemType = TypeName(objItem) strBody = .Body End With 'セルに代入 Cells(nYLINE, 1) = intCounter Cells(nYLINE, 2) = strItemType Cells(nYLINE, 3) = dteCreateDate Cells(nYLINE, 4) = strSubject Cells(nYLINE, 5) = strBody 'セット位置を移動 nYLINE = nYLINE + 1 Next objItem nYLINE = nYLINE + 1 Next nFCNT '楽して、Excelの自動サイズ調整を使用する Columns("A:E").EntireColumn.AutoFit Range("A1").Select End Sub '----- ここまで /* * 4.サンプル解説 */ 簡単に、解説します。 ア.オブジェクト"Outlook.Application"? 前回、VBAからExcelを操作したときと同様に、 Set olAPP = CreateObject("Outlook.Application") で、オブジェクトを参照できるようにします。 なんで、 Outlook.Application なの? そんなのExcelVBAヘルプに載ってないよ。 えっと、MSDN(マイクロソフトデベロッパーネットワーク) のCDで、Outlookで検索したら、載ってました。 じゃ、それないと、わからないの? ですね、、、今回のも、そこに載ってたサンプルを少し改造したものです。 * Outlook Express の設定方法、わからなかったので、 ご存知の方は、教えてください。 Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト で、メッセージのオブジェクトを作って、 (サンプルそのまんまジャン) For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count MsgBox olNameSPC.Folders(1).Folders(nFCNT).Name Next nFCNT テストなので、メッセージボックスで、フォルダー名を表示してます。 イ.メッセージの参照方法 オブジェクトフォルダーの中に、メッセージが入っています。 それを、 For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items のループで1件、1件、取り出してます。 実際の参照は、 With objItem dteCreateDate = .CreationTime strSubject = .Subject strItemType = TypeName(objItem) strBody = .Body End With で、作成日・件名・タイプ・内容 を変数に取り出してます。 ウ.なんで、オブジェクトの構造が? テメエはなんで、オブジェクトの構造が?ヘルプに載ってないのに、 わかるんだ?ほんとは、どっかに載ってんだろ、 隠さないで、教えな。 だから、MSDNからです、サンプルを修正しただけって行ってるジャン。 もし、調べたり、イメージ・構想が知りたかったら、 デバックモードでとめて、 ウォッチで変数名を指定して、中身を見るか、 イミディエイトウインドウで? 変数名で表示してみるとか、、 やってみてください。 なんとなく、わかったような、かわされたような、、、 ウォッチ・イミディエイトウインドウのイメージを hosoku/022/index.html にGIF画像で載せます。 何かの参考になれば、、、 枠外解説・グチ --- 知識じゃなくて、調べ方が知りたい? もう、いろいろなソフトやOSがここまで、大きくなってくると、 全てをオボエル?のは、不可能です(だと、おもいます) Accessのフィールドのプロパティぐらいは、 なんとか全部知ってるけど(←うそです、見栄はってます) 次から次と、ソフト、出てくるし、バージョンアップするし、、、 単語の意味を知ってるのも、大事ですが、 辞書の引き方、調べ方の効率の良い方法を知りたいなぁ と最近思います。 正直、MSDNも、いっぱい情報あって、うまい引き方がわからないです。 (今回、Outlook Express の方法が探せなかった) う〜ん、、、長くなりそうなので、この話題も、機会があったら、続きを、、、 /* * 5.積み残し、残作業項目(食い残し) */ 食後のイップク、、、と行きたいところですが、 まだまだ、食べ残しがあります。 ア.Outlook Express Outlook Express のオブジェクトの作り方、 構造がわからなかった。。 イ.階層が深いとき 受信トレイにメールマガジン・個人関係・仕事関係・その他 など、トレイの下にフォルダーを作成して、 メールを管理している場合、対応していない ウ.質問はAccessのリンクだったでしょ 質問内容、読み返すと、 Accessのリンクテーブルを作成して、 リンクにして?直接参照したい みたいなこと書いてあったけど、 私のやり方だと、データを取り出す?ぐらいはできそうだけど、、 エ.将来の自分のために 送り主のメールアドレスを調べて、そのメールだけをAccessに インポート。 または、ルールを付けて、件名に、「発注」が入っていたらなど。 *また、一言いい? いいですよなんでも? Outlookのメール仕分け機能で、 このアドレスだったら/この件名だったら、発注フォルダーに移動、 って、やって、1つにまとめて、 テメエが作った、メッセージ取りだしサンプルを改造すれば、 できるんじゃないの、、自分で全部やらなくてもさ、、 /* * 6.終わりの挨拶 */ 今回、なんとなく?わかりましたか? あまり、噛み砕いてないので、消化しにくいですが、 サンプルを実行して、処理を見ながら、1つ1つ食べてみてください。 オブジェクト参照で、いろいろ、面白そうな処理、できそうですね。 もっとオブジェクトやメソッドを研究すると、 登録されているアドレス帳を調べてメールを送る、、 なんて、悪い処理も作れそうですね。。 めずらしい食べ物(要望・質問) や 調理方法(処理方法?)、味付けの方法(小技・テクニック?) あったら、気軽に掲示板に。 *素人さんからのメール、料理の鉄人さんからのメール待ってます。 では、また。 かぜぎみで調子の悪い三流PGのKen3でした。 *テメエが調子悪いのは、いつもだろ、、、 今日は、もう、かんべんしてね。。。 (ヒマな人は、下のワク外通信も見てください)
No.23 | 1999/11/27 Access97で半角カナをローマ字へ変換、、 |
[ページTOPへ戻る] |
<Access97で半角カナをローマ字へ変換、、> 目次 1.はじめの挨拶 2.質問内容 3.サンプル 4.サンプル解説 5.積み残し、残作業項目 6.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 なんか、まだ、かぜぎみのKen3です。う〜ん、体調不良? 今回は、 Access97で半角カナをローマ字へ変換 です。 今回の実行できるサンプル・手順の画像を hosoku/023/index.html で、確認可能にしてあります。画像を見ながら、読んでください。 *テスト環境は、Access97,Excel97 です。 /* * 2.質問内容 */ 読者の人から、質問で、 ---- >教えて欲しいのですが、Excel、 >またはAccessで半角カタカナからヘボン >式ローマ字に変換したいのですが、良い方法はないでしょうか? >変換のテーブルを作るのはいとわないのですが、 >高速に処理する方法はないでしょうか? ---- とメールをいただきました。 チョット変なサンプルですが、見てください。 *あまり、高速じゃないなぁ、、、 /* * 3.サンプル */ 基本構想、、、 マスターテーブルに CODE 文字 ローマ字 濁点 半濁点 202 ハ ha ba pa 203 ヒ hi bi pi 204 フ hu bu pu 205 へ he be pe 206 ホ ho bo po のイメージでデータを入れる。(マスター修正可能) 初期設定で、変数にテーブルデータを読み込む。 変換処理で、 1文字取りだし、変換テーブルを見て、ローマ字をセット 例)ハセガワだったら、ハを取りだし、コード変換 配列の202番目を見て、データをセット ガの時は、濁点の判断をし、 配列の濁点データをセットする。 コードの一発参照なので、ある程度、速いと思うけど、、、 *なんか、キレがイマイチだなぁ、、 '----- ここから サンプルです。 Option Compare Database Option Explicit Type TYPE_HENKANTBL 'ユーザー定義型を定義します。 HEBON As String 'ローマ字 DAKUTEN As String '濁点 HANDAKU As String '半濁点 End Type Public typHENKANTBL(255) As TYPE_HENKANTBL 'もったいないけど、255個取る ' Mst_KanaConv テーブルから、マスターデータを ' グローバル変数、 typHENKANTBL(255)に読み込む ' 一回だけ、前準備で実行 Sub KanaConvInit() 'ローカル変数定義 Dim dbs As Database Dim rstMST As Recordset Dim strSQL As String Dim nIndex As Integer 'データベース指定 Set dbs = CurrentDb 'SELECT文 strSQL = "SELECT * FROM Mst_KanaConv " Set rstMST = dbs.OpenRecordset(strSQL, dbOpenDynaset) '初期値のセット rstMST.MoveFirst '先頭に移動、念のため? 'マスターデータをセットする While rstMST.EOF = False 'アスキーコードの場所にセットする nIndex = rstMST![CODE] typHENKANTBL(nIndex).HEBON = rstMST![ローマ字] & "" typHENKANTBL(nIndex).DAKUTEN = rstMST![濁点] & "" typHENKANTBL(nIndex).HANDAKU = rstMST![半濁点] & "" rstMST.MoveNext '次のデータを読む Wend 'テーブル・データベースをクローズする rstMST.Close dbs.Close End Sub ' 受け取った文字列を1文字毎に調べ、 ' 半角カナをローマ字に変換した結果を返す ' Function KanaConv(strKANA As String) As String Dim nCNT As Integer Dim nIndex As Integer Dim strRET As String 'リターン値 Dim strCHK As String 'チェック用 Dim strNEXT As String 'チェック用(次の文字、濁点、半濁点判定用) strRET = "" 'リターン値の初期化 For nCNT = 1 To Len(strKANA & "") strCHK = Mid(strKANA, nCNT, 1) '1文字取り出す strNEXT = Mid(strKANA, nCNT + 1, 1) '次の文字も取り出す nIndex = Asc(strCHK) 'アスキーコードに変換する 'ア〜ンの範囲か調べる、、 'ア-->177 ン-->221 If 177 <= nIndex And nIndex <= 221 Then '次の文字に濁点゛か半濁点゜があるか、チェックする ' ↓゛と゜は半角で打つ If strNEXT = "゛" Or strNEXT = "゜" Then If strNEXT = "゛" Then '濁点? strRET = strRET & typHENKANTBL(nIndex).DAKUTEN Else '半濁点 strRET = strRET & typHENKANTBL(nIndex).HANDAKU End If nCNT = nCNT + 1 'カウンターを小細工で1つ増やす(濁点・半濁点分) Else 'テーブルに登録されているローマ字をプラスする strRET = strRET & typHENKANTBL(nIndex).HEBON End If Else 'その他の文字 strRET = strRET & strCHK 'そのまま文字を+する End If Next nCNT KanaConv = strRET End Function '----- ここまで /* * 4.サンプル解説 */ ア.テストデータ作りは、エクセルで? hosoku/023/index.html 参照 今回、前準備で、マスターデータを作りますが、 ア〜ンまで、コード・データを入力するの大変です。 そこで、Excel上に A列 B列 c列 d列 e列 CODE 文字 ローマ字 濁点 半濁点 177 =char(a2) a 178 I =char(a3) i 179 =char(a4) u ^^^^^^^^^^^^^^^^ ↑ここは、しかたなく手入力 ↑ドラックして、作成 表を作成します。 次に、範囲選択後、コピーします。 Accessを起動し、テーブルの場所で、右クリック・貼り付け を選択すると、簡単にテーブルの形を作ることができます。 式=char(a2)が値だけ保存されるので、便利では? チョットカゼぎみなので、詳細は、次回に回します。 *質問、ください。。。 /* * 5.積み残し、残作業項目 */ /* * 6.終わりの挨拶 */ 今回、解説無いので、 サンプル画像を見ながら、やってみてください。 *サンプルを実行して、処理を1つ1つ。 では、また。 かぜぎみで調子の悪い三流PGのKen3でした。 *だったら、次回に回せって、、、中途半端で発行するなよ、、、
No.24 | 1999/12/01 仕様は、よく聞きましょう・確認しましょう、、ね |
[ページTOPへ戻る] |
<仕様は、よく聞きましょう・確認しましょう、、ね> 目次 1.はじめの挨拶 2.質問内容 と 勘違い項目 3.技術的発見 Dim a(20 To 30) 4.積み残し、残作業項目 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ こんにちは。 12月ですね。 なんか、まだ、体調不良のKen3です。う〜ん、まだ27歳だけどもう歳? 元気なうちに今回は、書いちゃおう。。。 /* * 2.質問内容 と 勘違い項目 */ 読者の人から、質問で、 ---- >教えて欲しいのですが、Excel、 >またはAccessで半角カタカナからヘボン >式ローマ字に変換したいのですが、良い方法はないでしょうか? >変換のテーブルを作るのはいとわないのですが、 >高速に処理する方法はないでしょうか? ---- とメールをいただいて、前回処理のサンプルを載せました。 ( hosoku/023/index.html 参照 ) ここまでは、良かったのですが、 ある、読者からの指摘で、 ---- >さて、「ヘボン式ローマ字」について意見をのべさして頂きます。 >このVBAはヘボン式ローマ字変換用ではありません。 >ヘボン式ではカトウは「KATOU」ではなく「KATO」です。 >シンジュクは「SHINJYUKU」 >シンバシは「SHIMBASHI」 >後に「B、M、P」がつく場合、NがMに変わります。 >http://www.nta.co.jp/kaigai/hebon.htm >ヘボン式ローマ字一覧表を参考にどうぞ。 ---- とメールをいただきました。 ヘボン式ローマ字一覧表?なんて、あったんですね。 またしても、私の知識の無さが、、バクロされてしまった。。。 *また、穴があったら入りたい、、状態ですね。 あ〜あ、やっちゃったねぇ、、、そろそろ四流に格下げ?かな? まぁ、名誉挽回でがんばってね、、、 はい、はい、、、 「KATOU」-->「KATO」か、、、一工夫考えないとなぁ。 枠外解説・グチ --- 仕様はよく確認しましょうね、、 自分でわかったフリ?しないで、仕様はよく確認しましょう。 だけど、あんまり丁寧に、演技入って確認すると、 このコンピュータ屋さんに仕事頼んで大丈夫だろうか? と客先に、心配されちゃうし、、、バランスが大事です。 ワザとらしい質問で、チャント考えてくれてるなぁ、、ってのをアピールする ってのが一流の営業プログラマーかな? /* * 3.技術的発見 Dim a(20 To 30) */ Public typHENKANTBL(255) As TYPE_HENKANTBL 'もったいないけど、255個取る と前回のサンプルで、書かせてもらいました。 プロの方から、味付け指導をいただきました。 Dim a(20 To 30) って書き方、できるみたいです。 *20〜30のエリアを取ってくれます。 みなさん、知ってました? もったいないけど、255個取るなんて、やらないで、 OKみたいです。 う〜ん、奥が深い? それとも、私が無知なだけ? マスターデータを間違えない限り、 177〜221でいいので、 Public typHENKANTBL(177 to 221) As TYPE_HENKANTBL が、いい書き方みたいです。 /* * 4.積み残し、残作業項目 */ ヘボン式かぁ、、、 一覧表みて、セコイ処理方法、 考えますか。 一緒にチャレンジ・処理方法(レシピ?)を載せてもOKな人は、 プログラム送ってください。 オイオイ、とうとう、他人任せか? いえいえ、いろんなプログラムの味付け知りたいから。 でも、自分の腕に自信が無くなったら、終わりだよ。。。なんてね。。 /* * 5.終わりの挨拶 */ 今回、短かったですが、なにか1つ・一言でも、参考になれば、、 と思ってます。 では、また。 かぜぎみで調子の悪い三流PGのKen3でした。
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
項目別に↓に本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。
[ルーキー rookies]・・・ 新人さん達 初心者さんへ
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話
[共同作業 team]・・・チーム、グループ作業
[プログラムは心? spirit]・・・プログラマー 心・気質・魂
[掲示板デビューしようぜ bbs]・・・掲示板関係の話、質問者・回答者の気持ちほか
[昔はできた seo]・・・三流式の効果無しSEOとアフィリエイト
[仕事や作業、転職 job]・・・仕事や転職、評価、作業など
[その他 etc]・・・その他 分類外の記事
※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。
Blogとリンク:[三流君の作業日記]/ [愚痴(Bookmark)]/ [広告Blog(Bookmark)]