SlideShare a Scribd company logo
1 of 18
Download to read offline
自動化技術紹介

0、注意と補足、例など
1、ある時刻になったら自動的にExcelVBAを実行させる
2、VBAでSQLを実行し、.csvに出力する
3、VBAからメールを送信する
4、あらかじめファイル名が分からないファイルを連続で開きSQLに溜め込む
5、条件にあったメールの添付ファイルを自動的に特定フォルダに保存
6、そこそこ複雑なwebページもVBAから開いてEXCELシートへコピー&ペーストする
7、ツール作成時間を短くするため、ツールテンプレートを作っておく
8、ある時刻になったらVBAから特定のキー操作をアドインアプリを動かす
9、VBA上で自動的に印刷する


使えるサイト、
 http://www.asahi-net.or.jp/~ef2o-inue/
 http://okwave.jp/qa/q3152899.html
 http://d.hatena.ne.jp/ken3memo/20091227/1261925747

                                                      1
注意

     “参照”設定で”Microsoft ActiveX Date Objects ~”を加えないと
     動かないものがいくつかあります。
     Excel上で、”ツール”→”マクロ”→”Visual Basic Editor”を選び、
     “ツール”→“参照設定”で上記のものを選んでください。
     どのバージョンがいいかは良く分かりません。


補足

     我々は、”ボタンを押すだけでO.K.”というようなものを”自動化”とは呼びません。
     このようなものは”半自動化”と呼びます。
     あくまでも、誰も全くコンピュータをさわらなくても、完全に実行されるもののみ
     “自動化”とよびます。
     さらに、接続先の不具合などで、実行が失敗した場合には、自動的にメールで
     知らせてくれることまでやって初めて“完全な自動化”となります。

     また、特殊な言語や特殊なソフトウエアを”使わない”ことにこだわります。
     これは管理者の引継ぎを楽にするだけでなく、管理者が不在でも
     関係ない人が保守できるようにしておくためです。
                                                       2
どんなことが自動化されるか?の例


・外部から定期的に送られてくる、ファイル名に規則性がない添付の.csvファイルを
 メールが送られてきたときに自動的に特定フォルダに保存し、
 その.csvの中身を自動的にSQLに取り込み
 それを使って演算し、その結果を特定の人へメールで知らせる

・ある時刻になったら特定web上の情報を取得しSQLに溜めると共に、
 正常に溜めたことをメールで知らせる

・特定のSQLテーブルが更新されているかどうかを定期的に確認し、
 更新されていれば、演算を実行し、実行結果をレポート形式の
 添付ファイルでメール送信すると共に、深夜に印刷する

・ある時刻になったらVBAからは直接操作できないExcelアドインを操作し、
 操作結果をSQLに溜め込み、それを使って演算し、演算結果をメールで送信する




                                           3
1、ある時刻になったら自動的にExcelVBAを実行させる



                          工事中

とりあえず、
 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_300.html
でもみてください。
ここで作成したVBSをWindowsの”タスク”で自動実行させます。

もう1つの重要な方法: Excelを立ち上げっぱなしにして、
Application.OnTime TimeValue(“hh:mm:ss”), “(マクロ名)"




                                                          4
2、VBAでSQLを実行し、.csvに出力する                                         工事中
   SQLを実行
'' SQL分を実行する汎用的なサブルーチン                                    ' SQL文を収得
Sub SQL(source, catalog, sql_sheet, y0, x0, y1, x1,
data_sheet, py, px, rfg)                                  strSQL = " "

' source 実行するSQLのデータベース名(trsk01など)                        ' セルに入っている文字列をstrSQLに追加していく
' catalog 実行するSQLのcatalog名(spxqなど)                        For y = y0 To y1 'y0行からy1行まで見に行く
' sql_sheet SQL文が書いてあるシート                                    For x = x0 To x1 'x0列からx1列まで見に行く
' y0,x0 sql_sheetのsql文を読み出す初めのセルの位置                             strSQL = strSQL & Sheets(sql_sheet).Cells(y, x).Value
' y1,x1 sql_sheetのsql文を読み出す最後のセルの位置                       'strSQLに追加
' data_sheet 結果を貼り付けるシート                                     Next x
' py, px シートのどのセルに貼り付けるかを指定                                  strSQL = strSQL & " " ' 次の行に行くときは空白を入れておく
' rfg 列名を表示するかどうか                                         Next y

