English 日本語(Japanese)

帰納関数プログラミングシステム MagicExceller MagicExceller: An Inductive Functional Programming System for Excel

Susumu Katayama 片山 晋が開発している,Microsoft Excelのワークシート関数(以下,Excel関数)を使って関数を自動的に作ってくれるシステムMagicExcellerのページです. まだ試作段階ですが、このページを見ている君たちだけにこっそり公開しちゃいます!

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.

Excel アドイン Excel add-in

Flash Fill的な操作で関数が作れます。Flash Fillに対する利点は、 といったところでしょうか。(ただし、所詮Excel関数なのでできることは限られています。また、クラウド上で関数を合成するため、インターネット接続が必要です)
The Excel add-in allows you to synthesize functions by Flash-Fill-like operations. The advantages of our system over Flash Fill are: 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:

A B C D
1 3 2 7
2 2 3 1
3 2 3
4 4 2
5
のような感じで表が埋まっている場合に、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.
A B C D
1 3 2 7
2 2 3 1
3 2 3 20
4 4 2 14
5

ひっそりモードと選択可能モード 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.

D E F
1 1
2 1
3 2
4 3
5 5
6
7
  →  
D E F
1 1
2 1
3 2
4 3
5 5
6 8
7

行と列の役割を逆に Transposed synthesis

このメニュー項目は文字通りの意味です。 どのくらいの人が便利と感じるかは分かりませんが、実装するのも簡単だし、サブメニューにしておけば邪魔にもならんだろうということで付けてみました。 その代わり、コードサイズは倍近くになりましたが:)
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.

F G H
1 !
2 !!
3 !!!
4 !!!!
5 !!!!!
6

I J K L
1 foo bar 2 foba
2 alpha beta 3 alpbet

(Screen shots of Microsoft Excel are used with permission from Microsoft. See the guidelines for more details.)

ダウンロード Download

この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.

あと、Vectorに登録してみました。 「片山の管理しているウェブサーバなら当然クラックされていてウィルスが仕込まれているだろう」という失礼な方はそちらからダウンロードするとよいかも。 失礼でない方もそちらからダウンロードしていただけると、ダウンロード回数が増えて良いのかもしれません。

なお、うちの学科の演習室環境ではC:ドライブへの変更が保存されないので、上記の方法だと次回起動時には消えているはずです。それはそれでいいという話もあるでしょうが、もしうちの学科の演習室環境で次回以降も使えるようにちゃんとインストールしたければ、ちょっとめんどくさい手順を踏む必要があります。

ソースを見ての通り、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.
\f -> \f ->

Example

\f -> \f ->

使い方がよくわからん! という方も多いでしょうが、時間ができた時にちょっとずつ書いて行こうと思います。 とりあえず、 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.

ま、基本的には、アドインだけ使っておけば間違いないす。Web版は、アドインの下請けとして動作しています。(ひっそりモードでも、見えないところでIEが起動してWeb版を開いています。)
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

今後の計画/展望 Future Plans and Perspectives