Submit Search
Upload
こじらせVBA
•
2 likes
•
4,545 views
S
satoshi ohya
Follow
斜め上からVBAを利用しようとしてみた資料です。
Read less
Read more
Software
Report
Share
Report
Share
1 of 45
Download now
Download to read offline
Recommended
SWF LOVE (ASを使わないFlash勉強会 #1)
SWF LOVE (ASを使わないFlash勉強会 #1)
ken39arg
SWF LOVE (ASを使わないFlash勉強会)
SWF LOVE (ASを使わないFlash勉強会)
ken39arg
VBA初級者講座サンプル
VBA初級者講座サンプル
Noriaki Takamizawa
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用
JustSystems Corporation
究極にして至高のWAF
究極にして至高のWAF
Yuki Ishikawa
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目
cct-inc
Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目
cct-inc
Perl Beginners #7 おとなのWAF
Perl Beginners #7 おとなのWAF
Munenori Sugimura
Recommended
SWF LOVE (ASを使わないFlash勉強会 #1)
SWF LOVE (ASを使わないFlash勉強会 #1)
ken39arg
SWF LOVE (ASを使わないFlash勉強会)
SWF LOVE (ASを使わないFlash勉強会)
ken39arg
VBA初級者講座サンプル
VBA初級者講座サンプル
Noriaki Takamizawa
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用
JustSystems Corporation
究極にして至高のWAF
究極にして至高のWAF
Yuki Ishikawa
Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目
cct-inc
Msを16倍出し抜くwpf開発1回目
Msを16倍出し抜くwpf開発1回目
cct-inc
Perl Beginners #7 おとなのWAF
Perl Beginners #7 おとなのWAF
Munenori Sugimura
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
Hikari Fukasawa
Web技術勉強会 第33回
Web技術勉強会 第33回
龍一 田中
WinFormsからWPFへ
WinFormsからWPFへ
Yamamoto Reki
SwiftSession5
SwiftSession5
裕人 一ノ瀬
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さ
Shinichi Takahashi
ストアアプリのXamlを解説
ストアアプリのXamlを解説
Makoto Nishimura
〜laravel で学ぶ MVC
〜laravel で学ぶ MVC
mikakane
これからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjava
irof N
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
ぜんぶScalaでやってみた
ぜんぶScalaでやってみた
力世 山本
なんちゃってIo tで朝活してみよう!
なんちゃってIo tで朝活してみよう!
Kazuhiko Kurimura
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls
Kota Kanbe
競プロ、なんでお前たちやらないの?
競プロ、なんでお前たちやらないの?
Shota Tsukamoto
GISについてのお話
GISについてのお話
futureotsuka
Seleniumのモバイル版「Appium」を使ってみた
Seleniumのモバイル版「Appium」を使ってみた
yamapy black
Spring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなし
Satoshi Kisanuki
Grep
Grep
yuichi yamada
電通大発、働き方を伝えるメディア UEQareer
電通大発、働き方を伝えるメディア UEQareer
Ken Takahashi
なれる!デザイナー(ロゴ作りから始めるデザイン入門)
なれる!デザイナー(ロゴ作りから始めるデザイン入門)
hiroki tanaka
マイナーデスクトップOsたち
マイナーデスクトップOsたち
Masaki Matsumoto
IoTでアヒルを動かしてみました
IoTでアヒルを動かしてみました
Kota Takebayashi
20160811車載
20160811車載
masao kamiwada
More Related Content
What's hot
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
Hikari Fukasawa
Web技術勉強会 第33回
Web技術勉強会 第33回
龍一 田中
WinFormsからWPFへ
WinFormsからWPFへ
Yamamoto Reki
SwiftSession5
SwiftSession5
裕人 一ノ瀬
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さ
Shinichi Takahashi
ストアアプリのXamlを解説
ストアアプリのXamlを解説
Makoto Nishimura
〜laravel で学ぶ MVC
〜laravel で学ぶ MVC
mikakane
これからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjava
irof N
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
What's hot
(9)
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
PHPer女子が語る2015!こんなコードを書くヒトはモテない〜コラボ編〜@PHPカンファレンス2015 #phpcon2015
Web技術勉強会 第33回
Web技術勉強会 第33回
WinFormsからWPFへ
WinFormsからWPFへ
SwiftSession5
SwiftSession5
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さ
ストアアプリのXamlを解説
ストアアプリのXamlを解説
〜laravel で学ぶ MVC
〜laravel で学ぶ MVC
これからのJavaのとっかかりを掴む #jdt51 #kanjava
これからのJavaのとっかかりを掴む #jdt51 #kanjava
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Viewers also liked
ぜんぶScalaでやってみた
ぜんぶScalaでやってみた
力世 山本
なんちゃってIo tで朝活してみよう!
なんちゃってIo tで朝活してみよう!
Kazuhiko Kurimura
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls
Kota Kanbe
競プロ、なんでお前たちやらないの?
競プロ、なんでお前たちやらないの?
Shota Tsukamoto
GISについてのお話
GISについてのお話
futureotsuka
Seleniumのモバイル版「Appium」を使ってみた
Seleniumのモバイル版「Appium」を使ってみた
yamapy black
Spring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなし
Satoshi Kisanuki
Grep
Grep
yuichi yamada
電通大発、働き方を伝えるメディア UEQareer
電通大発、働き方を伝えるメディア UEQareer
Ken Takahashi
なれる!デザイナー(ロゴ作りから始めるデザイン入門)
なれる!デザイナー(ロゴ作りから始めるデザイン入門)
hiroki tanaka
マイナーデスクトップOsたち
マイナーデスクトップOsたち
Masaki Matsumoto
IoTでアヒルを動かしてみました
IoTでアヒルを動かしてみました
Kota Takebayashi
20160811車載
20160811車載
masao kamiwada
Future_Lt20160810
Future_Lt20160810
Yosuke Tanaka
20160810-lt-cygwin
20160810-lt-cygwin
Future Architect.Inc
ログモニタリングツールを自作した話
ログモニタリングツールを自作した話
Hiroki Takeda
20161119 lt
20161119 lt
aiko sato
未来太郎と未来花子
未来太郎と未来花子
ming li
Spark CL
Spark CL
力世 山本
AI(強化学習)でロボットに学習させてみた
AI(強化学習)でロボットに学習させてみた
akmtt
Viewers also liked
(20)
ぜんぶScalaでやってみた
ぜんぶScalaでやってみた
なんちゃってIo tで朝活してみよう!
なんちゃってIo tで朝活してみよう!
社内LT大会#3 2016-4-28 Vuls
社内LT大会#3 2016-4-28 Vuls
競プロ、なんでお前たちやらないの?
競プロ、なんでお前たちやらないの?
GISについてのお話
GISについてのお話
Seleniumのモバイル版「Appium」を使ってみた
Seleniumのモバイル版「Appium」を使ってみた
Spring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなし
Grep
Grep
電通大発、働き方を伝えるメディア UEQareer
電通大発、働き方を伝えるメディア UEQareer
なれる!デザイナー(ロゴ作りから始めるデザイン入門)
なれる!デザイナー(ロゴ作りから始めるデザイン入門)
マイナーデスクトップOsたち
マイナーデスクトップOsたち
IoTでアヒルを動かしてみました
IoTでアヒルを動かしてみました
20160811車載
20160811車載
Future_Lt20160810
Future_Lt20160810
20160810-lt-cygwin
20160810-lt-cygwin
ログモニタリングツールを自作した話
ログモニタリングツールを自作した話
20161119 lt
20161119 lt
未来太郎と未来花子
未来太郎と未来花子
Spark CL
Spark CL
AI(強化学習)でロボットに学習させてみた
AI(強化学習)でロボットに学習させてみた
こじらせVBA
1.
こじらせVBA 普通のVBAでは物足りないアナタへ 2016/4/28 Future Architect ohya
2.
みなさんVBA好きですか?
3.
VBA(マクロ)への不満 VB歴20年くらい(VB4→VB5→VB6→VBA) レガシー言語
コレクションの機能がしょぼすぎる 関数型とかムリ ファーストクラスファンクションじゃない クロージャも書けない マクロモジュールを外出し(共通化)できない もはや罰ゲームの領域
4.
このLTは、 アラフィフのおっさんが VBAの不満に対して 斜め上から 果敢に挑戦して (こじらせて) いった物語
5.
VBAへの不満を解決するアレ こじらせ その1/VBAでテンプレート こじらせ その2/VBAでAltJS こじらせ
その3/VBAでAjax こじらせ その4/VBAでHttpServer まとめ お話の流れ
6.
VBAへの不満を ほぼ解決してくれるアレ
7.
それが ScriptControl
8.
ScriptControlとは? ActiveScriptを利用するためのOCX VBAから利用可能
各種スクリプト言語へ統一的にアクセスできる 実行環境(VM)みたいなもの VBScript/JScriptが呼び出せる 良い点 VBAからシームレスな呼出が可能 スクリプトの実行タイムアウトが設定できる 無限ループが数秒で終了する!! 悪い点 デバッグが絶望的 基本は、print文デバッグ
9.
VBA Script Control JavaScript①読込 ②呼出 ③結果 だいたいこんな感じ
10.
ScriptControl利用コード ポイント ・言語を”JScript”に設定(“VBScript”も可能) ・AddCodeで関数(コード)を追加 ・CodeObject経由で、追加した関数を呼び出せる
11.
掲載しているスクリプトの動作環境は、 MS Office 2010の32ビット版でのみ動作します MS
Office 2013/2016では動作検証していません。 注意
12.
こじらせ その1 VBAでテンプレート こじらせ度 ★☆☆☆☆
13.
VBAからテキストを自動生成 したいのに、 VBAにはメジャーな テンプレートエンジンがない
14.
JavaScriptなら たくさんある!!
15.
じゃあ、それ使っちゃいましょう
16.
Underscore.jsの利用サンプル VBAコード userfunc.js ポイント ・外部JSライブラリを読み込み、AddCodeでコードを追加 ・テンプレート展開処理も外部ファイルに記述 Underscore.jsはこっちで 利用しています
17.
JSON2(JScriptにはないので) ES6-Promise(非同期制御
※2) sprintf(文字列編集) MD5(ハッシュ) ※1.Node.jsで動くJSならだいたい動作します。 ※2.たまにブラウザ環境やES5依存のメソッドを 呼んでいるものとかあります。 ⇒setTimeoutとかArray.isArrayとか。 ※ライブラリ依存関係により、順番にロードする必要もあるかも 便利なJavaScriptいろいろ※1
18.
こじらせ その2 VBAでAltJS こじらせ度 ★★★☆☆
19.
みなさんJavaScript好きですか?
20.
JavaScriptへの不満 VBAよりは若干マシ JavaScriptじゃなくてJScript
Prototypeベースクラスシステム functionじゃなくて=>とか->とか使いたい {}とか書きたくない スコープがアレだし
21.
“JScript”でもコンパイルできる いい感じのAltJS言語ないかなー?
22.
CoffeeScriptは Coffee言語(Pythonっぽい)を JavaScriptに変換する トランスパイラ
23.
変換サンプル コンパイル ポイント ・ブロックはインデントベース({}等はない) ・式ベース言語 ・JSON表記もインデントベース(カンマ省略) ・変換後のJSもだいたい読める CoffeeScript JavaScript
24.
再びUnderscore.jsサンプル ①VBAコード ②compileutil.js ③userfunc.coffee ポイント ・コンパイラを追加(AddCode) ・CoffeeScriptをロード&コンパイル ・トリプルクォートを使って改行入り 文字列リテラルを容易に記述
25.
ScriptControlなら 別の言語処理系も動かせる!! ※Dart/TypeScriptはまだ試したこと無いです ※WebServer側のAssetパイプラインなら可能かも
26.
こじらせ その3 VBAでAJAX こじらせ度 ★★★☆☆
27.
JavaScriptからは、 XmlHttpRequestが使えます 実際には、 ” MSXML2.XMLHTTP.3.0”
28.
ということは、 AjaxによるAPIのリクエスト や スクリプトファイルのダウンロード とかも出来るわけです。
29.
loadFromUrl関数(同期ダウンロード)
30.
みたびUnderscore.js ポイント • BootStrap的なコードはローカルからロード • 共通で利用できるコードは、WEBからダウンロード •
CDN/ローカルサーバーの使い分け • このしくみにより、マクロ・スクリプト配布が不要となります
31.
よーく見直すと JSライブラリ/ソースを動的にダウンロードして、 ScriptControlにコード追加して、
そのコードを実行する ブラウザの動作と等価ですね
32.
さらにこじらせると… エンタープライズVBA?(3層)的な何かを実現 ポイント • 最小限のVBAコード • スクリプトの事前配布が不要 •
JSはユニットテスト可 • クライアントにODBCドライバ不要 • Webクライアントへの置き換えも 容易
33.
こじらせ その4 VBAでHttpServer こじらせ度 ★★★★★
34.
VBAにてHttpクライアントとして 利用できることはわかった
35.
でも、サーバー処理を実現できる ものなんて無いでしょ?
36.
その名も MS WinSock Control
37.
MS WinSock Controlとは
Microsoft謹製ActiveX サーバーソケットもオープン可能 クライアントから接続してくるとイベント発生 あとは“がんばって”HTTPプロトコルを実装
38.
Httpサーバー作ってみた
39.
40.
マクロの 実行結果
41.
• ExcelマクロをHTTP経由で実行できるRPCマクロサーバー • シングルスレッドで動作 •
同時に複数リクエストを行うとハングwww • Webサーバのコア部分はCoffeeScriptで実装 • 調子にのってmultipart/form-dataに対応。 ファイルアップロードも可能に 出来上がったもの
42.
まとめ
43.
ScriptControlを使うと・・・ 豊富なJavaScriptライブラリを利用できるよ AltJSも使えるよ
スクリプトの動的読込&実行ができるよ デバッグは地獄だよ
44.
是非、 ScriptControlで 遊んでみてください!!
45.
(訂正)サンプルコード中の間違い • サンプルコードにて、Array関数で配列を作成し、JavaScript関数に引き渡している表 記がありますが、実際には動作しません。以下の関数に置き換えることにより利用で きます。 • Array
→ jsArray • 実装
Download now