' SQLに接続するために必要な変数を定義                                     ' SQL文を実行
Dim cn As New ADODB.Connection                            cmd.ActiveConnection = cn
Dim rs As New ADODB.Recordset                             cmd.CommandText = strSQL
Dim cmd As New ADODB.Command                              cmd.CommandTimeout = 600
Dim strSQL As String                                      Set rs = cmd.Execute

' 接続を確立する
cn.Open "Provider=SQLOLEDB; Data Source=" &
source & "; Initial Catalog=" & catalog & "; Integrated
Security=SSPI;“




                                                                                                                   5
工事中
' 実行結果を貼り付け
If rfg Then
    ' rfgがtrueなら列名も表示
    For i = 1 To rs.Fields.Count
         Sheets(data_sheet).Cells(py, i - 1 + px).Value =
rs.Fields(i - 1).Name
    Next
    Sheets(data_sheet).Cells(py + 1,
px).CopyFromRecordset rs
Else
    ' rfgがfalseなら列名は表示しない
    Sheets(data_sheet).Cells(py, px).CopyFromRecordset
rs
End If

' 接続をクローズする
cn.Close
Set cn = Nothing
Set rs = Nothing

End Sub




                                                                  6
CSVを作る
' CSV化
                                               工事中
   Sheets(“作業”).Copy ' copy data

  Application.DisplayAlerts = False

   ActiveWorkbook.SaveAs filename:=filename,
FileFormat:=xlCSV, CreateBackup:=False
   ActiveWorkbook.Close

  Application.DisplayAlerts = True




                                                     7
3、VBAからメールを送信する



                      工事中

とりあえず、
 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html
でもみてください。

ファイアーウォールの外に送信できない場合があるので、その場合は、
自分に送信し、そのメールだけ”リダイレクト”(outlookの機能)する方法があります。




                                                          8
4、あらかじめファイル名が分からないファイルを連続で開きSQLに溜め込む

Sub main2()                                       Sub fo(filefullpass, filename)

  Sheets("main2").Select                            ' 本体ファイルのファイル名を退避
                                                    thisfile = ThisWorkbook.Name
  ' 各種パスを設定
  pass_r = Cells(1, 2)                              ' 取り込むデータがあるファイルを開く
  pass_h = Cells(3, 2)                              Workbooks.Open filename:=filefullpass
                                                    ' コピー
  ' 先頭のファイル名の取得                                     Cells.Select
  filename = Dir(pass_r & "*.csv", vbNormal)        Selection.Copy
                                                    ' ペースト
  ' ファイルが見つからなくなるまで繰り返す                             Windows(thisfile).Activate
  While filename <> ""                              Sheets("作業").Select
                                                    Cells.Select
    ' CSVファイルを開く                                    ActiveSheet.Paste
    Call fo(pass_r & filename, filename)
                                                   ' 取り込むデータがあるファイルを閉じる
    ' 書き込み                                         Application.DisplayAlerts = False ' 保存しますかとか聞かれない
    Call wr                                       様にする

    ' 処理済のファイルを移動                                   Windows(filename).Activate
    Name pass_r & filename As pass_h & filename     ActiveWindow.Close

   ' 次のファイル名を取得                                     Application.DisplayAlerts = True
   filename = Dir()
  Wend                                            End Sub

End Sub

                                                                                               9
Excel上にあるデータをSQLへ溜め込む
Sub wr()                                     '書き込み
                                               For y = 2 To 5000
  Dim cn As New ADODB.Connection                 If Cells(y, 1).Value <> "" Then
  Dim rs As New ADODB.Recordset
  Dim cmd As New ADODB.Command                      rss.AddNew

  Sheets("作業").Select                               rss![Security ID] = Cells(y, 1).Value
                                                    rss![QUANTITY] = Cells(y, 2).Value
  ' 接続を確立する                                         rss![Date] = Cells(y, 3).Value
  cn.Open “Provider=SQLOLEDB; Data Source=          rss![PID] = Cells(y, 4).Value
(サーバ名); Initial Catalog=(カテゴリー名)                    rss![Classifications] = Cells(y, 5).Value
;User ID=(ユーザID);Password=(パスワード);"
  cmd.ActiveConnection = cn                         rss.Update

                                                 End If
  Set rss = New ADODB.Recordset                Next
  rss.source = "Bloomberg_position"
  rss.CursorType = adOpenDynamic
  rss.LockType = adLockOptimistic              '' クローズ
  rss.ActiveConnection = cn                    cn.Close
  rss.Open
                                               Set cn = Nothing
                                               Set rs = Nothing

                                               '
                                             End Sub




                                                                                                10
