エクセルのセルの位置を得るのには?

解決


hiroshi  2011-11-07 01:48:52  No: 147394  IP: [192.*.*.*]

VB.netで既存のエクセルファイルを起動し、エクセルのデータをVB.netの上で加工処理するプログラムを作ろうとしています。  
エクセルを起動し、セルの位置を特定して、データを読み込んだり書いたりする事はやっと実現できました。  
  
今困っているのは、VB.netのフォームのボタンをクリックして  
現在選択されているシートの選択されているセルの位置(行番号と列番号)を得て、それを基点としてセルの周辺のデータをプログラム側に取り込みたいのですが、  
選択されているセルの位置をどうやって知る事が出来るのかわかりません。教えていただけないでしょうか?  
  
開くエクセルファイルは一つですが、処理しようとする目的別にいくつかのボタンを容易したいので、  
オブジェクトとしてのエクセルを  Public  で宣言し、フォームをLoadする時にエクセルを起動するようにしました。  
  
Public xlApp As New Application()  
Public wb As Workbook  
  
Private Sub Form1_Load() Handles MyBase.Load  
   Dim oSheet As Excel.Worksheet 
   xlApp.Visible = True
   wb = xlApp.Workbooks.Open(ExcelPath)
   oSheet = wb.Worksheets(1)
  
   '(A,1)セルの内容を得る例
   Dim sCellVal As String
   sCellVal = oSheet.Cells(1, 1).value
  
   '(D,3)セルに書き込む例
   oSheet.Cells(3, 4) = "A"
End Sub  

よろしくお願いします

編集 削除
魔界の仮面弁士  2011-11-07 09:24:43  No: 147395  IP: [192.*.*.*]

> 選択されているセルの位置をどうやって知る事が出来るのかわかりません。
Excel.Apllication の Selection プロパティを使うと、現在の選択状態が
分かります。このプロパティは通常、Range オブジェクトを返しますので、
そこから取得できるでしょう。
(ただし画像やグラフなどが選択されていた場合は、Range の代わりに
 その選択されているオブジェクトに関する情報を返します)

> wb = xlApp.Workbooks.Open(ExcelPath)
> oSheet = wb.Worksheets(1)
このような書き方をすると、Excel が正しく終了せずに
プロセスが残ってしまう原因となりえます。

それぞれの COM オブジェクトを変数に受け取るようにし、使用後には
ReleaseComObject メソッドで解放処理を実施することをおすすめします。

http://jeanne.wankuma.com/tips/vb.net/programming/releasecom.html
http://hanatyan.sakura.ne.jp/dotnet/Excelflm.htm
http://msdn.microsoft.com/ja-jp/library/cc325771.aspx
http://msdn.microsoft.com/ja-jp/library/cc440882.aspx

編集 削除
hiroshi  2011-11-07 16:27:02  No: 147396  IP: [192.*.*.*]

魔界の仮面弁士さんありがとうございました
なんとか解決しました。
「エクセル」「選択したセル」「Selection プロパティ」等のキーワードでインターネットで検索していたら、2006/02/23  に  このサイトで「Excelの選択したセルを取得するには」という私の質問とまったく同じ質問がなされていて、魔界の仮面弁士自身が回答されているのを見付けました。全く基礎がないまま、見よう見まねでVB.Netを使っているので、これを見付けなかったらまだ解決できなかったと思います。COM オブジェクトの解放処理については、紹介して頂いたサイトを参考に利用し、今のところうまく動作しています。
ありがとうございました。

編集 削除
魔界の仮面弁士  2011-11-07 17:11:27  No: 147397  IP: [192.*.*.*]

> 2006/02/23  にこのサイトで「Excelの選択したセルを取得するには」という私の質問とまったく同じ質問がなされていて

隣の掲示板(VB初心者掲示板)ですね。http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200602/06020075.txt

編集 削除