StiLL

**StiLL**（スティル）は、Microsoft Excelにアドインして利用するプログラム開発ツール。

「StiLL」は、Excelの持つ各種の機能を活用して、効率的にプログラムを開発することを目指し、また、VBAによるコーディングをしないで済む環境の提供（脱VBA）を目指して、1996年にリリースされた。
Excelを開発プラットフォームとすることの優位性に加えて、StiLLによるExcelの機能強化・機能追加コマンドを駆使することで、ノーコードプログラムでのシステム開発がリズミカルに行える。

## 低い開発ハードル・短期間・低コスト・属人化解消
小回りの利くプログラムをテンポよく開発することができ、メンテナンスの容易さとプログラム作成スピードの速さが特徴。そのため、プロトタイプ開発に有利であり、プロトタイプで十分な社内利用のシーンでは特に有用性が高い。ノンコーディングであるためプログラミング未経験者でも習得は容易であるが、上級者も文法ミス・スペルミスと無縁、人間工学的に最適化されたパラメータ設定ダイアログや各種機能の助けによって高機能なシステムを短期間で開発することができ、上級者こそがStiLLの真価を引き出せる。

## 概要
StiLLは以下の2種類に大別される。
* 設定ダイアログ上にて、ナビゲートされながらパラメータを設定するだけでプログラムが完成するStiLLボタン
* ワークシート上にて、ヘルプか記憶を頼りにパラメータを設定するセルリンクボタン

セルリンクボタンはパラメータがワークシート上のセルとリンクしているため、セルにおいて数式を組むことで動的パラメータ設定が可能。ループ処理、分岐処理を実現するうえで重宝し、ルートフォルダパスをパラメータ化することで保守負担が軽減されるように、メンテナンス性向上に寄与する。
一方、StiLLボタンはボタン完成までの時間が短く済み、パラメータ設定ミスから回避できる。また、他人のプログラムをトレースする際においても、ナビゲート機能がトレースの助けとなるため解読しやすくなる。
したがって、どちらも大切であり、適材適所に使い分ける。

## StiLLボタンのプログラミングイメージ
* ボタンテンプレートから、ワークシート上にボタンを一つ貼り付ける。
* ボタンにStiLLコマンドを割り当てる
* コマンド設定ダイアログでパラメータを設定する

ボタンテンプレートから貼り付けられたばかりのStiLLボタンは、言わば幹細胞のようなものであり、まだ、何の役割も与えられていない。
その状態でStiLLボタンをクリックするとコマンド一覧のダイアログが登場し、そこから与えたい役割のコマンドを選択する。
コマンドを選ぶと、そのコマンドに最適化された設定ダイアログが登場するので、パラメータを設定する。
多くの場合、パラメータ設定をする際にはナビゲートが入るため、迷うことは少ない。感覚としてはExcelグラフウィザードに近い。

## プログラム三原則を実現するコマンド
* BtPush：（ボタン連続実行）プログラム三原則の順次処理を実現
* BtPushIf：（条件分岐実行）プログラム三原則の分岐処理を実現
* BtLoop：（繰返し実行）プログラム三原則の繰返し処理を実現

## Input系コマンド
* BtMerge：（外部データ取得）外部のExcel、CSVファイルからデータを取得・抽出・集計する。複数ファイル・複数シートのマージが可能。数式を組んで新系列を生成できる。データソースがテーブル形式であることが要件。自ブック上のシートをデータソースとすることもできる（複数可）。
* BtRecordQuery：（内部データ抽出）自ブック上のテーブル形式のデータをソースとして、データを取得・抽出・集計する。BtMergeよりも開発テンポがやや上。
* BtTextRead：（テキストデータ取得）txtファイル等のテキストファイルやテーブル形式でないCSVファイルなどからデータを取得する際に利用。カンマ、タブ、任意区切り文字のデリミター指定が可能。新系列生成は同時にはできないため、新系列生成が必要な場合はBtRecordQueryと組み合わせる。
* BtQuery：（DBデータ取得）データベースのデータを取得。新系列生成は同時にはできないため、新系列生成が必要な場合はBtRecordQueryと組み合わせる。SQL知識があれば複雑な抽出条件を組むことが可能。SQL文が書けない人はBtRecordQueryと組み合わせることで絞り込むことができる。
* BtOpenとBtCellCopy：データソースがテーブル形式ではない場合、ファイルを開いて（BtOpen）セルデータをコピーする（BtCellCopy）という方法での対処が可能。