5、条件にあったメールの添付ファイルを自動的に特定フォルダに保存

             http://okwave.jp/qa/q3152899.html
Sub Sample(メール As MailItem)

 保存先フォルダのパス = "C:¥Documents and Settings¥UserName¥My Documents¥保存フォルダ¥"

 For Each 添付ファイル In メール.Attachments
  添付ファイル.SaveAsFile (保存先フォルダのパス & 添付ファイル.DisplayName)
 Next 添付ファイル

End Sub


これをoutlookのマクロに書く




                                                                          11
12
あとは、仕分けルールに登録するだけ
                    13
注意!
 ・ outlookを立ち上げっぱなしでないと実行されません。
 ・ 再起動やログオン後最初の実行時に「マクロを動かすか?」みたいなこ
   とを聞かれてとまります。
  まだ一度も実行していない場合は、帰る前に、1回触って起きましょう。




  やってみたい方はサンプルを差し上げます                 14
6、 そこそこ複雑なwebページもVBAから開いてEXCELシートへコピー&ペーストする
    http://d.hatena.ne.jp/ken3memo/20091227/1261925747
  (Javescriptで制御されているページも開けた)

Sub ie_copy_paste(strURL, strSheets) 'IE メニューのコマン       ' コピペ本体スタート
ドをテスト                                                      Dim objIE As Object 'IEオブジェクト参照用
'全て選択とコピーをIE上で行ない、Excelの新規ブックに貼り                           Set objIE = CreateObject("InternetExplorer.application")
付けてみた。                                                  'IEのオブジェクトを作る
'<http://d.hatena.ne.jp/ken3memo/20091227/1261925747>
                                                          '指定したページを表示
  ' 作業シートを消す                                              objIE.navigate strURL '文字列でURLを渡す
  Application.DisplayAlerts = False
  Worksheets(strSheets).Delete                            '表示完了を待つ .readyState と .Busy を見る
  Application.DisplayAlerts = True                        While objIE.readyState <> 4 Or objIE.Busy = True 'IEが
                                                        Busyの間 待つ
  ' 作業シートの作成                                                DoEvents
  Dim NewWS As Worksheet                                  Wend
                                                          DoEvents
  Set NewWS = Worksheets.Add
                                                         '形式を選択して貼り付け HTML貼り付けのテスト
  With NewWS                                             objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全
    .Name = strSheets                                   てを選択
  End With                                               objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
                                                         Range("A1").Select
                                                         ActiveSheet.PasteSpecial Format:="HTML"

                                                          objIE.Quit '.Quitで閉じる
  作業シートを削除しないとファイルが大きく
                                                          '使用したオブジェクト変数もキレイにしてね。
  なっていく                                                   Set objIE = Nothing

                                                        End Sub
                                                                                                            15
7、ツール作成時間を短くするため、ツールテンプレートを作る




             工事中




                                16
8、ある時刻になったらVBAから特定のキー操作を行い他のアドインアプリを動かす




                  工事中


     sendkeyを使う




                                          17
9、VBA上で自動的に印刷する




                        工事中


   ActiveSheet.PrintOut
   または
   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True




                                                                   18

More Related Content

What's hot

Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期
yone64
 
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
Michio Koyama
 
Haskellday rf
Haskellday rfHaskellday rf
Haskellday rf
rf0444
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
Oda Shinsuke
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02
Yusuke Ando
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
Kazumune Katagiri
 

What's hot (20)

iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
 
jQuery超入門編
jQuery超入門編jQuery超入門編
jQuery超入門編
 
RとSQLiteによるオミックス解析の促進
RとSQLiteによるオミックス解析の促進RとSQLiteによるオミックス解析の促進
RとSQLiteによるオミックス解析の促進
 
Wpfと非同期
Wpfと非同期Wpfと非同期
Wpfと非同期
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixir
 
15 tm1 rule
15 tm1 rule15 tm1 rule
15 tm1 rule
 
Alfrescoのカスタムテーブルの使い方
Alfrescoのカスタムテーブルの使い方Alfrescoのカスタムテーブルの使い方
Alfrescoのカスタムテーブルの使い方
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
 
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
 
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
 
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
 
