大阪で定期的に開催されているC# 読書会での『C# ショートコードプログラミング 第2版』に関する感想などをまとめました。
C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)
- 作者: 川俣晶
- 出版社/メーカー: 日経BP社
- 発売日: 2014/01/17
- メディア: 単行本
- この商品を含むブログ (1件) を見る
大阪で定期的に開催されているC# 読書会での『C# ショートコードプログラミング 第2版』に関する感想などをまとめました。
C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)
大阪で定期的に開催されているC# 読書会での『C# ショートコードプログラミング 第2版』に関する感想などをまとめました。
C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)
『全てのVBAコードを生まれる前に消し去りたい。
すべての宇宙、過去と未来の全てのVBAを、この手で』
このページはExcel VBAを実務で利用されている方で、VBAに心の底から辟易しており、現代的なプログラミング言語(C#6.0)を使って、Excelファイルから分離されたコードで、お手軽にExcel操作を行いたいという方を対象としています。
このページでは、Excelの操作には、VBAに代えてC# Scriptを使います。C# Scriptを実行するにあたっては、C# スクリプト実行エンジンとしてRoslyn for Scripting C#を組み込んだExcel VSTOアドイン "ExcelCSX" を用いています。
このページを通じて、忌まわしきExcel VBAと決別し、より便利で快適なC#スクリプトの魅力を体験して頂ければ幸いです。
本記事は、Excel C# Script入門講座の1記事です。
C# ScriptでExcelを操作するにあたっては、コード上で
の2つを指定します。
前者については、Excelのワークブック(Workbook)やワークシート(Worksheet)、セル(Cell)などが操作対象となります。C# Script(コード)上で、これらの操作対象物を特定するものをオブジェクトと呼びます。*1
Excelにおいては、Excelのプロセス自身を表す Excel.Applicationオブジェクトを最上位として、当該プロセスで開いたWorkbookや、開かれたWorkbookに含まれるWorksheetが階層構造を構成しつつ保持されています。
Excel.Application └ Excel.Application.Workbooks("****") └ Excel.Application.Workbooks("****").Worksheet └ Excel.Application.Workbooks("****").Worksheet("*****").Cells(1,1)
なお、ExcelCSXを用いる場合、現在実行中のExcelを示すExcel.Applicationオブジェクトは、変数名Excelでアクセスすることができます。
これらの各オブジェクトには、各種操作を行うためのプロパティやメソッドが備えられています。
プロパティは、値を代入することで操作対象のオブジェクトの見た目や振る舞いを変更することができます。なお、プロパティの中には、値を代入することはできず、読み取り専用のプロパティも存在します。
例えば、セルの値を変更したい場合、以下のように、特定のWorksheet上のセルを示すRangeオブジェクトのValueプロパティに値を設定します。
Excel.ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = "C#";
メソッドは、操作対象のオブジェクトに対して何らかの動作をさせることができます。
例えば、特定のセルを選択(アクティブ)にする場合、以下のように、RangeオブジェクトのSelectメソッドを実行します。
Excel.ActiveWorkbook.Worksheets("Sheet1").Range("A1").Select();
操作したい内容に相当する プロパティやメソッドについては種類が多いため、適宜MSDNや巷のWebページで調べる必要があります。また、Excel.Applicationオブジェクトの扱い方はコーディング記法に差こそあれ、VBAから利用する場合でも同様のため、多少の読み替えでVBAのページを参考にすることも可能です。
本連載では以降のページで、
について、基本的なものを網羅的に説明します。
*1:より厳密にはExcel.Applicationに関連するクラスのインスタンスや、インターフェースを実装したインスタンスをオブジェクトと呼びます。
本記事は、Excel C# Script入門講座の1記事です。
実際にC# Scriptを入力して、実行するまでを簡単に説明します。
まず、Select Folderをクリックして、C# Scriptが保存されている/これから保存するフォルダを指定してください。
選択したフォルダ内に既にC# Scriptファイル(*.csx)が存在する場合には、ドロップダウンボックスにファイル名が表示されます。
ここでは、新規にC# Scriptを入力してみます。
NewScriptボタンをクリックします。
エディタ(この場合、VisualStudioCode)が自動的に立ち上がります。
とりあえず、以下のコードを入力してください。
Excel.ActiveWorkbook.ActiveSheet.Range("A1").Value = "Hello C# Script";
"hello.csx"という名前で保存します。
この記事では取り上げませんが、既に存在する*.csxを編集したい場合は、ドロップダウンボックスで選択した後、Editボタンをクリックするとファイルを選択した状態でエディタが立ち上がります。*1
Reloadをクリックした後*2、
Script File:のドロップダウンボックスで"hello.csx"を選択します。
Runボタンをクリックすると、スクリプトが実行されます。
Excelを立ち上げてから初回の実行のみ若干実行までに時間がかかります。スクリプト実行中は、Runボタンはグレーアウトされ、スクリプトの実行が終了すると、水色に戻ります。
本記事は、Excel C# Script入門講座の1記事です。
githubで公開されているExcelCSX のレポジトリのreleasesページを開きます。
ExcelCSXのパッケージ(zipファイル)をダウンロードします。
ダウンロードしたファイルを展開します。
フォルダの中にある"ExcelCSX.vsto"を実行します。
警告画面が表示されますが、そのままインストールしてください。
正常にインストールされると上記画面が表示されます。
EXcelCSX導入後に、Excelを起動するとアドインタブに以下の機能が追加されています。
(インストールしたにも関わらず表示されない場合は、「リボンのユーザー設定」から「アドイン」タブのチェックをON/OFFすると表示される場合があります。)
「Options」ボタンをクリックし、設定画面を表示します。
"Editor Path" に、C# Scriptの編集に使いたいエディタを指定してください。
(デフォルトではVisual Studio Codeのパスを指定しています。)
オススメのエディタはVisual Studio Codeです。
C# エクステンションを入れると、C# Scriptファイル(*.csx)を開いた際に、ハイライトが有効になるほか、一部の補完機能・入力支援機能が使えるようになります。素のテキストエディタに比べてぐっと書きやすくなります。
"Default Folder Path"は、起動時にデフォルトで読み込まれるフォルダを指定します。C# Scriptを保存するフォルダを指定すると良いです。
本記事は、Excel C# Script入門講座の1記事です。
Excelのオートフィルタ機能を利用して、データを抽出するには、データの抽出元を示すRangeオブジェクト(*)を用意し、当該RangeオブジェクトのAutoFilterメソッドを使用します。引数により抽出条件を設定できます。
(*) Rangeオブジェクトは、データの抽出範囲全体を示すものでなくても、Excelが自動的にフィルタの対象範囲を判定します。
(Rangeオブジェクト).AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown )
何かの値が戻ってくるが、使うことはないと思われる。(未確認)
引数名 | 必須 / オプション | 内容 |
---|---|---|
Field | 省略可能 | フィルターの対象となるフィールド番号を指定します。 |
Criteria1 | 省略可能 | 抽出条件となる文字列を指定します。 |
Operator | 省略可能 | フィルターの種類を指定します。 |
Criteria2 | 省略可能 | 2番目の抽出条件となる文字列を指定します。 |
VisibleDropDown | 省略可能 | オートフィルタのドロップダウン矢印(▼)を表示するか否かを指定します。 |
フィールド番号は、リストの左側から何番目かを指定します。
つまり、最も左側にあるフィールドはフィールド番号 1 になります。
通常、抽出条件とする文字列(例えば「りんご」)を指定します。
"=" と指定すると、空白セルが抽出され、"<>" と指定すると空白以外のフィールドが抽出されます。
"A"と指定すると、Aに後方一致する場合、"A"と指定すると、Aに前方一致する場合、"A"と指定すると、Aに部分一致する場合が抽出されます。
また、数値の場合は、不等号(">"や"<", "<=", ">=")を先頭に付けて範囲指定することができます。
この引数を省略すると、抽出条件は All になります。
引数 Operator に xlTop10Items が指定されている場合は、引数 Criteria1 に項目数を指定します (たとえば "10")。
なお、Criteria2 を指定できるか否かは、引数Operatorに何を指定するかで決まります。
XlAutoFilterOperator 列挙型を指定します。
名前 | 値 | 説明 |
---|---|---|
xlAnd | 1 | Criteria1 とCriteria2 の論理演算子 AND |
xlBottom10Items | 4 | 表示される最低値項目 (Criteria1 で指定される項目数) |
xlBottom10Percent | 6 | 表示される最低値項目 (Criteria1 で指定される割合) |
xlFilterCellColor | 8 | セルの色 |
xlFilterDynamic | 11 | 日付の範囲を指定したい場合。Criteria1には XlDynamicFilterCriteria列挙型を指定する。 |
xlFilterFontColor | 9 | フォントの色 |
xlFilterIcon | 10 | フィルター アイコン |
xlFilterValues | 7 | Criteria1 を配列で指定する場合に指定する。なお、日付を配列で指定したい場合は、Criteria2を指定する。 |
xlOr | 2 | Criteria1 またはCriteria2 の論理演算子 OR |
xlTop10Items | 3 | 表示される最高値項目 (Criteria1 で指定される項目数) |
xlTop10Percent | 5 | 表示される最高値項目 (Criteria1 で指定される割合) |
trueまたはfalseを指定します。
trueを指定すると、オートフィルタ処理を実行した時にドロップダウン矢印が表示されます。
デフォルト値はtrueです。
フィルタ処理は行わず、オートフィルタのドロップダウン矢印を表示します。
//Sheet1のA1セルを含む適当な範囲にオートフィルタを設定(ドロップダウン矢印を表示)する。 Excel.Worksheets("Sheet1").Cells(1, 1).AutoFilter();
//フィールド番号5(E列)の値が50以下のデータを抽出 Excel.Worksheets("Sheet1").Cells(1, 1).AutoFilter(Field:5, Criteria1:"<20");
//フィールド番号5(E列)の中から40以上60未満の条件に一致するデータを抽出 var range = Excel.Worksheets("Sheet1").Cells(1, 1); range.AutoFilter(Field:5, Criteria1:"<60", Operator:1, Criteria2:">=40");
以下の例では、抽出条件を3つ以上指定しています。この場合、引数Operatorに XlFilterValue(7)を指定し、Criteria1に配列を指定します。なお、XlFilterValueはExcel2007以降でのみ利用可能です。
//フィールド番号8(H列)の中から、愛媛県、岡山県、茨城県のいずれかに一致するデータを抽出 var range = Excel.Worksheets("Sheet1").Cells(1, 1); range.AutoFilter(Field:8, Criteria1:new []{"愛媛県","岡山県","茨城県"}, Operator:7);