## Output系コマンド
* BtUpdate：（DB更新）データベースにレコードを追加・更新させる。
* BtDelete：（DB更新）データベースに指定条件に合致するレコードを削除させる。
* BtRecordUpload：（Excelデータ更新）自ブック上のテーブル形式のデータ範囲（簡易DB）に対して、DB操作的にレコードを追加・更新する。
* BtRecordDelete：（Excelデータ削除）自ブック上のテーブル形式のデータ範囲（簡易DB）に対して、DB操作的にレコードを削除する。
* BtTextWrite：（テキストデータ更新）txtファイルやCSVファイルに対し、新規書込みか追加書込みでデータを送り込むことが可能。オプション指定で様々な文字コードに対応。
* OverSave：上書き保存
* BtNamedSave（名前をつけて保存）：Excelブックとして、CSVとして、TXTとして保存することが可能（Excel以外はアクティブシートのみが出力対象）。オプションでいくつかの文字コードに切替可能。
* BtBookNewCopy：指定した複数シートについて、ボタン除去・値貼付モードで新規ブック化することができる。BtNamedSaveと連続実行することが多い。
* BtOpenとBtCellCopy：テーブル形式ではない情報を出力する場合、出力先ファイルを開いて（BtOpen）セルデータをコピーする（BtCellCopy）という方法での対処が可能。
* BtDivide：（データ分割保存）営業所別にデータを分割し、各々別ファイルに保存するなど、配信用ファイル生成が可能。

## その他頻出利用コマンド
* BtTable：（テーブル化・テーブル更新）StiLLとパワークエリ・パワーピボットの融合に有用。
* BtPivotRefresh：（ピボットテーブル更新）ピボットテーブル更新を自動化するのに必要。
* BtBookActive：（指定ブック・シートアクティブ化）他のExcelファイル上のStiLLボタン実行等を行う際に必要。
* BtSetValue：（セルに値をセット）数式を組むことが可能なので、時刻系の計算結果を出力したり、乱数を発生させたり、用途が多い。
* BtSheetVisible：（シート表示ON/OFF）パラメータ指定でNOTを選べ、ONならOFF、OFFならONと切り替えられる。複数シートをまとめて指定可能。
* BtSort：（並べ替え）
* BtPasteSheetName：（アクティブブックのシート名出力）ワイルドカードを使って絞り込み、条件に合致するシート名一覧が作成可能。
* BtPasteFileName：（指定フォルダのファイル名出力）ワイルドカードを使って絞り込み、条件に合致するファイル名一覧が作成可能。
* BtPasteDialogFile：（ダイアログ選択値保存）ユーザーが選択したダイアログ上のファイルに関する情報（パス、ファイル名）を指定セルに保存。
* BtPasteActiveCell：（選択セル情報保存）ユーザーが選択したセルの情報（行・列・値・シート・アドレス）を指定セルに保存。
* BtPffsetName：（指定範囲に名前を定義）BtMerge、BtRecordQuery等、通常範囲名はセットで付けられるが、手作りマスタ等の範囲名定義に利用。
* BtKillFile：ファイル削除
* BtKillFolder：フォルダ削除
* BtFolder：フォルダ作成
* BtFileCopy：ファイルコピー
* BtExe：外部のアプリケーション（exeファイル）を実行。引数の指定が可能。
* BtCellCopy：コピー元のセル範囲データを指定開始位置からの連続範囲に貼り付け。貼付モードを選択可能。
* BtCellClear：セルの内容を削除。削除モード選択可。

## 変遷
### StiLLバージョン
* 1995年：試行版開発
* 1996年：「Ver.1」製品版リリース
* 2005年-2006年：「Ver.8」WEBDAVプロトコルに対応、インターネットサーバー上にあるファイルの読み書きができる機能が追加

### StiLL-Ⅹバージョン
バージョン10となり名前がStiLL-Ⅹに変更された。
* 2009年：「Ver.1」
* 2023年：「Ver.3.81」Unicode対応により、日本語OS以外のPCでもStiLLが実行可能となった。