Haskellday rf
Haskellday rfHaskellday rf
Haskellday rf
 
【第二回Android勉強会】データ永続化
【第二回Android勉強会】データ永続化【第二回Android勉強会】データ永続化
【第二回Android勉強会】データ永続化
 
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
XPagesDay2015 - 誰も教えてくれなかったデバッグ方法
 
初心者向け SQLite の始め方
初心者向け SQLite の始め方初心者向け SQLite の始め方
初心者向け SQLite の始め方
 
本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
 
20091030cakephphandson 02
20091030cakephphandson 0220091030cakephphandson 02
20091030cakephphandson 02
 
負荷テストことはじめ
負荷テストことはじめ負荷テストことはじめ
負荷テストことはじめ
 
データベース06 - SQL(VIEW, ALTER, GRANTなど)
データベース06 - SQL(VIEW, ALTER, GRANTなど)データベース06 - SQL(VIEW, ALTER, GRANTなど)
データベース06 - SQL(VIEW, ALTER, GRANTなど)
 

Similar to おもにEXcelだけで出来る自動化技術

Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
弘毅 露崎
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
koichik
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Tetsu Yama
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Tetsu Yama
 

Similar to おもにEXcelだけで出来る自動化技術 (20)

AWS SDK for Haskell開発
AWS SDK for Haskell開発AWS SDK for Haskell開発
AWS SDK for Haskell開発
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
 
Asp.net web forms_excel操作ライブラリ
Asp.net web forms_excel操作ライブラリAsp.net web forms_excel操作ライブラリ
Asp.net web forms_excel操作ライブラリ
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
WindowsでMySQL入門
WindowsでMySQL入門WindowsでMySQL入門
WindowsでMySQL入門
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Xtext 紹介
Xtext 紹介Xtext 紹介
Xtext 紹介
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
Powershell 超絶基礎 勉強会 v1 (もっと新しいバージョンがあります)
 
Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)Powershell勉強会 v3 (もっと新しいバージョンがあります)
Powershell勉強会 v3 (もっと新しいバージョンがあります)
 

More from Takanobu Mizuta

人工知能の可能性と限界 ーこの5年間の発展ー
人工知能の可能性と限界 ーこの5年間の発展ー人工知能の可能性と限界 ーこの5年間の発展ー
人工知能の可能性と限界 ーこの5年間の発展ー
Takanobu Mizuta
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
Takanobu Mizuta
 
人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較
人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較
人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較
Takanobu Mizuta
 
金融業界における人工知能、高速取引、人工市場による市場制度の設計
金融業界における人工知能、高速取引、人工市場による市場制度の設計金融業界における人工知能、高速取引、人工市場による市場制度の設計
金融業界における人工知能、高速取引、人工市場による市場制度の設計
Takanobu Mizuta
 
日本CFA協会アドボカシーウェビナー 資産運用業界における人工知能
日本CFA協会アドボカシーウェビナー  資産運用業界における人工知能日本CFA協会アドボカシーウェビナー  資産運用業界における人工知能
日本CFA協会アドボカシーウェビナー 資産運用業界における人工知能
Takanobu Mizuta
 
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
Takanobu Mizuta
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
Takanobu Mizuta
 
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
Takanobu Mizuta
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
Takanobu Mizuta
 
2022CIFEr
2022CIFEr2022CIFEr
2022CIFEr
Takanobu Mizuta
 
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
Takanobu Mizuta
 
金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~
金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~
金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~
Takanobu Mizuta
 

More from Takanobu Mizuta (20)

人工知能の可能性と限界 ーこの5年間の発展ー
人工知能の可能性と限界 ーこの5年間の発展ー人工知能の可能性と限界 ーこの5年間の発展ー
人工知能の可能性と限界 ーこの5年間の発展ー
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
 
人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較
人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較
人工市場シミュレーションによる 値幅制限とサーキットブレイカーの効果比較
 
金融業界における人工知能、高速取引、人工市場による市場制度の設計
金融業界における人工知能、高速取引、人工市場による市場制度の設計金融業界における人工知能、高速取引、人工市場による市場制度の設計
金融業界における人工知能、高速取引、人工市場による市場制度の設計
 
日本CFA協会アドボカシーウェビナー 資産運用業界における人工知能
日本CFA協会アドボカシーウェビナー  資産運用業界における人工知能日本CFA協会アドボカシーウェビナー  資産運用業界における人工知能
日本CFA協会アドボカシーウェビナー 資産運用業界における人工知能
 
