VSTO エクセルでクリックしたセルの値を取得したい

本文上広告1



したいこと

VSTO エクセルでクリックしたセルの値を取得したい
VSTO エクセルで選択したセルの値を取得するには

結論1 イベントハンドラが必要な場合

現在のシートにイベントハンドラを以下のように追加します。

Microsoft.Office.Interop.Excel.Worksheet activeSheet;
activeSheet.SelectionChange
 += new Microsoft.Office.Interop.Excel.DocEvents_SelectionChangeEventHandler(SelectionChanged);

また呼ばれる側の関数は以下のような引数を持っていること。
Rangeの中に、Row(行の位置情報)と, Column(列の位置情報)があります。

private void SelectionChanged(Microsoft.Office.Interop.Excel.Range _target)
{
   int col = _target.Column;
   int row = _target.Row;
   System.Windows.Forms.MessageBox.Show("SelectionChanged " + "col:" + col.ToString() + "," + "row:" + row.ToString());
}

結論2 イベントハンドラが不要な場合 Cells

Cells[,]で配列の形で必要な時に取得可能。

 // 現在のワークシート取得
 Microsoft.Office.Interop.Excel.Worksheet activeSheet = Globals.ThisAddIn.Application.ActiveSheet;

 // 現在のセル
 Microsoft.Office.Interop.Excel.Range actCetll = Globals.ThisAddIn.Application.ActiveCell;

 // 現在のセルを起点(左上)として、AxBのセルの範囲を指定する
 int col = actCetll.Column;
 int row = actCetll.Row;

// ターゲットセルのデータを取得します ☆☆☆ここが重要
Microsoft.Office.Interop.Excel.Range target 
   = activeSheet.Cells[row + 1, col + 2];

float left = (float)target.Left;

結論3 イベントハンドラが不要な場合 Range

Rangeで指定する場合、以下のように数値を文字列に変換して指定する必要あり。一度関数を作成すれば、問題ないが、それまでは不便だなぁと思っていました。

したいこと Excelの列で用いられている26進数風の数列(アルファベットのみ)を計算したい。 26進数風の数列(アルファベットのみ)に...
// ターゲットセル選択 - 数値を文字列に変換して指定
string pasteTargetCell = ExcelUtilityClass.GetColumnString(colStart) + (i + rowStart).ToString("0");

// ターゲットセルのデータを取得します ☆☆☆ここが重要
Microsoft.Office.Interop.Excel.Range range = activeSheet.Range[pasteTargetCell];

range.Cells.ColumnWidth = ....;
range.Cells.RowHeight = ....;

まとめ

実際にエクセルのVSTOアドインに組み込んだ部分は、以下のようになります。参照ください。(イベントハンドラが必要な方法)

Excelアドイン開発について VSTOでのExcelアドイン開発をしたくなったので、開発した記録を書きます。 内容的には、...

その他・自分用メモ

上記を調査しているときに、検索で引っかかった VSTO オフィシャルさんに書かれてる NamedRage コントロールの使い方が分からない。。

ワレコさんの記事も参考になった。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする