This is the home page of MagicExceller, which is an experimental system that can automatically synthesize functions for Microsoft Excel using the worksheet functions of Excel.
The Excel add-in allows you to synthesize functions by Flash-Fill-like operations.
The advantages of our system over Flash Fill are:
numerical operations are available in addition to string operations;
you can check and reuse the synthesized functions;
it sometimes behaves better when there are only one or two examples.
On the other hand, the class of functions that can be synthesized is quite limited because our system only uses the worksheet functions.
Moreover, it requires internet connection because functions are synthesized behind the cloud.
基本的な使い方Quick start
あらかじめアドインをダウンロードして、インストールしておきます。(一度でOK。)
You need to download and install the add-in file before you can use the system. This has to be done only once.
あと、Excelの「セキュリティセンター」の「マクロの設定」の所が「警告を表示してすべてのマクロを無効にする」になっている必要があります。
(日本語が分かりにくいですが、この選択肢だとマクロを有効にするかいちいち訊ねてくるので、その時々に有効にすることができます。
もちろん、単にすべてのマクロを無条件に有効にしてもいいんですけど、さすがにそれだとセキュリティ上あまりお薦めできません。)
Also, you need to enable Excel macros.
で、たとえば、
Then, you can have the system synthesize functions. For example, when you have a table like this:
のような感じで表が埋まっている場合に、C3の位置にカーソルがある状態でメニューの"アドイン"以下の"MagicExceller"以下の
"関数を合成(ひっそりモード)"や"関数を合成(選択可能モード)"
を選ぶと、 A列、B列をとってC列を返す関数を推定して、C3, C4をその関数で埋めます。
if you put the cursor at C3 and select either
"Synthesize (quiet)" or "Synthesize (selectable)"
below "MagicExceller" below the "Add-in" menu item, the cloud server infers functions taking values from Column A and B as arguments and returning the values from Column C, and fills in C3 and C4 using the function.
ひっそりモードと選択可能モードThe quiet mode and the selectable mode
"ひっそりモード"というのは、余計な表示を行なわず一番最初の候補を採用するモード, "選択可能モード"というのは、選択枝がウェブブラウザ上に現れてそこから選べるモードです。
"(quiet)" means the quiet mode that adopts the first candidate function without displaying other candidates. "(selectable)" means the selectable mode where you can interactively check the synthesized functions shown by Internet Explorer and select one of them.
選択可能モードの場合も、とりあえずはひっそりモードと同様に一番最初の候補で埋められます。
ここで別の候補を選択したい場合、その候補の左にあるExemplifyというボタンを押すと、その候補に変更され、またその候補関数の入出力関係が例示されます。
あと、選択する前の画面で、各Excel関数にリンクがついていて、その関数のマニュアルに飛べるようになっています。
このため、単に関数名がうろ覚えの場合にMagicExcellerを使ってもそこそこ役に立ちます。
Even when using the selectable mode, the selected cell and cells below it in the table are filled with the first candidate function in the same way as in the quiet mode.
Now, you can select another candidate by clicking the "Exemplify" button next to the candidate function.
Then, the functions of those cells are replaced with the newly selected candidate function, and some input-output examples of the candidate function are shown in Internet Explorer.
Also, the presented worksheet functions used by the candidate functions have links to their documentation, which is supposed to be useful even when using this system when you know that you can do what you want to do by using only one worksheet function but you cannot recall its name.
再帰構造の推定Guessing the recursive structure of sequences
縦に数列(または文字列列)が並んでいるときにその下のcellを選択して
"Excel関数で列方向の再帰構造を推定"
ってのを選ぶと、
再帰的な構造を推定してくれたりします。
The add-in can also guess the recursive structure of sequences put in a column, by selecting the cell at the bottom of a sequence and choosing one of the "Synthesize using Excel functions only (*, vertical)" menu items.
The menu items below "Transposed" swaps the roles of rows and columns.
I cannot guess how many people will find them convenient, but they were easy to implement, and I think they do not hurt (though they almost doubled the code size.... Is there anyone who knows a better way to implement them in VBA?)
その他の例Other examples
... とここまで書いて、Excel関数を全然使ってないことに気付きました。あともちろん文字列も使えるので、その辺の例も。
Well, now I noticed that none of the solutions of the above examples use any worksheet functions!
Also, I would like to show our system can (of course!) use strings in addition to numbers.
(Screen shots of Microsoft Excel are used with permission from Microsoft. See the guidelines for more details.)
このzipファイルをダウンロードして展開して、Excelを実行中なら一旦終了して、展開したディレクトリでinstall.batを実行してください。インストールはすぐ終了します。
Download and unpack this zip file, move to the directory where the unpacked files reside, and execute install.bat while Excel is not executed. Then, the installation will finish at once.
install.batのやることは、単にアドインファイルを "%APPDATA%\Microsoft\Excel\XLSTART\" というディレクトリに保存するだけです。というわけで、同じことを手でやってもよいです。なお、上記アドインファイルを直接Excelから開かないこと!ここで、%APPDATA%というのは、通常は自分のアカウント名(というか正確には、最初に自分のアカウントを作った時のアカウント名)をfooとすると、C:\Users\foo\AppData\Roaming\となります。日本語環境では、C:\ユーザー\foo\AppData\Roaming\と表示されるかもしれません。APPDATAの正確な値はコマンドプロンプト上でsetコマンドを実行すると分かるはずです。
install.bat just saves the add-in file into the "%APPDATA%\Microsoft\Excel\XLSTART\" directory, where %APPDATA% of user account foo is usually C:\Users\foo\AppData\Roaming\.
So you can alternatively do it by hand.
Please do not open the add-in file directly from Excel, or it will be installed to your temporary directory and you may experience difficulty in uninstalling it.
You will find the exact value of APPDATA by executing the set command from the command prompt.
ソースを見ての通り、VBAはよく分からんです。
Haskellとは言わないまでも、せめてGoogle SheetsみたいにJavaScriptにして欲しい所です。
ソース直したよ!という方はお知らせください。
(そのうちMagicVBAerを作るかもしれません。:)
You may notice from the source code that I am no VBA expert.
Please let me know if you ever fixed any bug or added any functionality.
(I may create MagicVBAer in the near future:)
Web版The Web Version
関数fの仕様を述語(Trueとなるはずの式)の形で書くべし.その仕様を一般化した関数が得られるよ!
Specify a function f by writing a predicate as a boolean-valued expression. You will get functions generalizing the specification.
例Example
使い方がよくわからん! という方も多いでしょうが、時間ができた時にちょっとずつ書いて行こうと思います。
とりあえず、 MagicHaskellerのソースをちょちょっといじって作ったので、MagicHaskellerのページを見て察してください。
Maybe its usage is unclear. If you are very much interested, you may be able to guess its functionality by taking a look at the home page of MagicHaskeller, because MagicExceller is based on it.
You can do without the Web version if you like. The main purpose of the Web version is interfacing between the add-in and the synthesizer backend. (Actually, even in the quiet mode, an invisible IE window opens the Web version.)
制限事項Limitations
プログラムの大きさに制限があることはMagicHaskellerと同じです。
Excelの場合、高階関数が使えないことなどから、同じ関数適用数でもHaskellに比べて少ないメモリで済みそうですし、同じメモリ使用量ならHaskellよりも大きいプログラムが合成出来そうなものです。が、現在バックアップ用のサーバでおそるおそる試運転している状態なので、Haskellと同じ大きさまでにしています。
There is a limitation in the size of programs that can be synthesized, in the same way as MagicHaskeller.
The currently-running server does not synthesize expressions with more than (about) 6 function applications (in the internal representation).
This limitation may be relaxed to 7 applications in the future.
Excel関数に限られているので、Flash Fillと違ってたとえば正規表現はまったく使えません。
この点については、Excelに限っていえば、Excel関数に限定しない関数合成の選択肢を用意するしかないかと思います。
Excelではありませんが、同じ表計算ソフトのGoogle Sheetsの場合カスタム関数をJavaScriptで書けるので、そっちでやるなら正規表現も書けるかな、と思って計画しています。
(VBAと違ってJavaScriptの場合、高階関数が扱えるため、MagicHaskellerの出力をJavaScriptに翻訳するのは難しくなさそう、という算段。)
Unlike Flash Fill, the current system cannot use regular expressions in the synthesized functions because it is limited to synthesis using the worksheet functions of Excel.
A solution to this limitation is to provide an option of synthesis not limited to the worksheet functions.
I am going to implement inductive programming in JavaScript, and it will enable synthesis of the custom functions of Google Sheets.
(Because JavaScript is a higher-order language, I do not think porting MagicHaskeller to JavaScript is very difficult.)
今後の計画/展望 Future Plans and Perspectives
Excelアドインをもうちょっといじります。Flash Fillみたいに、Excel関数に限定されない関数を合成する選択枝もメニューから選べるといいかな、と思ったり。
あと、引数が多い場合に同じ型のものをリストと解釈してまとめたりとか、いろいろできそう。
Add some more functions to the Excel add-in. Maybe there can be an option of synthesis not limited to the worksheet functions like Flash Fill.
ワークシート関数しか使えないのはつまらないので、MagicJavaScripter (仮称) を作って、Google Sheetsのカスタム関数を自動合成できるようにします。
Implement MagicJavaScripter, and enable synthesis of custom functions of Google Sheets.
ウェブサーバに残っているログから、どのような部分式が頻出して有用かを判断し、有用な式を一つの関数として扱うことで、更に大きな関数が作れるようにしていきます。
Enable synthesis of bigger functions by regarding useful idioms as single functions, based on the frequency information extracted from the Web server log.
(and do this automatically.)
得られた知見を、適応的プラニングに応用します。
Apply the experience obtained from doing the above to adaptive planning.
人間と同等の適応的decision makingができるコンピュータが作れるようになり、めでたしめでたし。
I think that this research direction will eventually lead to a reinforcement learning algorithm with intelligent problem-solving ability (seriously)!