Chapter 13 Artificial Intelligence (AI) for Financial Markets: A Good AI for ...
Chapter 13 Artificial Intelligence (AI) for Financial Markets: A Good AI for ...Chapter 13 Artificial Intelligence (AI) for Financial Markets: A Good AI for ...
Chapter 13 Artificial Intelligence (AI) for Financial Markets: A Good AI for ...
 
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
 
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
 
2022CIFEr
2022CIFEr2022CIFEr
2022CIFEr
 
L'intelligence artificielle utilisée sur les marchés financiers
L'intelligence artificielle utilisée sur les marchés financiersL'intelligence artificielle utilisée sur les marchés financiers
L'intelligence artificielle utilisée sur les marchés financiers
 
Artificial Intelligence Used in Financial Markets
Artificial Intelligence Used in Financial MarketsArtificial Intelligence Used in Financial Markets
Artificial Intelligence Used in Financial Markets
 
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
投資戦略の最適化の不安定性による金融市場の不安定性 -人工市場を用いた分析-
 
金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~
金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~
金融・経済分野におけるマルチエージェントシステム ~ 簡単なレビュー ~
 
Zoom上にタイマーを表示させる
Zoom上にタイマーを表示させるZoom上にタイマーを表示させる
Zoom上にタイマーを表示させる
 
金融業界における人工知能 2022/1/17
金融業界における人工知能 2022/1/17金融業界における人工知能 2022/1/17
金融業界における人工知能 2022/1/17
 
株式の高速取引と取引所の高速化
株式の高速取引と取引所の高速化株式の高速取引と取引所の高速化
株式の高速取引と取引所の高速化
 
人工市場による市場制度の設計
人工市場による市場制度の設計人工市場による市場制度の設計
人工市場による市場制度の設計
 
What is a Hight-Speed Trade? Why does a Stock Exchange Speed-Up?
What is a Hight-Speed Trade? Why does a Stock Exchange Speed-Up?What is a Hight-Speed Trade? Why does a Stock Exchange Speed-Up?
What is a Hight-Speed Trade? Why does a Stock Exchange Speed-Up?
 

おもにEXcelだけで出来る自動化技術

  • 1. 自動化技術紹介 0、注意と補足、例など 1、ある時刻になったら自動的にExcelVBAを実行させる 2、VBAでSQLを実行し、.csvに出力する 3、VBAからメールを送信する 4、あらかじめファイル名が分からないファイルを連続で開きSQLに溜め込む 5、条件にあったメールの添付ファイルを自動的に特定フォルダに保存 6、そこそこ複雑なwebページもVBAから開いてEXCELシートへコピー&ペーストする 7、ツール作成時間を短くするため、ツールテンプレートを作っておく 8、ある時刻になったらVBAから特定のキー操作をアドインアプリを動かす 9、VBA上で自動的に印刷する 使えるサイト、 http://www.asahi-net.or.jp/~ef2o-inue/ http://okwave.jp/qa/q3152899.html http://d.hatena.ne.jp/ken3memo/20091227/1261925747 1
  • 2. 注意 “参照”設定で”Microsoft ActiveX Date Objects ~”を加えないと 動かないものがいくつかあります。 Excel上で、”ツール”→”マクロ”→”Visual Basic Editor”を選び、 “ツール”→“参照設定”で上記のものを選んでください。 どのバージョンがいいかは良く分かりません。 補足 我々は、”ボタンを押すだけでO.K.”というようなものを”自動化”とは呼びません。 このようなものは”半自動化”と呼びます。 あくまでも、誰も全くコンピュータをさわらなくても、完全に実行されるもののみ “自動化”とよびます。 さらに、接続先の不具合などで、実行が失敗した場合には、自動的にメールで 知らせてくれることまでやって初めて“完全な自動化”となります。 また、特殊な言語や特殊なソフトウエアを”使わない”ことにこだわります。 これは管理者の引継ぎを楽にするだけでなく、管理者が不在でも 関係ない人が保守できるようにしておくためです。 2
  • 3. どんなことが自動化されるか?の例 ・外部から定期的に送られてくる、ファイル名に規則性がない添付の.csvファイルを メールが送られてきたときに自動的に特定フォルダに保存し、 その.csvの中身を自動的にSQLに取り込み それを使って演算し、その結果を特定の人へメールで知らせる ・ある時刻になったら特定web上の情報を取得しSQLに溜めると共に、 正常に溜めたことをメールで知らせる ・特定のSQLテーブルが更新されているかどうかを定期的に確認し、 更新されていれば、演算を実行し、実行結果をレポート形式の 添付ファイルでメール送信すると共に、深夜に印刷する ・ある時刻になったらVBAからは直接操作できないExcelアドインを操作し、 操作結果をSQLに溜め込み、それを使って演算し、演算結果をメールで送信する 3
  • 4. 1、ある時刻になったら自動的にExcelVBAを実行させる 工事中 とりあえず、 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_300.html でもみてください。 ここで作成したVBSをWindowsの”タスク”で自動実行させます。 もう1つの重要な方法: Excelを立ち上げっぱなしにして、 Application.OnTime TimeValue(“hh:mm:ss”), “(マクロ名)" 4
  • 5. 2、VBAでSQLを実行し、.csvに出力する 工事中 SQLを実行 '' SQL分を実行する汎用的なサブルーチン ' SQL文を収得 Sub SQL(source, catalog, sql_sheet, y0, x0, y1, x1, data_sheet, py, px, rfg) strSQL = " " ' source 実行するSQLのデータベース名(trsk01など) ' セルに入っている文字列をstrSQLに追加していく ' catalog 実行するSQLのcatalog名(spxqなど) For y = y0 To y1 'y0行からy1行まで見に行く ' sql_sheet SQL文が書いてあるシート For x = x0 To x1 'x0列からx1列まで見に行く ' y0,x0 sql_sheetのsql文を読み出す初めのセルの位置 strSQL = strSQL & Sheets(sql_sheet).Cells(y, x).Value ' y1,x1 sql_sheetのsql文を読み出す最後のセルの位置 'strSQLに追加 ' data_sheet 結果を貼り付けるシート Next x ' py, px シートのどのセルに貼り付けるかを指定 strSQL = strSQL & " " ' 次の行に行くときは空白を入れておく ' rfg 列名を表示するかどうか Next y ' SQLに接続するために必要な変数を定義 ' SQL文を実行 Dim cn As New ADODB.Connection cmd.ActiveConnection = cn Dim rs As New ADODB.Recordset cmd.CommandText = strSQL Dim cmd As New ADODB.Command cmd.CommandTimeout = 600 Dim strSQL As String Set rs = cmd.Execute ' 接続を確立する cn.Open "Provider=SQLOLEDB; Data Source=" & source & "; Initial Catalog=" & catalog & "; Integrated Security=SSPI;“ 5
  • 6. 工事中 ' 実行結果を貼り付け If rfg Then ' rfgがtrueなら列名も表示 For i = 1 To rs.Fields.Count Sheets(data_sheet).Cells(py, i - 1 + px).Value = rs.Fields(i - 1).Name Next Sheets(data_sheet).Cells(py + 1, px).CopyFromRecordset rs Else ' rfgがfalseなら列名は表示しない Sheets(data_sheet).Cells(py, px).CopyFromRecordset rs End If ' 接続をクローズする cn.Close Set cn = Nothing Set rs = Nothing End Sub 6
  • 7. CSVを作る ' CSV化 工事中 Sheets(“作業”).Copy ' copy data Application.DisplayAlerts = False ActiveWorkbook.SaveAs filename:=filename, FileFormat:=xlCSV, CreateBackup:=False ActiveWorkbook.Close Application.DisplayAlerts = True 7
  • 8. 3、VBAからメールを送信する 工事中 とりあえず、 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html でもみてください。 ファイアーウォールの外に送信できない場合があるので、その場合は、 自分に送信し、そのメールだけ”リダイレクト”(outlookの機能)する方法があります。 8
  • 9. 4、あらかじめファイル名が分からないファイルを連続で開きSQLに溜め込む Sub main2() Sub fo(filefullpass, filename) Sheets("main2").Select ' 本体ファイルのファイル名を退避 thisfile = ThisWorkbook.Name ' 各種パスを設定 pass_r = Cells(1, 2) ' 取り込むデータがあるファイルを開く pass_h = Cells(3, 2) Workbooks.Open filename:=filefullpass ' コピー ' 先頭のファイル名の取得 Cells.Select filename = Dir(pass_r & "*.csv", vbNormal) Selection.Copy ' ペースト ' ファイルが見つからなくなるまで繰り返す Windows(thisfile).Activate While filename <> "" Sheets("作業").Select Cells.Select ' CSVファイルを開く ActiveSheet.Paste Call fo(pass_r & filename, filename) ' 取り込むデータがあるファイルを閉じる ' 書き込み Application.DisplayAlerts = False ' 保存しますかとか聞かれない Call wr 様にする ' 処理済のファイルを移動 Windows(filename).Activate Name pass_r & filename As pass_h & filename ActiveWindow.Close ' 次のファイル名を取得 Application.DisplayAlerts = True filename = Dir() Wend End Sub End Sub 9
  • 10. Excel上にあるデータをSQLへ溜め込む Sub wr() '書き込み For y = 2 To 5000 Dim cn As New ADODB.Connection If Cells(y, 1).Value <> "" Then Dim rs As New ADODB.Recordset Dim cmd As New ADODB.Command rss.AddNew Sheets("作業").Select rss![Security ID] = Cells(y, 1).Value rss![QUANTITY] = Cells(y, 2).Value ' 接続を確立する rss![Date] = Cells(y, 3).Value cn.Open “Provider=SQLOLEDB; Data Source= rss![PID] = Cells(y, 4).Value (サーバ名); Initial Catalog=(カテゴリー名) rss![Classifications] = Cells(y, 5).Value ;User ID=(ユーザID);Password=(パスワード);" cmd.ActiveConnection = cn rss.Update End If Set rss = New ADODB.Recordset Next rss.source = "Bloomberg_position" rss.CursorType = adOpenDynamic rss.LockType = adLockOptimistic '' クローズ rss.ActiveConnection = cn cn.Close rss.Open Set cn = Nothing Set rs = Nothing ' End Sub 10
  • 11. 5、条件にあったメールの添付ファイルを自動的に特定フォルダに保存 http://okwave.jp/qa/q3152899.html Sub Sample(メール As MailItem) 保存先フォルダのパス = "C:¥Documents and Settings¥UserName¥My Documents¥保存フォルダ¥" For Each 添付ファイル In メール.Attachments 添付ファイル.SaveAsFile (保存先フォルダのパス & 添付ファイル.DisplayName) Next 添付ファイル End Sub これをoutlookのマクロに書く 11
  • 12. 12
  • 14. 注意! ・ outlookを立ち上げっぱなしでないと実行されません。 ・ 再起動やログオン後最初の実行時に「マクロを動かすか?」みたいなこ とを聞かれてとまります。 まだ一度も実行していない場合は、帰る前に、1回触って起きましょう。 やってみたい方はサンプルを差し上げます 14
  • 15. 6、 そこそこ複雑なwebページもVBAから開いてEXCELシートへコピー&ペーストする http://d.hatena.ne.jp/ken3memo/20091227/1261925747 (Javescriptで制御されているページも開けた) Sub ie_copy_paste(strURL, strSheets) 'IE メニューのコマン ' コピペ本体スタート ドをテスト Dim objIE As Object 'IEオブジェクト参照用 '全て選択とコピーをIE上で行ない、Excelの新規ブックに貼り Set objIE = CreateObject("InternetExplorer.application") 付けてみた。 'IEのオブジェクトを作る '<http://d.hatena.ne.jp/ken3memo/20091227/1261925747> '指定したページを表示 ' 作業シートを消す objIE.navigate strURL '文字列でURLを渡す Application.DisplayAlerts = False Worksheets(strSheets).Delete '表示完了を待つ .readyState と .Busy を見る Application.DisplayAlerts = True While objIE.readyState <> 4 Or objIE.Busy = True 'IEが Busyの間 待つ ' 作業シートの作成 DoEvents Dim NewWS As Worksheet Wend DoEvents Set NewWS = Worksheets.Add '形式を選択して貼り付け HTML貼り付けのテスト With NewWS objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全 .Name = strSheets てを選択 End With objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー Range("A1").Select ActiveSheet.PasteSpecial Format:="HTML" objIE.Quit '.Quitで閉じる 作業シートを削除しないとファイルが大きく '使用したオブジェクト変数もキレイにしてね。 なっていく Set objIE = Nothing End Sub 15
  • 18. 9、VBA上で自動的に印刷する 工事中 ActiveSheet.PrintOut または ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 18