Microsoft Excel操作

Size: px
Start display at page:

Download "Microsoft Excel操作"

Transcription

1 Microsoft Excel 操作 Excel ファイルにアクセス.NET Frameworks には COM 相互運用 と呼ばれる機能が有り COM コンポーネントを手軽に呼び出す事が出来る 一方 Excel を初めとする Office 製品は 其の機能をマクロ (VBA) 等からも活用出来る様に COM コンポーネントと仕て実装されて居る 此の為 COM 相互運用を使えば.NET アプリケーションから容易に Excel や Word のファイルを開き 其れを様々に操作する事が可能だ 本稿では其の基本的な記述方法と仕て Excel ファイルをオープンしてワークシート上のセルの内容を参照する例を紹介する 参照の追加 アプリケーションから Excel にアクセスするには 先ず Excel が公開する COM コンポーネントへの参照をプロジェクトに追加する 此れには [ 参照の追加 ] ウィンドウで [COM] タブを選択し Microsoft Excel 12.0 Object Library ( Excel 2007 の場合 Excel 2003 の場合は Microsoft Excel 11.0 Object Library を選択 ) 此れに依り ソリューションエクスプローラの 参照設定 のツリーには Microsoft.Office.Core と Microsoft.Office.Interop.Excel ( Excel 2003 の場合は Excel ) が追加される 此れで アプリケーションから Excel ファイルにアクセス可能に成る Excel がインストールされて居るにも拘らず [ 参照の追加 ] ウィンドウで Excel のコンポーネントが見付からない場合は Office のセットアップで.NET プログラミングのサポート がチェックされて居るかを確認して観ると良い 若しもチェックされて居ない様ならチェックして置く 猶 以降で示して居るコード例は Excel 2007 の COM コンポーネントを使用した場合の物で有る -1-

2 Excel ファイルのオープン 先ずは Microsoft.Office.Interop.Excel.Application オブジェクトを生成する 此れは Windows のスタートメニューから Excel を起動するのと同じ様な物だ Application オブジェクトを新規作成するには次の様に記述する Dim Ex As Excel.Application ' Excel オブジェクト Ex = New Excel.Application( ) Excel.Application ex; // Excel オブジェクト ex = new Excel.Application( ); 新規作成した変数 oxls を使用して 次は目的のファイルをオープンする Excel でファイルをオープンすると ワークブックを表す Workbook オブジェクトが返され 此れ以降の操作は此のオブジェクトに対して行う 猶 本稿で示して居るコードを使用する場合には ファイルの先頭部分で次の様にして名前空間をインポートして置く必要が有る Imports Microsoft.Office.Interop using Excel = Microsoft.Office.Interop.Excel; Excel ファイルのオープンは Workbooks.Open メソッドを使うのだが 此のメソッドのパラメータが非常に多い 通常の Excel ファイル (.xls) を開く場合は ファイル名丈を指定すれば良いので 省略可能な他のパラメータには Type.Missing を指定して空のパラメータを渡す様にする Workbooks.Open メソッドの詳細に付いては オンラインヘルプ等を参照され度い Dim ExcelName As String = "C: sample.xls" Dim Ex As Excel.Application Dim Wb As Excel.Workbook ' Excel オブジェクト ' Workbook オブジェクト Ex = New Excel.Application( ) Ex.Visible = True ' 確認の為 Excel のウィンドウを表示 ' Excel ファイルのオープン Wb = DirectCast(( Ex.Workbooks.Open( _ ExcelName, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ -2-

3 Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing, _ Type.Missing )), _ Excel.Workbook ) string excelname = "C: sample.xls"; Excel.Application ex; Excel.Workbook wb; // Excel オブジェクト // workbook オブジェクト ex = new Excel.Application( ); ex.visible = true; // 確認の為 Excel のウィンドウを表示する // Excel ファイルのオープン wb = ( Excel.Workbook )( ex.workbooks.open( excelname, // オープンする Excel ファイル名 Type.Missing, // ( 省略可能 )UpdateLinks (0 / 1 / 2 / 3) Type.Missing, // ( 省略可能 )ReadOnly (True / False ) Type.Missing, // ( 省略可能 )Format // 1: タブ / 2: カンマ (,) / 3: スペース / 4: セミコロン (;) // 5: なし / 6: 引数 Delimiter で指定された文字 Type.Missing, // ( 省略可能 )Password Type.Missing, // ( 省略可能 )WriteResPassword Type.Missing, // ( 省略可能 )IgnoreReadOnlyRecommended Type.Missing, // ( 省略可能 )Origin Type.Missing, // ( 省略可能 )Delimiter Type.Missing, // ( 省略可能 )Editable Type.Missing, // ( 省略可能 )Notify Type.Missing, // ( 省略可能 )Converter Type.Missing, // ( 省略可能 )AddToMru Type.Missing, // ( 省略可能 )Local Type.Missing // ( 省略可能 )CorruptLoad )); ワークシートの選択 Workbooks.Open メソッドの実行に依りワークブックで有る Workbook オブジェクトが取得出来たので 続いて 此れに含まれるワークシートを取得する ワークブックには複数のワークシートを格納出来るので 目的のワークシートをワークシート名に依り探し出す必要が有る 本稿の例では 単純にワークブックに含まれるワークシートを順番に観て行き ワークシート名が一致すれば 其れが目的のワークシートで有ると判断して居る 猶 ワークシートのインデックスは 1 から始まって居るので注意が必要で有る -3-

4 ' 指定されたワークシート名のインデックスを返すメソッド Private Function getsheetindex( ByVal SheetName As String, ByVal Wss As Excel.Sheets ) _ As Integer Dim I As Integer = 0 For Each Ws As Microsoft.Office.Interop.Excel.Worksheet In Wss If SheetName = Sh.Name Then Return I + 1 I += 1 Next Return 0 End Function ' 与えられたワークシート名から Worksheet オブジェクトを得る Dim SheetName As String = "Sheet2" Dim Ws As Excel.Worksheet ' Worksheet オブジェクト Ws = DirectCast( Wb.Sheets( _ getsheetindex( SheetName, Wb.Sheets )), Excel.Worksheet ) // 指定されたワークシート名のインデックスを返すメソッド private int getsheetindex( string sheetname, Excel.Sheets wss ) { int i = 0; foreach ( Excel.Worksheet ws in wss ) { if ( sheetname == ws.name ) { return i + 1; } i += 1; } return 0; } // 与えられたワークシート名から Worksheet オブジェクトを得る string sheetname = "Sheet2"; Excel.Worksheet ws; // Worksheet オブジェクト ws = ( Excel.Worksheet ) wb.sheets[ getsheetindex( sheetname, wb.sheets )]; セルの内容を読み込む 此処迄の操作でワークシートを得る事が出来たので 最後に目的のセルの内容を参照する セルの内容は Worksheet オブジェクトの Cells プロパティで取得出来るが Cells プロパティが返す Range オブジェクトから内容を取得する方が解り易い -4-

5 Range オブジェクトはワークシート上の指定された範囲のセルを管理するのだが 1 つのセルを Range オブジェクトに割り当てて 其の Range オブジェクトからセルの中身がアクセス出来る Range オブジェクトには セルの内容を取り出す Text プロパティや計算式を示す Formula プロパティ セルの表示形式を表す NumberFormat プロパティ等が提供されて居る セルの指定は Cells[ row, column ] の様に行うが row column は共に 1 始まりで有る 従って A1 のセルは Cells[ 1, 1 ] と成る Dim CellVal As String Dim Rn As Excel.Range ' Range オブジェクト Rn = DirectCast( Ws.Cells( 1, 1 ), Excel.Range ) CellVal = Rn.Text.ToString( ) ' A1 セルの内容 string cellval; Excel.Range rn; // Range オブジェクト rn = ( Excel.Range ) ws.cells[ 1, 1 ]; cellval = rn.text.tostring( ); // A1 セルの内容 Range オブジェクトに含まれるセルの値を取得するには Value プロパティか Text プロパティを用いる Text プロパティは セルの値が文字列化された物を取得出来るが セルの表示形式で指定されて居る形式に依って得られる内容が異なる 此処ではセルの内容が文字列か数値の判断が付かないと仮定して居るで Text プロパティを使って居るが 状況に依っては Value プロパティの方が妥当な場合も有る セルの内容を参照するのではなく セルに値をセットする場合は Value プロパティを使用する必要が有る 総ての処理が終了すれば Workbook オブジェクトをクローズし Excel を終了して置く Wb.Close( Type.Missing, Type.Missing, Type.Missing ) Ex.Quit( ) wb.close( Type.Missing, Type.Missing, Type.Missing ); ex.quit( ); 本稿は Excel ファイルの内容を読み取る方法而巳を紹介したが Application オブジェクトや Workbook オブジェクト等に含まれる他のメソッドを使って 新規にワークシートを作成してファイルに保存したり セルの内容を修正して保存したりする事も出来る ワークシート上のセルにアクセスする処迄を理解すれば Excel ファイルの処理は意外と簡単に行える筈で有る -5-

6 プログラム例 事前に参照を追加して Excel を操作する事前バインディングのプログラム例を 下記に示す 猶 事前バインディングでは コーディングにインテリセンスを利用したり Excel の定数を使用したり出来る等 開発効率が良いが Excel のバージョンが異なれば 動作しない 異なるバージョンの Excel がインストールされて居る複数のコンピュータで動作させるには 遅延バインディングを用いる Public Class ExcelOperation 6.0 Private Sub btnopen_click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnopen.click ' Excel ファイルのパス Dim P As String = Application.StartupPath If Not P.EndsWith( " " ) Then P &= " " P &= "data.xls" ' Excel のクラスのタイプとインスタンスを取得 Dim Ex As Excel.Application = CreateObject( "Excel.Application" ) ' ワークブックコレクションオブジェクト Dim Wbs As Excel.Workbooks = Ex.Workbooks ' Excel ファイルのオープン Dim Wb As Excel.Workbook = Wbs.Open( P ) ' Excel ファイルの表示 Ex.Visible = True ' 変更の保存を確認しない様に設定 Ex.DisplayAlerts = False ' ワークシートコレクションオブジェクト ( 例外が発生する ) ' Dim Wss As Excel.Worksheets = Wb.Worksheets ' ワークシートオブジェクト ' Dim Ws As Excel.Worksheet = Wss.Item( 1 ) Dim Ws As Excel.Worksheet = Wb.Worksheets.Item( 1 ) ' レンジオブジェクト Dim Rn As Excel.Range ' セル A1 の値の取得 Rn = Ws.Range("A1") Dim A1 As String = Rn.Value.ToString( ) MessageBox.Show( A1, " セル A1 の値 " ) Call DisposeComObject( Rn ) ' 使用の都度に解放した方が無難 -6-

7 ' セル B1 の値の取得 Rn = Ws.Range( "B1" ) Dim B1 As String = Rn.Value.ToString( ) MessageBox.Show( B1, " セル B1 の値 " ) Call DisposeComObject( Rn ) ' 使用の都度に解放した方が無難 ' セル A2 の振り仮名の取得 Rn = Ws.Range( "A2" ) Dim A2 As String = Rn.Phonetics( 1 ).Text.ToString( ) MessageBox.Show( A2, " セル A2 の振り仮名 " ) Ex.Speech.Speak( A2 ) Call DisposeComObject( Rn ) ' 使用の都度に解放した方が無難 ' ハイパーリンクの設定 Rn = Ws.Range( "B2" ) Dim Lns As Excel.Hyperlinks = Ws.Hyperlinks Dim Ln As Excel.Hyperlink = Lns.Add( Rn, B1 ) Call DisposeComObject( Rn ) ' 使用の都度に解放した方が無難 ' ワークブックの保存 If MessageBox.Show( " 保存しますか?", " 確認 ", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question ) = _ System.Windows.Forms.DialogResult.Yes Then Wb.Save( ) MessageBox.Show( " 保存しました ", " 保存 " ) ' 終了 If MessageBox.Show( " エクセルを終了しますか?", " 確認 ", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question ) = _ System.Windows.Forms.DialogResult.Yes Then ' オブジェクトの開放 If Ln IsNot Nothing Then Call DisposeComObject( Ln ) If Lns IsNot Nothing Then Call DisposeComObject( Lns ) If Rn IsNot Nothing Then Call DisposeComObject( Rn ) If Ws IsNot Nothing Then Call DisposeComObject( Ws ) ' If Wss IsNot Nothing Then Call DisposeComObject( Wss ) If Wb IsNot Nothing Then Wb.Close( ) ' ワークブックのクローズ Call DisposeComObject( Wb ) If Wbs IsNot Nothing Then Call DisposeComObject( Wbs ) If Ex IsNot Nothing Then Ex.Quit( ) ' エクセルの終了 Call DisposeComObject( Ex ) -7-

8 ' COM オブジェクトを解放するジェネラルプロシージャ Private Sub DisposeComObject( Of T As Class )( ByRef Obj As T ) If Obj IsNot Nothing Then Try If System.Runtime.InteropServices.Marshal.IsComObject( Obj ) Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject( Obj ) Finally Obj = Nothing End Try End Class using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ExcelOperation { public partial class ExcelOperation : Form { public ExcelOperation( ) { InitializeComponent( ); } private void btnopen_click( object sender, EventArgs e ) { // Excel ファイルのパス string p = Application.StartupPath; if " )) p "; p += "data.xls"; // Excel クラスのインスタンス生成 Excel.Application ex = new Excel.Application( ); // ワークブックコレクションオブジェクト Excel.Workbooks wbs = ex.workbooks; // Excel ファイルのオープン Excel.Workbook wb = wbs.open( p, -8-

9 Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // Excel ファイルの表示 ex.visible = true; // 変更の保存を確認しない様に設定 ex.displayalerts = false; // ワークシートコレクションオブジェクト ( 例外が発生する ) // Excel.Worksheets wss = ( Excel.Worksheets ) wb.sheets; // ワークシートオブジェクト // Excel.Worksheet ws = ( Excel.Worksheet ) wss.get_item( 1 ); Excel.Worksheet ws = ( Excel.Worksheet ) wb.worksheets[ 1 ]; // レンジオブジェクト Excel.Range rn; // セル A1 の値の取得 rn = ( Excel.Range ) ws.cells[ 1, 1 ]; string a1 = rn.text.tostring( ); MessageBox.Show( a1, " セル A1 の値 " ); DisposeComObject( rn ); // 使用の都度に解放した方が無難 // セル B1 の値の取得 rn = ( Excel.Range ) ws.cells[ 1, 2 ]; string b1 = rn.text.tostring( ); MessageBox.Show( b1, " セル B1 の値 " ); DisposeComObject( rn ); // 使用の都度に解放した方が無難 ' セル A2 の振り仮名の取得 rn = ( Excel.Range ) ws.cells[ 2, 1 ]; string a2 = rn.phonetics( 1 ).Text.ToString( ); MessageBox.Show( a2, " セル A2 の振り仮名 " ); Ex.Speech.Speak( a2 ); DisposeComObject( rn ); // 使用の都度に解放した方が無難 // ハイパーリンクの設定 rn = ( Excel.Range ) ws.cells[ 2, 2 ]; Excel.Hyperlinks lns = ws.hyperlinks; Excel.Hyperlink ln = ( Excel.Hyperlink ) lns.add( rn, b1, "", "", "" ); DisposeComObject( rn ); // 使用の都度に解放した方が無難 -9-

10 // ワークブックの保存 if ( MessageBox.Show( " 保存しますか?", " 確認 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question ) == System.Windows.Forms.DialogResult.Yes ) { wb.save( ); MessageBox.Show( " 保存しました ", " 保存 " ); } } // 終了 if ( MessageBox.Show( " エクセルを終了しますか?", " 確認 ", MessageBoxButtons.YesNo, MessageBoxIcon.Question ) == System.Windows.Forms.DialogResult.Yes ) { // オブジェクトの開放 if ( ln!= null ) ln = null; if ( lns!= null ) lns = null; if ( rn!= null ) rn = null; if ( ws!= null ) ws = null; // if ( wss!= null ) wss = null; if ( wb!= null ) { wb.close( null, null, null ); // ワークブックのクローズ wb = null; } if ( wbs!= null ) wbs = null; if ( ex!= null ) { ex.quit( ); // エクセルの終了 ex = null; } } } } // COM オブジェクトを解放するメソッド private void DisposeComObject( Of T As Class )( ByRef obj As T ) { if ( obj!= null ) { try { if ( System.Runtime.InteropServices.Marshal.IsComObject( Obj )) System.Runtime.InteropServices.Marshal.FinalReleaseComObject( Obj ); } Finally { obj = null } } } -10-

11 注意事項 Excel のプロセスが正常に終了しない理由.NET 以降では 6.0 の様に Range オブジェクトを使用すると Excel のプロセスが終了しないと謂う事は認知されて居るが 実際に使用して観るとプロセスが終了しないので 困惑する事も多いと思う 其処で.NET 以降から Excel を操作する上での注意事項を纏めて観た 1. 先ず 起動 終了丈の基本的なプログラムを書いた時点でテストして プロセスが終了しているかを確認する 2. コードは マクロ等を其の儘ペーストせず キーボードから入力する ( 然うする事に依り自動メンバー表示やパラメータヒントが表示される ) 3. 自動メンバー表示等が表示されない場合は コードの使い方が間違って居る場合が有るので ヘルプ等で確認する 4. 今迄と違った使い方や使った事の無いプロパティ等を使用した場合は 其の時点でプロセスが終了するか確認する 5. コードの区切りの時点で 其処迄の動作でプロセスが正常に終了する事を確認し乍ら進める 以上の 5 項目を守れば 少なく共 他人に間違い探しを依頼する事は無い筈で有る 作成してからプロセスが終了して居ない事に気が付いた場合は 確認出来て居る部分を除いてコメント化し 確認し乍ら順次コメントを外して原因箇所を見付ける様にすれば良い Excel のマクロからコードを使用した場合 6.0 と同様に から Excel のプロパティやメソッド オブジェクト等を操作する場合は 必ずオブジェクトを指定する 例 : 誤り ActiveSheet 正解 xlbook.activesheet VBA のヘルプで ActiveSheet プロパティの [ 対象 ] の項を見ると Application オブジェクト Window オブジェクト Workbook オブジェクトの 3 種のオブジェクトで使用可能だが 此の場合は Sheet1 や Sheet2 と謂うワークシートを対象に仕て居るので Workbook オブジェクトを指定する様にする 例えば xlapp xlbook xlsheet が xlapp xlsheet では 何の xlbook の ActiveSheet かが不明で有る 但し 使用するシート名が判って居る場合は xlbook.worksheets("sheet1") や xlsheet の様にシート名を直接指定する様にする 上記の他 VBA のコードではオブジェクト名が省略されて居る場合が多々有るが からは VBA のコードと のコードを区別する上で 省略して書くとエラーが発生したり エラーが発生しなくても Excel 内部で問題に成り プロセスが終了しない原因に成る 従って コードをコピー & ペーストする様な事をせず キーボードから自動メンバ表示等のインテリセンス機能を利用して確認し乍 コードを記入する様にする 猶 VBA のヘルプは Excel 上の Editor からでも観る事が出来る -11-

12 各オブジェクトを変数と仕て宣言する時の 6.0 との違い Dim Ex As Excel.Application Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet 6.0 Set Ex = CreateObject( "Excel.Application" ) Set Wb = xlapp.workbooks.add Set Ws = xlbook.worksheets( 1 ).NET 以降 Dim Ex As New Excel.Application Dim Wbs As Excel.Workbooks = Ex.Workbooks Dim Wb As Excel.Workbook = Wbs.Add Dim Wss As Excel.Sheets = Wb.Worksheets Dim Ws As Excel.Worksheet = Wss.Item( 1 ) 上記で WorkBook や WorkSheet を使用する場合は 必ず 一旦 Workbooks 等のコレクションから受ける方法を推奨する オートメーションオブジェクトに対して Marshal.ReleaseComObject メソッドを実行し オブジェクトインスタンスの解放を行う必要が有る為 此の様な方法でないと解放出来ない 此の事は 次の Range オブジェクト等でも同じ理由で有る 下記は Microsoft サポート技術情報よりの抜粋で有る Visual Studio.NET でマネージコードから COM オブジェクトを呼び出すと 自動的に RCW( ランタイム呼出可能ラッパー ) が作成される RCW は.NET アプリケーションと COM オブジェクト間の呼出をマーシャリング ( 整列 ) する RCW は COM オブジェクトへの参照カウントを保持する 従って RCW での総ての参照が解放されて居ない場合 COM オブジェクトは終了しない COM オブジェクトの解放忘れ 1. 基本的に 下記の様に ドット (. ) が 2 個連続で使用されゝば解放出来ない 誤 正 xlrange = xlcells( 1,1 ) xlrange.interior.color = RGB( 0, 255, 0 ) ' 使用変数の解放処理 MRComObject( xlcells ) MRComObject( xlrange ) xlrange = xlcells( 1, 1 ) Dim xlinterior As Excel.Interior xlinterior = xlrange.interior xlinterior.color = RGB( 0, 255, 0 ) MRComObject( xlinterior ) MRComObject( xlcells ) MRComObject( xlrange ) 此の使用法が問題と成る! -12-

13 必ず 上記の様に分解して 変数に受けて 解放処理を行う 下記の様な場合も当然解放されない xlrange = xlcells( 1, 1 ) xlrange.font.bold = True 2. 下記の様なオブジェクトを返すプロパティ等は Marshal.ReleaseComObject メソッドを実行し オブジェクトインスタンスの解放を行う必要が有る Range オブジェクト Selection プロパティ Location メソッド等 Cells プロパティ Rows プロパティ Columns プロパティ Borders プロパティ等の様に最後に s が付くプロパティ ( コレクション ) 等 猶 上記に記載した以外にも色々有るので VBA のヘルプで戻り値や対象に付いて調べて プロセスが終了するか何うかテストしてから使用する様にする 3. ループ処理等で複数回使用した場合 下記の様に 其の都度 解放処理をする For I = 1 To 255 xlrange = xlsheet.range( R1ToA1( 1, I, 1, I )) xlrange.value = I MRComObject( xlrange ) Next 4. 遅延バインディングで Object 型の変数を使用した場合 遅延バインディングで 下記の様に Object 型の変数を使用すると 参照カウントが通常より多くカウントされ 通常の解放処理では解放出来ない ( アーリーバインディングでは解放される ) Dim xlrange As Object Dim xlhyperlinks As Object Dim xlhyperlink As Object xlrange = xlsheet.range( "A1" ) xlrange.value = " xlhyperlinks = xlsheet.hyperlinks xlhyperlink = xlhyperlinks.add( xlrange, xlrange.value ) System.Runtime.InteropServices.Marshal.ReleaseComObject( xlrange ) System.Runtime.InteropServices.Marshal.ReleaseComObject( xlhyperlink ) System.Runtime.InteropServices.Marshal.ReleaseComObject( xlhyperlinks ) 上記の場合 xlrange のカウントが 2 に成る様で有る 解放出来ない場合は 下記の様に仕て調べ 0 以上の数値が返って来れば カウントがアップして居るので 其の分 解放処理が必要で有る Debug.WriteLine(System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange)) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) -13-

14 上記の様に 2 度続けて解放処理をしても 一応解放出来るが 下記の様にする事を推奨する Public Shared Sub MRComObject ( Of T As Class )( ByRef objcom As T, _ Optional ByVal force As Boolean = False ) If objcom Is Nothing Then Return Try If System.Runtime.InteropServices.Marshal.IsComObject( objcom ) Then If force Then Dim count As Integer = _ System.Runtime.InteropServices.Marshal.FinalReleaseComObject( objcom ) ' 此の部分は 動作確認用コードで有る ( 実使用では必要無い ) If Not count = 0 Then MessageBox.Show( "COM オブジェクトが解放されて居ません!" ) Else Dim count As Integer = _ System.Runtime.InteropServices.Marshal.ReleaseComObject( objcom ) ' 此の部分は 動作確認用コードで有る ( 実使用では必要無い ) If Not count = 0 Then MessageBox.Show( "COM オブジェクトが解放されて居ません!" ) Finally objcom = Nothing End Try と.NET 2003 に依る違い 2005/Excel 2002 では 下記でもプロセスは解放されるが.NET 2003/Excel 2002 では 下記ではプロセスが解放されない xlapp.activewindow.displayhorizontalscrollbar = False xlapp.activewindow.displayverticalscrollbar = False 孰れも 下記の様に 変数に受けて解放処理を仕た方が良い Dim xlwindow As Excel.Window xlwindow = xlapp.activewindow xlwindow.displayhorizontalscrollbar = False xlwindow.displayverticalscrollbar = False MRComObject( xlwindow ) 上記の様に バージョンに依る違いも有る 一度目のテストでは 解放されて居ても 処理を繰り返すと解放されない場合も有るので 充分テスト (2 回以上連続使用 ) を行う必要が有る -14-

15 補足.NET 以降から Excel を扱う場合は 6.0 とは異なり 総ての COM オブジェクトを System.Runtime.InteropServices.Marshal.ReleaseComObject メソッドを使用して解放する必要が有るが 此の事は MS のサンプル等でも明記されて居らず 其処に記述されて居る ガベージコレクションを実行する為 GC.Collect メソッドを使用してガベージコレクタを強制的に実行し RCW が保持して居る参照を解放する と謂う説明に勘違いして GC.Collect メソッドを実行して居るコードを観掛ける事が有る 併し プロセスが残存しない様にするには COM オブジェクトを夫々れ変数に受け 使用後 ReleaseComObject メソッドを実行する必要が有る 猶 6.0 の時の様に ExcelApplication = Nothing は 必ずしも必要が無く 実行しなくてもプロセスが終了しないと謂う事は無い 寧ろ ReleaseComObject の方が重要で 此方は必ず実行しなけば プロセスが正しく終了しない 亦 上記 MS のサンプルでは Private Sub NAR( ByVal o As Object ) の様に値渡しに成って居るが 参照渡しに変更して居る 此れは ExcelApplication = Nothing が特に必要が無い為 孰れの方法でも実用上問題が発生して居ないが 使用目的に鑑み 参照渡しに仕た方が良いと思われる 基本的に Excel の操作方法は.NET 以降も 6.0 も同じで有る 只 指定方法が若干上記の様に異なる事を注意すれば 6.0 から Excel を操作するプログラムを.NET 以降用に一部変更すれば使用可能で有る FinalReleaseComObject は.NET Framework version 2.0 で新しく追加された物で 一度の呼出で 参照カウントを 0 に設定する 下記の様に 0 を返す迄 ループ内で ReleaseComObject を呼び出す事と同じで有る Dim I As Integer Do I = System.Runtime.InteropServices.Marshal.ReleaseComObject( Obj ) Loop While I > 0-15-

16 各種 Excel 操作 各種 Excel 操作を 下記に示す 此等は 前述のプログラム例 (ExcelOperation) の実際の処理 ( セル A1 の値の取得 ~ ハイパーリンクの設定 ) の部分に記述する セルにデータの設定 ( 一括 ) ' セル A5:A7 へデータの入力 ( 一括 ) Rn = Ws.Range( "A5:A7" ) Dim D( 2, 0 ) As Object D( 0, 0 ) = "10" D( 1, 0 ) = "20" D( 2, 0 ) = "=Sum( A5:A6 )" Rn.Value = D Call DisposeComObject( Rn ) セルにデータの設定 ( 個別 ) ' セル C5:C7 へデータの入力 ( 個別 ) Dim Cl As Excel.Range = Ws.Cells Rn = DirectCast( Cl( 5, 3 ), Excel.Range ) Rn.Value = "12" Call DisposeComObject( Rn ) Rn = DirectCast( Cl( 6, 3 ), Excel.Range ) Rn.Value = "34" Call DisposeComObject( Rn ) Rn = DirectCast( Cl( 7, 3 ), Excel.Range ) Rn.Value = "=C5+C6" Call DisposeComObject( Rn ) Call DisposeComObject( Cl ) Microsoft Excel を起動 ( 既存のファイルを開く ) -16-

17 Excel のデータ入力例色々 1.R1C1 形式で個々のセルへの入力例 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'R1C1 形式で個々のセルへの入力例 xlapp.visible = True Dim i, j As Integer For i = 5 To 12 '5 行目 ~12 行目 For j = 3 To 8 'C 列 ~ H 列 Call SetdataCell(i, j, i + j) Next j Next i 'C13 に合計を表示 Call SetdataCell(13, 3, "=SUM(C5:C12") Private Sub SetdataCell(ByVal r As Integer, ByVal c As Integer, ByVal d As Object) ' 個々のセルへ値を入力するためのプロシージャ Dim xlcells1 As Excel.Range Dim xlrange1 As Excel.Range xlcells1 = xlsheet.cells xlrange1 = xlcells1(r, c) xlrange1.value = d MRComObject(xlCells1) MRComObject(xlRange1) 2.R1C1 形式で範囲を指定してセルへの入力例 Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click -17-

18 'R1C1 形式で範囲を指定してセルへの入力例 xlapp.visible = True Dim xlrange As Excel.Range Dim strdat(2, 0) As Object strdat(0, 0) = "10" ' データの作成 strdat(1, 0) = "20" ' セル (B15,B16) strdat(2, 0) = "=SUM(" & R1ToA1(15, 2, 16, 2) & ")" ' 計算式 ' セル (B15,B17) xlrange = xlsheet.range(r1toa1(15, 2, 17, 2)) ' データの入力セル範囲 xlrange.value = strdat ' セルへデータの入力 MRComObject(xlRange) Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer, _ ByVal r2 As Integer, ByVal c2 As Integer) As String 'A1 形式のアドレスを R1C1 形式に変換する関数 Dim i1, i2 As Integer Dim d1, d2 As String i1 = Math.Floor((c1-1) 26) d1 = IIf(c1 > 26, Strings.Chr(64 + i1), "") i1 = c1-26 * i1 d1 &= Strings.Chr(64 + i1) & CStr(r1) i2 = Math.Floor((c2-1) 26) d2 = IIf(c2 > 26, Strings.Chr(64 + i2), "") i2 = c2-26 * i2 d2 &= Strings.Chr(64 + i2) & CStr(r2) Return d1 & ":" & d2 End Function 注意上記関数は Excel 2007 で 703 列以上を指定すると正しい値を返さないようです Excel 2007 以前は 列数が 255 列までに制限されているので問題ありません 3.R1ToA1 関数を使って個別のセルに入力する場合 Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click 'R1ToA1 関数を使って個別のセルに入力する場合 Dim i As Integer Dim xlrange As Excel.Range -18-

19 For i = 1 To 255 'A1 ~ IU1 の範囲に連番を入力 xlrange = xlsheet.range(r1toa1(1, i, 1, i)) xlrange.value = i MRComObject(xlRange) Next i xlapp.visible = True Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer, _ ByVal r2 As Integer, ByVal c2 As Integer) As String 'A1 形式のアドレスを R1C1 形式に変換する関数 Dim i1, i2 As Integer Dim d1, d2 As String i1 = Math.Floor((c1-1) 26) d1 = IIf(c1 > 26, Strings.Chr(64 + i1), "") i1 = c1-26 * i1 d1 &= Strings.Chr(64 + i1) & CStr(r1) i2 = Math.Floor((c2-1) 26) d2 = IIf(c2 > 26, Strings.Chr(64 + i2), "") i2 = c2-26 * i2 d2 &= Strings.Chr(64 + i2) & CStr(r2) Return d1 & ":" & d2 End Function 4.Address プロパティを使っての入力例 Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click 'Address プロパティを使って個別入力 Dim i As Integer Dim xlrange As Excel.Range Dim xlcells As Excel.Range Dim xlrange1 As Excel.Range xlcells = xlsheet.cells Dim Col As String For i = 1 To 255 'A2 ~ IU2 の範囲に連番を入力 xlrange1 = xlcells(2, i) Col = xlrange1.address(false, False) -19-

20 xlrange = xlsheet.range(col) xlrange.value = i MRComObject(xlRange1) MRComObject(xlRange) Next i MRComObject(xlCells) xlapp.visible = True 5.Address プロパティを使って範囲入力 Private Sub Button5_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button5.Click 'Address プロパティを使って範囲入力 xlapp.visible = True Dim xlrange As Excel.Range Dim strdat(2, 0) As Object strdat(0, 0) = "10" strdat(1, 0) = "20" strdat(2, 0) = "=SUM(A4:A5)" Dim Col1, Col2 As String Dim xlcells As Excel.Range Dim xlrange1 As Excel.Range xlcells = xlsheet.cells xlrange1 = xlcells(4, 1) 'A4 Col1 = xlrange1.address(false, False) MRComObject(xlRange1) xlrange1 = xlcells(6, 1) 'A6 Col2 = xlrange1.address(false, False) 'A4 ~ A6 の範囲に入力 xlrange = xlsheet.range(col1 & ":" & Col2) xlrange.value = strdat MRComObject(xlCells) MRComObject(xlRange1) MRComObject(xlRange) 6.Rows / Columns プロパティの使用方法 -20-

21 Private Sub Button6_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button6.Click ' xlsheet.rows(6).select() ' これではプロセスが終了しない ' Dim xlrange As Excel.Range Dim xlrows As Excel.Range xlrows = xlsheet.rows xlrange = xlrows(6) xlrange.select() MRComObject(xlRows) MRComObject(xlRange) ' ' xlsheet.columns(6).select() ' これではプロセスが終了しない ' Dim xlrange1 As Excel.Range Dim xlcolumns As Excel.Range xlcolumns = xlsheet.columns xlrange1 = xlcolumns(6) xlrange1.select() MRComObject(xlColumns) MRComObject(xlRange1) ' 'xlsheet.rows(1). ' この時点で候補がでてこない 'xlsheet.rows.select() ' これなら候補も表示されるがプロセスは終了しない ' Dim xlrows2 As Excel.Range xlrows2 = xlsheet.rows xlrows2.select() MRComObject(xlRows2) 7.Excel を Private な変数で宣言しての起動処理 ' Private な変数の宣言

22 Private xlapp As Excel.Application Private xlbooks As Excel.Workbooks Private xlbook As Excel.Workbook Private xlsheets As Excel.Sheets Private xlsheet As Excel.Worksheet ' Excel ファイルの Open 処理 Private Sub Button7_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button7.Click 'Excel の既存ファイルのオープン Call ExcelOpen(IO.Path.GetFullPath(".... Test.xls"), "Sheet1") Private Sub ExcelOpen(ByVal FilePath As String, ByVal SheetName As String) ' 既存のファイルのオープン処理用プロシージャ xlapp = New Excel.Application xlbooks = xlapp.workbooks xlbook = xlbooks.open(filepath) xlsheets = xlbook.worksheets xlsheet = xlsheets(sheetname) xlapp.visible = True 8.Excel ファイルを上書き保存して終了処理 ' Excel ファイルの終了時の処理 Private Sub Button8_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button8.Click 'Excel ファイルを上書き保存 (True 又省略すれば ) して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".... Test.xls"), False) 'False の場合保存しないで終了 Private Sub ExcelClose(ByVal FilePath As String, Optional ByVal CancelSave As Boolean = True) 'Excel ファイルを上書き保存して終了処理用プロシージャ xlapp.displayalerts = False ' 保存時の問合せのダイアログを非表示に設定 If CancelSave Then xlsheet.saveas(filepath) ' ファイルに保存 MRComObject(xlSheet) 'xlsheet の解放 MRComObject(xlSheets) 'xlsheets の解放 xlbook.close() 'xlbook を閉じる -22-

23 MRComObject(xlBook) 'xlbook の解放 MRComObject(xlBooks) 'xlbooks の解放 xlapp.quit() 'Excel を閉じる MRComObject(xlApp) 'xlapp を解放 ' 今まで使っていた方法では Option Strict On の時にエラーとなったので 下記の ' 魔界の仮面弁士さんの投稿を使用させて頂きました 詳しくは 下記リンク参照願います ' デクリメントするだけが目的なら その場で ReleaseComObject だけを実施して下さい ' Public Shared Sub MRComObject(Of T As Class)(ByRef objcom As T, Optional ByVal force As Boolean = False) If objcom Is Nothing Then Return Try If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then If force Then Dim count As Integer = System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom) If count <> 0 Then ' この部分は 動作確認用コードです ( 実使用では必要ありません ) MessageBox.Show("COM オブジェクトが解放されていません ") Else Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) If count <> 0 Then ' この部分は 動作確認用コードです ( 実使用では必要ありません ) MessageBox.Show("COM オブジェクトが解放されていません ") '0 になる事を期待 ( 使い終った ) していたなら force = True で試して見て下さい Finally objcom = Nothing End Try Private Sub Form1_Closed(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Closed 'Excel が終了していない場合は Excel を終了 If Not xlapp Is Nothing Then Call ExcelClose(IO.Path.GetFullPath(".... Test.xls"), False) -23-

24 Excel にデータを送りグラフを表示 '======= Excel の起動処理 終了処理の部分を省略します ==================== ' プロジェクト 参照の追加 COM Microsoft Excel *.* ObjectLibrary を参照して下さい ' 基本的な操作部分は [.NET から Excel の基本的な操作方法 ] と同じです '============== グラフデータを作成及びセルに値を代入 =================== 'Excel のセルに値を代入します Dim i, j As Integer Dim kamokurange, simeirange, datarange As Excel.Range Dim datadat(4, 4) As Integer, simeidat(0, 4), kamokudat(4, 0) As String kamokurange = xlsheet.range("a2:a6") simeirange = xlsheet.range("b1:f1") datarange = xlsheet.range("b2:f6") For i = 0 To 4 For j = 0 To 4 '30~100 の範囲のランダムなデータを作成 datadat(j, i) = CInt(70 * Rnd() + 31) Next j Next i ' 系列名の設定 kamokudat(0, 0) = " 国語 " kamokudat(1, 0) = " 数学 " kamokudat(2, 0) = " 英語 " kamokudat(3, 0) = " 社会 " kamokudat(4, 0) = " 体育 " '' 項目名の設定 simeidat(0, 0) = " 石原 " simeidat(0, 1) = " 小泉 " simeidat(0, 2) = " 田中 " simeidat(0, 3) = " 平沼 " simeidat(0, 4) = " 森山 " ' セルに各データを設定 datarange.value = datadat kamokurange.value = kamokudat simeirange.value = simeidat MRComObject(dataRange) 'datarange の解放 MRComObject(kamokuRange) 'kamokurange の解放 MRComObject(simeiRange) 'datarange の解放 -24-

25 '=============== グラフの表示設定 ======================= Dim MyCharts As Excel.ChartObjects Dim MyChart As Excel.ChartObject Dim MyChart1 As Excel.Chart ' 表示位置 グラフの大きさを指定して新しい埋め込みグラフを作成 MyCharts = xlsheet.chartobjects MyChart = MyCharts.Add(10, 90, 550, 300) Dim xlrange As Excel.Range xlrange = xlsheet.range("a1:f6") ' データの入力セル範囲 MyChart1 = MyChart.Chart With MyChart1 ' 系列を列に変更行は xlrows.setsourcedata(xlrange, Excel.XlRowCol.xlColumns) MRComObject(xlRange) 'xlrange の解放 '' 縦棒グラフを指定.ChartType = Excel.XlChartType.xlColumnClustered '' グラフのタイトルを表示.HasTitle = True Dim xlcharttitle As Excel.ChartTitle xlcharttitle =.ChartTitle xlcharttitle.text = " 中間テスト結果 " MRComObject(xlChartTitle) 'xlcharttitle の解放 '' 目盛りの設定 Dim xlaxes As Excel.Axes Dim xlaxis As Excel.Axis xlaxes = MyChart1.Axes xlaxis = xlaxes.item(excel.xlaxistype.xlvalue) ' ' データラベルの表示 ( 全て表示の場合 ).ApplyDataLabels(Excel.XlDataLabelsType.xlDataLabelsShowValue) ' 個別に表示する場合 Dim xlsc As Excel.Series xlsc =.SeriesCollection(1) xlsc.applydatalabels(excel.xldatalabelstype.xldatalabelsshowvalue) MRComObject(xlSC) ' その他詳細設定は Excel 上でマクロを取ってそのマクロを参考に上記のように ' コードを書き直して試して見て下さい '

26 With xlaxis.majorunit = 20.MaximumScale = 120 End With MRComObject(xlAxis) MRComObject(xlAxes) ' 目盛り間隔 ' 目盛りの最大値 'xlaxis の解放 'xlaxes の解放 ' 作業中のシートにグラフを表示する場合 'Dim location1 As Excel.Chart 'location1 =.Location(Excel.XlChartLocation.xlLocationAsObject, xlsheet.name) 'MRComObject(location1) '' グラフを縮小表示 Dim xlshapes As Excel.Shapes Dim xlshape As Excel.Shape xlshapes = xlsheet.shapes xlshape = xlshapes.item(1) ' 縦横を 70% に縮小表示 xlshape.scalewidth(0.7, Office.MsoTriState.msoFalse, _ Office.MsoScaleFrom.msoScaleFromTopLeft) xlshape.scaleheight(0.7, Office.MsoTriState.msoFalse, _ Office.MsoScaleFrom.msoScaleFromTopLeft) MRComObject(xlShape) 'xlshape の解放 MRComObject(xlShapes) 'xlshapes の解放 End With ' おまけ上記がうまく表示されたらコメントを外して試して下さい ' 3D 表示でグラフが回転しなが表示します 'MyChart.Chart.ChartType = Excel.XlChartType.xl3DColumn 'For i = 0 To 360 Step 10 ' MyChart.Chart.Rotation = i ' System.Threading.Thread.Sleep(1000) 'Next i MRComObject(MyChart1) MRComObject(MyChart) MRComObject(MyCharts) 'MyChart1 の解放 'MyChart の解放 'MyCharts の解放 '=========================== ここまで ======================================= '====== 以下は [.NET から既存の Excel ファイルを開く ] と同じです ======== Excel の定数の調べ方 VB6.0 では ( 定数 ).SetSourceData xlsheet.range("a1:f6"), xlcolumns -26-

27 VB.NET では (Excel. クラス名. 定数 ).SetSourceData(xlSheet.Range("A1:F6"), Excel.XlRowCol.xlColumns) 上記定数を調べる場合 VBAXL9.CHM 等のヘルプで [SetSourceData] をキーワードに検索すると SetSourceData メソッドがヒットします その解説文に [ 使用できる定数は XlRowCol クラスの xlcolumns または xlrows です ] と記載されています Excel. と入力するとインテリセンス機能により XlRowCol クラスを選択し 使用する定数を選んで下さい ヘルプファイルは バージョンにより VbaXl8.hlp Vbaxl9.chm Vbaxl10.chm VBAXL10.chm 等があります 標準のインストールでは インストールされませんので 入っていない方は CD より追加でインストールして下さい インストール方法は VBA のヘルプを参照するを見て下さい 又 定数名が判っていれば オブジェクトブラウザから定数名を検索すれば簡単に探せます Vbaxl9.chm でしたら 単独で開いても 検索機能が付いておりますので便利です Vbaxl10.chm は単独で開いた場合 キーワード等の検索はできません 又は Private Const xlcolumns As Short = 2 のように定数を宣言して使用する方法もあります [XL95] 組込み定数一覧 (1/3) [XL95] 組込み定数一覧 (2/3) [XL95] 組込み定数一覧 (3/3) Excel のグラフをクリップボード経由で PictureBox に貼付 Excel にデータを送りグラフを表示するに下記の部分を追加して下さい ' ' このグラフをファイルに保存する場合.Export(FileName:="c: test001.gif", FilterName:="GIF") ' MRComObject(xlShape) MRComObject(xlShapes) 'xlshape の解放 'xlshapes の解放 -27-

28 End With '=========================== ここからが追加分 ============================= ' Excel のグラフをクリップボード経由で PictureBox に貼付 ' クリップボードにコピー 'xlsheet.chartobjects(" グラフ 1").Copy() ' これでは.NET では取得できない MyChart1.CopyPicture(Appearance:=Excel.XlPictureAppearance.xlScreen, _ Size:=Excel.XlPictureAppearance.xlScreen, _ Format:=Excel.XlCopyPictureFormat.xlBitmap) '' 現在システムクリップボードにあるデータを取得します Dim idata As IDataObject = Clipboard.GetDataObject() ' クリップボードに Bitmap ファイルがあれば If idata.getdatapresent(system.windows.forms.dataformats.bitmap) Then 'PictureBox1 にクリップボードの画像を貼り付け PictureBox1.Image = CType(iData.GetData(DataFormats.Bitmap), Image) '=========================== ここまで ======================================= MRComObject(MyChart1) MRComObject(MyChart) MRComObject(MyCharts) 'MyChart1 の解放 'MyChart の解放 'MyChart1s の解放 '====== 以下は [.NET から既存の Excel ファイルを開く ] と同じです ======== 通常 Excel のグラフをコピーすると CF_METAFILEPICT : Windows メタファイル CF_ENHMETAFILE : 拡張メタファイルがクリップボードにコピーされ それらのファイルのフォーマット形式は.NET では取得する事ができず 従ってクリップボード経由で PictureBox に貼付できない為に 掲示板等への書き込みが散見されます そこで 色々調べていて解ったのですが Excel のグラフを BMP 形式でコピーできることを知り その動作をマクロにとって.NET 用のコードにしたものです Excel 上では グラフを選択して [Shift] キーを押しながら メニューバーの [ 編集 ] のメニューの [ 図のコピー ] をクリックすると下記のようなダイアログがでてきます -28-

29 又 Excel 上でグラフをファイルに保存する事も可能です 別途 クリップボード関係の API を使用すればメタファイル形式で取得することもできます ADO を使って Excel のシート名を高速に取得する及び従来の方法 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' プロジェクト 参照の追加 COM Microsoft ActiveX Data Objects *.* Library を参照して下さい ''ADO を使って Excel のシート名を高速に取得 Dim CN As New ADODB.ConnectionClass, RS As New ADODB.RecordsetClass Dim ncount As Long, xlfilename As String, SheetNeme As String ListBox1.Items.Clear() xlfilename = System.IO.Path.GetFullPath(".... Sample.xls") ' 下記の Excel 8.0 は Excel のバージョンによって 特に書換える必要はありません CN.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & xlfilename & ";Extended Properties=Excel 8.0;") RS = CN.OpenSchema(ADODB.SchemaEnum.adSchemaTables) Do Until RS.EOF SheetNeme = RS.Collect("TABLE_NAME").ToString() ' 名前ボックス等に表示される範囲名等を除く ' ワークシート名には自動的にシート名の後ろに $ が付くので If SheetNeme.EndsWith("$") Or SheetNeme.EndsWith("'") Then ncount = ncount + 1 ListBox1.Items.Add(SheetNeme) RS.MoveNext() Loop RS.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(RS) RS = Nothing CN.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(CN) CN = Nothing -29-

30 上記は VB6.0 で使っていたコードを.NET でも使えるのかと試してみたものです 本格的に ADO を使用される場合は ADO.NET の方をお使い下さい 因みに ADO.NET を使ったサンプルを作って比べて見ましたが 使っている分にはどちらで取得しているのか区別がつきません ( 処理速度も 機能等も ) Excel ワンポイントテクニック集 1.Excel のシート名を取得する ''VB6.0 の時は下記でも問題がなかったが 'Dim i As Long 'For i = 1 To xlbook.worksheets.count 'Debug.WriteLine(xlBook.Worksheets(i).Name) 'Next i ''VB6.0 の時も本来は Worksheets はコレクションなので下記のように書くべきだった 'Dim Sheet As Excel.Worksheet 'For Each Sheet In xlbook.worksheets ' Debug.WriteLine(Sheet.Name) 'Next ' そうすれば.NET 用にはどのように書けばよいかが解ったはず Dim sht As Excel.Worksheet For Each sht In xlsheets Debug.WriteLine(sht.Name) ' 当然代入したシート 1 個づつについて ReleaseComObject が必要です MRComObject(sht) Next Sheet1 とかに読み書きするときは ちゃんと変数に受けて 使った変数を ReleaseComObject している人が 上記のようにシート名を取得する時には そのような使い方をせず プロセスが終了しない事に悩んでいるケースがあるようです 他人のコード ( マクロ VB6.0 のコード ) を丸写しするのではなく キーボードから 1 文字づつ入力するようにして少しでも理解を深めて下さい 2. 罫線の描画 -30-

31 Dim xlrange As Excel.Range Dim xlborders As Excel.Borders Dim xlborder As Excel.Border xlrange = xlsheet.range("b2:f6") xlborders = xlrange.borders ' 枠線を実線で表示 xlborders.linestyle = Excel.XlLineStyle.xlContinuous ' 下側の線を指定 xlborder = xlborders(excel.xlbordersindex.xledgebottom) ' 下側の線を 2 重線で表示 xlborder.linestyle = Excel.XlLineStyle.xlDouble ' 一旦 ReleaseComObject MRComObject(xlBorder) ' 右側の線を指定 xlborder = xlborders(excel.xlbordersindex.xledgeright) ' 右側の線を太線で表示 xlborder.weight = Excel.XlBorderWeight.xlThick ' 一旦 ReleaseComObject MRComObject(xlBorder) ' 左側の線を指定 xlborder = xlborders(excel.xlbordersindex.xledgeleft) ' 左側の線を太線で表示 xlborder.linestyle = Excel.Constants.xlGray75 ' 一旦 ReleaseComObject MRComObject(xlBorder) MRComObject(xlBorders) MRComObject(xlRange) 3. 罫線の描画 ( 自作関数を使って ) Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' 開始点 終了点 線種 線の太さ 位置 ( 定数値 ) を指定 ' 位置が 0 の場合は格子状に引く ( 省略可 ) Call SetLine(2, 2, 8, 8, _ Excel.XlLineStyle.xlContinuous, _ Excel.XlBorderWeight.xlThin, 0) ' 外枠を太線で描画 Call SetLine(2, 2, 8, 8, _ Excel.XlLineStyle.xlContinuous, _ Excel.XlBorderWeight.xlThick, 34) -31-

32 '2 重線で下の上側に引く Call SetLine(8, 2, 8, 8, _ Excel.XlLineStyle.xlDouble, _ Excel.XlBorderWeight.xlThick, _ Excel.XlBordersIndex.xlEdgeTop) ' 罫線を引く自作関数 ' 開始点 終了点 線種 線の太さ 位置 ( 定数値 ) を指定 'SetLine(2, 2, 8, 8, は (B2:H8) になります ' 位置が 0 の場合は格子状に引く ( 省略可 ) ' 位置が 34 の場合は外枠線を描く ' 5= 左上から右下への罫線 ' 6= 左下から右上への罫線 ' 7= セルの左辺の罫線 ' 8= セルの上辺の罫線 ' 9= セルの下辺の罫線 ' 10= セルの右辺の罫線 ' 11= 内側の垂直線 ' 12= 内側の水平線 Private Sub SetLine(ByVal r1 As Integer, ByVal c1 As Integer, _ ByVal r2 As Integer, ByVal c2 As Integer, _ ByVal ls As Integer, ByVal lw As Integer, _ Optional ByVal lps As Integer = 0) Dim xlrange As Excel.Range Dim xlborders As Excel.Borders Dim xlborder As Excel.Border ' 線を引く範囲を A1 形式で取得 xlrange = xlsheet.range(r1toa1(r1, c1, r2, c2)) xlborders = xlrange.borders If lps = 0 Then ' 格子状に罫線を引く xlborders.linestyle = ls xlborders.weight = lw ElseIf lps = 34 Then ' 外枠線を描く For i As Int32 = 7 To 10 xlborder = xlborders(i) ' 罫線の表示位置を設定 xlborder.linestyle = ls ' 罫線の線種を設定 xlborder.weight = lw ' 罫線の太さを設定 MRComObject(xlBorder) Next i Else ' 個別に罫線を引く xlborder = xlborders(lps) ' 罫線の表示位置を設定 xlborder.linestyle = ls ' 罫線の線種を設定 xlborder.weight = lw ' 罫線の太さを設定 MRComObject(xlBorder) MRComObject(xlBorders) MRComObject(xlRange) -32-

33 Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer, _ ByVal r2 As Integer, ByVal c2 As Integer) As String 'A1 形式のアドレスを R1C1 形式に変換する関数 Dim i1, i2 As Integer Dim d1, d2 As String i1 = Microsoft.VisualBasic.Int((c1-1) 26) d1 = Microsoft.VisualBasic.IIf(c1 > 26, Microsoft.VisualBasic.Strings.Chr(64 + i1), "") i1 = c1-26 * i1 d1 &= Microsoft.VisualBasic.Strings.Chr(64 + i1) & CStr(r1) i2 = Microsoft.VisualBasic.Int((c2-1) 26) d2 = Microsoft.VisualBasic.IIf(c2 > 26, Microsoft.VisualBasic.Strings.Chr(64 + i2), "") i2 = c2-26 * i2 d2 &= Microsoft.VisualBasic.Strings.Chr(64 + i2) & CStr(r2) Return d1 & ":" & d2 End Function 4.Excel の Speech.Speak メソッドを使っての音声読み上げ Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'Excel の Speech.Speak メソッドを使っての音声読み上げ Dim xlapp As Object Dim xlspeech As Object xlapp = CreateObject("Excel.Application") xlspeech = xlapp.speech ''Excel の Speech.Speak で読み上げ ' コントロールパネルの音声認識の音声の選択で LH Kenji か LH Naoko を ' 選んでおいて下さい Excel2002 の CD 内に入っています ' 下記コードを実行して入っていない場合はウィザードが表示されます xlspeech.speak(textbox1.text) 'xlspeech 及び xlapp を解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSpeech) xlspeech = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) xlapp = Nothing 5.Excel の GetPhonetic メソッドを使ってのふりがなを取得 -33-

34 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'Excel の GetPhonetic メソッドを使ってのふりがなを取得 Dim xlapp As Object Dim myname As String Dim furigana As String xlapp = CreateObject("Excel.Application") ' 文字列中の空白を除去 (Microsoft.VisualBasic.Strings. を省略しております ) myname = StrConv(" 山田花子 ", VbStrConv.Wide).Replace(" ", "") 'Excel の GetPhonetic 関数を使ってふりがなを取得 furigana = xlapp.getphonetic(myname) ' 取得したふりがなをひらがなに変換 ( お好みで ) Label2.Text = " 山田花子 :" & StrConv(furigana, VbStrConv.Hiragana) 'xlapp を解放 System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) xlapp = Nothing これらのサンプルをご利用になる場合は 必要により Excel の起動 終了処理を追加して下さい (No.4 及び No.5 はそのままで使用頂けます ) 又 コメント等の注意書きは よく読んでから使用願います 自動化した Office アプリケーションの終了 現象 Microsoft.NET または Microsoft Visual.NET で Microsoft Office アプリケーションを自動化した場合に Quit メソッドを呼び出しても Office アプリケーションが終了しません 原因 Visual Studio.NET でマネージコードから COM オブジェクトを呼び出すと 自動的にランタイム呼び出し可能ラッパー (RCW) が作成されます RCW は.NET アプリケーションと COM オブジェクトの間の呼び出しをマーシャリングします RCW は COM オブジェクトへの参照カウントを保持します したがって RCW でのすべての参照が解放されていない場合 COM オブジェクトは終了しません 解決方法 Office アプリケーションを終了するには オートメーションコードが以下の条件を満たしていることを確認してください -34-

35 各オブジェクトを新しい変数として宣言しています たとえば コードに次の行があるとします obook = oexcel.workbooks.add() この行を次のように変更します dim obooks as Excel.Workbooks obooks = oexcel.workbooks obook = obooks.add() オブジェクトの使用が終了したら System.Runtime.InteropServices.Marshal.ReleaseComObject を使用します このメソッドによって RCW の参照カウントを減らします 変数を Nothing または Null に設定して 変数への参照を解放します Office アプリケーションオブジェクトの Quit メソッドを使用して サーバーにシャットダウンするように指示します 現象の再現手順 1.Visual Studio.NET を起動します 2.[ ファイル ] メニューの [ 新規作成 ] をポイントし [ プロジェクト ] をクリックします [ プロジェクト ] をクリックし [Windows アプリケーション ] をクリックして [OK] をクリックします Form1 がデフォルトで作成されます 3.Microsoft Excel Object Library への参照を追加します この操作を行うには 以下の手順を実行します a.[ プロジェクト ] メニューの [ 参照の追加 ] をクリックします b.[com] タブで Excel 用のオブジェクトライブラリを探してクリックし [ 選択 ] をクリックします Microsoft Excel 2002 の場合 : Microsoft Excel 10.0 Object Library 注 : Microsoft Office XP プライマリ相互運用機能アセンブリ (PIA) をまだ入手していない場合は ダウンロードしてインストールすることをお勧めします Office XP 用の PIA の関連情報を参照するには 以下の サポート技術情報 (Microsoft Knowledge Base) をクリックしてください ( ) [INFO] Microsoft Office XP 用の PIA のダウンロード Microsoft Office Excel 2003 の場合 : Microsoft Excel 11.0 Object Library c.[ 参照の追加 ] ダイアログボックスで [OK] をクリックして選択内容を確定します 4.[ 表示 ] メニューの [ ツールボックス ] をクリックし Button コントロールを Form1 にドラッグします -35-

36 5.[Button1] をダブルクリックします フォームのコードウィンドウが表示されます 6.Form1.vb の先頭に次のコードを追加します Imports Microsoft.Office.Interop 7. コードウィンドウには 次のコードが表示されています Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click これを次のコードで置き換えます Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oapp As New Excel.Application() Dim obook As Excel.Workbook = oapp.workbooks.add Dim osheet As Excel.Worksheet = oapp.activesheet osheet = Nothing obook.close(false) obook = Nothing oapp.quit() oapp = Nothing Debug.WriteLine("Sleeping...") System.Threading.Thread.Sleep(5000) Debug.WriteLine("End Excel") 8.F5 キーを押してアプリケーションを実行します 9.Windows タスクマネージャを起動します Visual Studio で [ 出力 ] ウィンドウを表示して デバッグメッセージを参照します コマンドボタンをクリックすると Excel.exe のインスタンスが [ プロセス ] タブの一覧に表示されることを確認します A. アプリケーションが休止を終了した後も タスクマネージャの一覧で Excel のインスタンスが実行されています ダイアログボックスを閉じると Excel が [ プロセス ] タブの一覧に表示されなくなることを確認します B. 解決方法 に記載した手順を実行すると Office アプリケーションは最後の変数の解放後 終了します 手順 5. の関数を次のコードで置き換えます Private Sub NAR(ByVal o As Object) Try System.Runtime.InteropServices.Marshal.ReleaseComObject(o) Catch Finally -36-

37 o = Nothing End Try Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oapp As New Excel.Application() Dim obooks As Excel.Workbooks = oapp.workbooks Dim obook As Excel.Workbook = obooks.add Dim osheet As Excel.Worksheet = oapp.activesheet NAR(oSheet) obook.close(false) NAR(oBook) NAR(oBooks) oapp.quit() NAR(oApp) Debug.WriteLine("Sleeping...") System.Threading.Thread.Sleep(5000) Debug.WriteLine("End Excel") Visual.NET を使用している場合は NAR() 関数のコードを参照します private void NAR(object o) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(o); } catch {} finally { o = null; } } トラブルシューティング 現象の再現手順 で説明した手順を実行してもサーバーがシャットダウンしない場合は 最後のオブジェクトの解放後 GC.Collect() メソッドと GC.WaitForPendingFinalizers() メソッドを使用します ランタイムは RCW でガベージコレクションを実行するため GC.Collect() メソッドはガベージコレクタを強制的に実行し RCW が保持している参照を解放します GC.Collect() メソッドは 使用可能なメモリの最大メモリを要求しますが すべてのメモリが利用可能になるわけではないことに注意してください MS のサポート技術情報等で紹介されている Excel 関係のサンプル一覧 (20 件 )

38 -38-

Microsoft Excel操作

Microsoft Excel操作 Microsoft Excel 操作 Excel ファイルにアクセス リフレクションを利用したレイトバインディングで Excel ファイルを操作 Visual Basic なら CreatObject 関数を使用して 暗黙の遅延バインディングを利用する事に依り 簡単にに実現出来る Excel の操作も C# で実現するには 少し面倒臭い事に成る 事前バインディングでも実装する事も出来るが 事前バインディングだと

More information

ICONファイルフォーマット

ICONファイルフォーマット グラフィックス 画像フォーマットエンコーダパラメータ 様々なフォーマットで画像を保存 Bitmap クラスを用いる事でビットマップ JPEG GIF PNG 等様々なフォーマットの画像を読み込み操作する事が出来る 更に Bitmap クラスや Graphics コンテナを用いて描画処理等を施したイメージをファイルに保存する事も出来る 此の時 読み込めるフォーマット同様に保存するフォーマットを選択する事が出来る

More information

グラフィックス

グラフィックス グラフィックス PictureBox の Image プロパティに関する良く有る勘違い PictureBox に画像を表示する方法と仕て PictureBox の Image プロパティを使う方法と Graphics の DrawImage メソッドを使う方法が有るが 此の 2 つの方法を混同し 正しく理解して居ない事が多い様で有る 例えば 下記に列挙する様な状況が 此れに該当する 1.PictureBox

More information

ファイル操作

ファイル操作 ファイル操作 TextFieldParser オブジェクト ストリームの読込と書込 Microsoft.VisualBasic.FileIO 名前空間の TextFieldParser オブジェクトは 構造化テキストファイルの解析に使用するメソッドとプロパティを備えたオブジェクトで有る テキストファイルを TextFieldParser で解析するのは テキストファイルを反復処理するのと同じで有り

More information

VB実用⑦ エクセル操作Ⅰ

VB実用⑦ エクセル操作Ⅰ VB でエクセル操作 Ⅰ VB 2005 7 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 (De Facto Standard) で有ると謂う事が出来る 此処では 其のエクセルを Visual Basic から操作する方法を 重点的に学ぶ 今回は Visual Basic でエクセルを利用する基本と成るオブジェクト生成と

More information

データアダプタ概要

データアダプタ概要 データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

DAOの利用

DAOの利用 DAO VB2005 で DAO を使用して Excel のデータを取得 Visual Basic 6.0 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = Form1.StatusBar1.Panels(12) & Dir(Form1.StatusBar1.Panels(12)

More information

ファイル操作-インターネットキャッシュ

ファイル操作-インターネットキャッシュ ファイル操作 インターネット一時ファイルの保存場所 インターネットキャッシュ インターネット一時ファイルの保存場所は Internet Explorer の場合 下記の手順で確認する事が出来る 1.[ ツール ] [ インターネットオプション ] でインターネットオプション画面のダイアログを表示させる 2.[ 全般 ] タブで [ インターネット一時ファイル ] グループの [ 設定 ] をクリックすると

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

Microsoft Word - VB.doc

Microsoft Word - VB.doc 第 1 章 初めてのプログラミング 本章では カウントアップというボタンを押すと表示されている値が1ずつ増加し カウントダウンというボタンを押すと表示されている値が1ずつ減少する簡単な機能のプログラムを作り これを通して Visual Basic.NET によるプログラム開発の概要を学んでいきます 1.1 起動とプロジェクトの新規作成 Visual Studio.NET の起動とプロジェクトの新規作成の方法を

More information

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るので 此れを利用して音声認識を行うサンプルを紹介する 下記の様な Windows フォームアプリケーションを作成する エディタを起動すると

More information

Userコントロール

Userコントロール User コントロール 初めてのユーザーコントロールの作成 作成したクラスは他のプログラムで再利用出来る為 同じコードを何度も繰り返し作成する必要が無い コントロールも 複数のプロジェクトで再利用出来るクラスで有る 同じユーザーインターフェイスを何度も繰り返してデザインすると謂う経験は 恐らく誰でも有る 例えば 姓と名を入力する為の TextBox コントロールを追加した後で 両方を組み合わせてフルネームを作成するコードを追加する等の作業で有る

More information

VB.NET解説

VB.NET解説 Visual Basic.NET 印刷編 目次 印刷の概要... 2 印刷の流れ... 2 標準の Windows フォーム印刷ジョブの作成... 3 実行時に於ける Windows フォーム印刷オプションの変更... 3 Windows フォームに於ける接続されたプリンタの選択... 4 Windows フォームでのグラフィックスの印刷... 5 Windows フォームでのテキストの印刷...

More information

NotifyIconコントロール

NotifyIconコントロール NotifyIcon コントロール システムトレイ ( タスクトレイ ) にアイコンを表示する.NET Framework 2.0 以降の場合は 後述の 2 を観て欲しい Outlook や MSN Messenger 等の様に Windows アプリケーションではシステムトレイ ( タスクトレイ ステータス領域等とも呼ばれる ) にアイコンを表示して アプリケーションの状態を示したり アプリケーションのフォームを表示したりする為のショートカットとして利用する事が出来る.NET

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WindowsForm サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WindowsForm VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET DLLのサンプルプログラムの参照サンフ

More information

正規表現応用

正規表現応用 正規表現 正規表現を使って文字列が或る形式と一致するか調べる 指定された正規表現のパターンと一致する対象が入力文字列内で見付かるか何うかを調べるには Regex クラスの IsMatch メソッドを使用する 此処では IsMatch メソッドを使った例を幾つか紹介する 猶 正規表現のパターンと一致する個所を探し 見付かれば 其の箇所を抽出する方法は 正規表現を使って文字列を検索し 抽出する で紹介して居る

More information

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする 2015.9.19~9,20 仕様 Excel の場合は 処理メニュー選択用の新しいフォームを開き この実行ファイルと同じフォルダにある test.xlsb

More information

スライド 1

スライド 1 C# の基本 ~ ファイル読み込み ~ 今回学ぶ事 今回はファイル読み書きに必要 BinaryReader クラスについて記載する ファイル参照ダイアログである OpenFileDialog クラスについても理解を深める また Bitmap クラスを用いた Bitmap ファイルの読み込み方法についても学ぶ フォーム作り まず label picturebox を配置する ツールボックスより左クリックで選択する

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション Excel VBA の基本 1 VBA Visual Basic for Applications Office シリーズに搭載されているプログラミング言語 マクロを作成するために使われる 1 プログラミングとは 人間の意図した処理を行うようにコンピュータに指示を与えること セル A1 の内容をセル B1 にコピーしなさいセル A1 の背景色を赤色にしなさいあれをしなさいこれをしなさい 上から順番に実行

More information

ListViewコントロール

ListViewコントロール ListView コントロール ListView コントロールへ項目を追加 本稿では.NET Framework の標準コントロールで有る ListView コントロール (System.Windows.Forms 名前空間 ) を活用する為に ListView コントロールにデータを追加する方法を紹介する ListView コントロールは データ項目をアイコン表示や詳細表示等に依り一覧表示する為の物で

More information

Microsoft Word -

Microsoft Word - Visual Basic 2005 Express Edition 起動とプロジェクトの新規作成方法 1.1 起動とプロジェクトの新規作成 Visual Basic の起動とプロジェクトの新規作成の方法を Visual Basic 2005 Express Edition で説明します なお バージョンやエディションが異なる場合は 操作方法が若干違います 本節の起動とプロジェクトの新規作成の部分については

More information

ウィンドウ操作 応用

ウィンドウ操作 応用 Win32API 関数 ウィンドウ操作 ウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得 メモ帳や電卓等のウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得する方法を 下記に示す Visual Basic Imports System.Runtime.InteropServices Public Class WindowFromWindowName

More information

プラグイン

プラグイン プラグイン プラグイン詳細 2 ~ プラグイン機能を持つテキストエディタの作成 ~ はじめに Adobe Photoshop や Becky! Internet Mail 等のアプリケーションでは プラグイン ( 又は アドイン エクステンション 等 ) と呼ばれるプログラムをインストールする事に依り 機能を拡張する事が出来る 此の記事では此の様なプラグイン機能を持ったアプリケーションの作り方を プラグイン対応のテキストエディタを作成する事に依り

More information

ファイル操作-バイナリファイル

ファイル操作-バイナリファイル ファイル操作 バイナリ ファイルを読み書きする バイナリファイル ( 即ちテキストファイル以外のファイル ) を読み書きするには FileStream クラス (System.IO 名前空間 ) を利用する FileStream クラスはファイル用のストリームをサポートするクラスで有り Stream クラス (System.IO 名前空間 ) の派生クラスの 1 つで有る 基本的には コンストラクタで指定したファイルのストリームに対して

More information

ルーレットプログラム

ルーレットプログラム ルーレットプログラム VB 2005 4 プログラムの概要 カジノの代表的なゲーム ルーレット を作成する 先ず GO! ボタンをクリックすると ルーレット盤上をボールが回転し 一定時間経過すると ボールが止まり 出目を表示するプログラムを作成する 出目を 1~16 大小 偶数奇数の内から予想して 予め設定した持ち点の範囲内で賭け点を決め 賭け点と出目に依り 1 点賭けの場合は 16 倍 其他は 2

More information

ファイル監視

ファイル監視 ファイル操作 ファイルやディレクトリの監視 FileSystemWatcher クラス.NET Framework のクラスライブラリには ファイルやディレクトリの作成 変更 削除を監視する為の FileSystemWatcher クラスが System.IO 名前空間に用意されて居る ( 但し Windows 98/Me では利用出来ない ) 此れを利用すると 特定のディレクトリにファイルが作成された

More information

ブロック パニック

ブロック パニック ブロックパニック VB 2005 9 プログラムの概要 壁が迫り来る不思議な空間のオリジナルゲーム ブロックパニック を作成する スタートボタンをクリックし上下左右の矢印キーで白猿を移動させる スペースキーを押すと 向いて居る方向の壁が後退する 左右の壁が合わさると ゲームは終了する 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り

More information

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 ( 此処では 10) を代入する丈でなく 2 の配列変数の宣言の様に ブレース { } の中にカンマ区切りで初期値のリストを記述し 配列の各要素に初期値を代入出来る様に成った

More information

VB実用Ⅲ⑩ フリーデータベースⅡ

VB実用Ⅲ⑩ フリーデータベースⅡ MySQL の利用 MySQL の ODBC(MyODBC) テキストでは MySQL Connector/ODBC(mysql-connector-odbc-3.51.14-win32.msi) をインストールした場合に付いて解説して居るが 此処では MyODBC(MyODBC-3.51.10-x86-win-32bit.msi) をインストールし myodbc-3.51.06-conv_ujis.zip

More information

Prog2_15th

Prog2_15th 2019 年 7 月 25 日 ( 木 ) 実施メニューメニューバーとコンテクストメニュー Visual C# では, メニューはコントロールの一つとして扱われ, フォームアプリケーションの上部に配置されるメニューバーと, コントロール上でマウスを右クリックすると表示されるコンテクストメニューとに対応している これ等は選択するとメニューアイテムのリストが表示されるプルダウンメニューと呼ばれる形式に従う

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション レッスン (1) あるワークシート中のあるセルを指定する Worksheets(" ワークシート名 ").Range(" セル ").Value ( 例 ) Worksheets(" データ収集 ").Range("A2").Value あるワークシートのセルから 別のワークシートのセルへ転記する Worksheets(" シート A").Range(" セル ").Value = Worksheets("

More information

VB実用⑧ エクセル操作Ⅱ

VB実用⑧ エクセル操作Ⅱ VB でエクセル操作 Ⅱ VB 2005 8 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 ( De Facto Standard) で有ると謂う事が出来る 今回は エクセルを Visual Basic から操作する為に 最も基本と成るセルに設定された値の取得を 重点的に学ぶ 前回学んだエクセル操作の為のオブジェクトの生成と

More information

エクセル詳細 アドイン

エクセル詳細 アドイン Microsoft Excel 詳細 アドイン Excel アドインの作成 Excel アドインを作成するには ブックを作成し コード ユーザー設定ツールバー 及び メニュー項目を追加して Excel アドインファイルとして保存する 1. 新しいブックを作成してコードを追加し ユーザー設定ツールバー 又は メニューバーを作成する 2.[ ファイル ] メニューの [ プロパティ ] をクリックする

More information

プレポスト【問題】

プレポスト【問題】 コース名 : 基礎から学ぶ!Excel VBA による業務の自動化 受講日 氏名 1 Excel VBA を使用するメリットとして誤っているものを 1 つ選びなさい 1. 手作業では手間のかかる作業も プログラムに記述した処理は一括して実行されるため 何段階ものメニュー操作を行う必要がなくなる 2. プログラムに書いた処理は記述どおりに実行されるため だれがいつ何回行っても確実な処理がなされ 誤動作を防ぐことができる

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WebForms ASP.NET サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WebForm ASP.NET VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET

More information

mySQLの利用

mySQLの利用 MySQL の利用 インストール インストール時に特に注意点は無い 本稿記述時のバージョンは 6.5.4 で有る (2017 年 11 月現在では 6.10.4 で https://dev.mysql.com/downloads/connector/net/6.10.html よりダウンロード出来る ) 参照設定 インストールが終了すれば Visual Studio で参照の設定を行う 参照の設定画面で

More information

アプリケーション

アプリケーション アプリケーション開発 お絵かきソフト 目次 お絵かきソフトを作ってみよう... 3 絵を書く枠と場所表示を作る... 3 マウスの動きを見てみよう... 4 絵を書く準備をします... 5 絵を書くとはどういうことか... 5 では線画を描いてみよう... 6 マウスをドラッグしたときだけ線を引くように改造する... 8 お絵かきソフトを作ってみよう 今回は お絵かきソフトを作ってみましょう マウスを動かして線画を書いてみましょう

More information

ExcelVBA

ExcelVBA EXCEL VBA REGLECASSE YU SATO 目次 はじめに 開発タブの表示 拡張子 VBEの起動と初期設定 モジュールの挿入 削除 プロジェクト モジュール プロシージャ 変数の宣言 (Dim) If~Then For~Next 応用 :If~ThenとFor~Next ボタンの作成 最後に Subプロシージャ 基本説明 セルの指定 (Range) 変数とデータ型 (String,Long)

More information

ハッシュテーブル

ハッシュテーブル ハッシュテーブル ハッシュテーブル ( 連想配列 ) を使う ハッシュテーブルとは キー (key) と値 (value) のペアを保持して居るコレクションで有る 通常の配列がインデックス番号に依り各値 ( 各要素 ) にアクセス出来るのに比べて ハッシュテーブルでは インデックス番号の代わりにキーを用いて 其の各値にアクセスする事が出来る キーと 其のキーから連想される ( 対応付けられて居る )

More information

64bit環境で32bitコンポーネントの利用

64bit環境で32bitコンポーネントの利用 64bit 環境 64bit 環境で 32bit コンポーネントの利用 Windows 7 や 8 の出現で 愈々 64bit 環境も普及し始めて来た 64bit 環境に於いては 64bit 用に最適化された 64bit コンポーネントを使用するのが本筋で有ろうが 64bit 環境に於いても 32bit コンポーネントを使用し度い場合が有る 過去の遺物 ( レガシ ) と仕て切り捨てるのではなく 良い物は良い物と仕て有効利用すると謂う観点から

More information

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 目次第 1 章プログラミングについて 1 ソフトウェアの働き 1 2 プログラミング言語 1 3 主なプログラミング言語の歴史 2 第 2 章 Visual Basic について 1 Visual Basic とは 3 2.NET Framework の環境 3 3 Visual Basic と.NET Framework の関係

More information

ブロック崩し風テニス

ブロック崩し風テニス ぱっくんフィッシング VB 2005 13 プログラムの概要 パーティゲームとして良く知られた釣りゲームです マウスで釣り糸を操作して 開閉する魚の口に餌を垂らし 魚が餌を咥えると 釣り上げ 籠の中に入れます 直ぐに口を開けて 海に逃れる魚 中々餌を離さず 籠に入らない魚と 色々なバリエーションが楽しめます 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い

More information

VB実用⑩ エクセル操作Ⅳ

VB実用⑩ エクセル操作Ⅳ VB でエクセル操作 Ⅳ VB 2005 10 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 (De Facto Standard) で有ると謂う事が出来る 今回は Visual Basic から エクセルのセルに値を設定する手法を 重点的に学ぶ 前回迄に学んだエクセル操作の為のオブジェクトの生成を元に

More information

構造体

構造体 構造体 Byte 配列 構造体とコピーする方法 構造体とバイト配列の変換を行うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; 下記の 3 種類の構造体にバイト配列の値を格納した場合に付いて検証する

More information

Prog2_2nd

Prog2_2nd 2018 年 10 月 4 日 ( 木 ) 実施 C# プログラムの基礎 基本構造 1) クラス Visual C# のプログラムの基本単位をクラスと呼ぶ Windows フォームアプリケーションを作 成する際, プロジェクトを作成すると生成されるファイルのうち,Form1.cs を例にとれば, その クラス名は Form1 である クラスは class キーワードを用いて宣言する Form1.cs

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 演習課題レッスン (1) '(1) ワークシートどうしのやりとり ' ワークシート 請求書 1 から ワークシート データ収集 にデータを転記しましょう Sub example01() ' 請求書番号 ( 請求書 1のE2からデータ収集のA2へ ) Worksheets(" データ収集 ").Range("A2").Value = Worksheets(" 請求書 1").Range("E2").Value

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~ .NET プログラマー早期育成ドリル VB 編 付録文法早見表 本資料は UUM01W:.NET プログラマー早期育成ドリル VB 編コードリーディング もしくは UUM02W:.NET プログラマー早期育成ドリル VB 編コードライティング を ご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮下さい VB プログラミング文法早見表 < 基本文法 > 名前空間の定義 Namespace

More information

Ver.1.1

Ver.1.1 Ver.1.1 B3MLib ライブラリマニュアル / 使用環境 使用環境 Windows XP(SP2 以降 )/Windows Vista/Windows 7 各 32 ビット 64 ビット版 B3MLib.DLL と Extensions.DLL(B3M ライブラリセット ).NET Framework 2.0 以上 Windows XP サービスパック 2 以降 Windows Vista

More information

Microsoft Word _VBAProg1.docx

Microsoft Word _VBAProg1.docx 1. VBA とマクロ 1.1 VBA とは VBA(Visual Basic for Applications) は 1997 年に Microsoft 社がマクロを作成するために開発された言語である Windows 対応のアプリケーションを開発するためのプログラミング言語 Visual Basic をもとにしているため 次のような特徴がある 1 VBA は Excel Word, Access,

More information

VFD256 サンプルプログラム

VFD256 サンプルプログラム VFD256 サンプルプログラム 目次 1 制御プログラム... 1 2.Net 用コントロール Vfd256 の使い方... 11 2.1 表示文字列の設定... 11 2.2 VFD256 書込み前のクリア処理... 11 2.3 書き出しモード... 11 2.4 表示モード... 12 2.5 表示... 13 2.6 クリア... 13 2.7 接続方法 ボーレートの設定... 13 2.8

More information

MS Office オートメーション

MS Office オートメーション MS Office オートメーション Excel マクロのキックに依る印刷 Access では CSV や Excel 形式でのファイル保存が可能で有る 此れ利用して Excel のマクロを装備したシートに読み込んでマクロを実行し 印刷する方法を紹介する 一般的には, 単成るテキストファイルで有る CSV の方が Excel 形式ファイルより汎用性が有るが マクロで自動実行した時には が行頭に付いて居るセルを文字列型と仕て認識して仕舞うと謂う問題が発生する為

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プロシージャ プロシージャの種類 Subプロシージャ Functionプロシージャ Propertyプロシージャ Sub プロシージャ Subステートメント~ステートメントで囲まれる 実行はするけど 値は返さない 途中で抜けたいときは Exit Sub を行なう Public Sub はマクロの実行候補に表示される Sub プロシージャの例 Public Sub TestSubProc() Call

More information

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスがインスタンス化されてからメソッドに成る ) # 関数 def test_func(): print('call test_func') #

More information

図 2 Excel スプレッドシートの世界 のウィンドウ 図 3 Visual Basic の世界 のウィンドウ 図 3 の VBA ウィンドウは 図 2 の Excel ウィンドウのメニューの ツール をクリックし 開か れるプルダウンメニューで マクロ /Visual Basic Editor

図 2 Excel スプレッドシートの世界 のウィンドウ 図 3 Visual Basic の世界 のウィンドウ 図 3 の VBA ウィンドウは 図 2 の Excel ウィンドウのメニューの ツール をクリックし 開か れるプルダウンメニューで マクロ /Visual Basic Editor Excel マクロ -Visual Basic の基本 - 1.Excel ファイルの構成 Excel ファイルは 右図のように 構成されている 一般に Excel と言えば 右図で Excel スプレッドシートの世界 と名付けた部分 すなわち Excel を起動したときに表示されるスプレッドシート (1ページの場合もあり 数ページの場合もある ) のみであるように思われている Excel ファイルには

More information

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ C# & VB 1 グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラフィックを行うためには Visual Studio の基本操作や C# または VB

More information

スレッド操作 タイマー

スレッド操作 タイマー スレッド操作 タイマー System.Windows.Forms.Timer Windows フォームの Timer は 一定の間隔でイベントを発生させるコンポーネントで有る 此のコンポーネントは Windows フォーム環境で使用する サーバー環境に適したタイマが必要な場合は 後述の System.Timers.Timer を使用する イベントの発生する間隔は ミリ秒単位で Interval プロパティで設定しする

More information

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバーコード OCX や バーコード対応レ ポートツールが豊富にありますので それほど困ることは無いと思われます

More information

VB実用⑯ 印刷Ⅵ(Excel)

VB実用⑯ 印刷Ⅵ(Excel) 印刷 Ⅴ VB 2005 5 プログラムの概要 事務処理に於いて 集計結果等を印刷して 確認等を行う事も多い為 ペーパーレスオフィスが推奨される昨今に於いても 矢張り印刷に関する技術は必要で有る Visual Basic から印刷を行う方法は.NET 以降 PrintDocument オブジェクトを使用する方法が 標準と仕て一般的で有るが Professional 版等では ReportView や

More information

データベースプログラミング

データベースプログラミング データセットとデータテーブル データセット (DataSet) とは何かに付いて 簡単に説明する データセットとは 典型的な.NET の Windows データベースアプリケーションでは データセットを通じてアプリケーションからデータベースにアクセスする データセットとは 簡単に謂うと データベースから取得したレコードをメモリ上に持つ為の入れ物で有る 例えば データベースからレコードを取得し 其れをグリッドコントロールに表示する様な

More information

エクセルによる数値計算と化学への応用

エクセルによる数値計算と化学への応用 エクセルによる数値計算と化学への応用 群馬大学工学部 応用化学 生物化学科 平成 21 年 4 月 前期に PC を使った文書作成 表計算 プレゼンテーションを習得しました 後期には主に表計算を より高度に利用するための手法を勉強します 第 1 章計算の基礎 1.1 文字の表示 文字 ABC 1.2 四則計算 8 + 2 = 10 8-2 = 6 8 2 = 16 8 2 = 4 1.3 数列の和

More information

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加 SharpShooter Reports.Win 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されま す 目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発...

More information

C#の基本2 ~プログラムの制御構造~

C#の基本2 ~プログラムの制御構造~ C# の基本 2 ~ プログラムの制御構造 ~ 今回学ぶ事 プログラムの制御構造としての単岐選択処理 (If 文 ) 前判定繰り返し処理(for 文 ) について説明を行う また 整数型 (int 型 ) 等の組み込み型や配列型についても解説を行う 今回作るプログラム 入れた文字の平均 分散 標準偏差を表示するプログラム このプログラムでは calc ボタンを押すと計算を行う (value は整数に限る

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 配列とコレクション 配列の使い方 固定配列 動的配列 コレクションの使い方 今日の目的 固定配列の宣言例 プロシージャレベル Dim arybuf(0 To 5) As Long モジュールレベル Private arybuf(0 To 5) As Long Public arybuf(0 To 5) As Long 固定配列の宣言例 プロシージャレベル Dim arybuf(0 To 5) As

More information

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL: マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL: http://excel2010.kokodane.com/excel2010macro_01.htm http://span.jp/office2010_manual/excel_vba/basic/start-quit.html Excel2010 でマクロを有効にする

More information

1. 入力画面

1. 入力画面 指定した時刻に指定したマクロ (VBA) を実行するプログラム (VBA) 益永八尋 様々な業務を行っている場合には 指定した時刻に指定したマクロ (Macro VBA) を実行したくなる場合がある たとえば 9:00 17: 00 や 1 時間 6 時間間隔に指定したマクロ (Macro VBA) を実行する この様な場合に対応できるように汎用性の高いプログラムを作成した この場合に注意する必要があるのは

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム VB1 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Dim) 標準コントロールの利用

More information

Microsoft Word - マニュアル-ExcelMcro-2.doc

Microsoft Word - マニュアル-ExcelMcro-2.doc Excel プログラム開発の練習マニュアルー 2 ( マクロの学習 -2 ) 作成 2015.03.20 修正 2015.04.19 本マニュアルでは Excel でのプログラム開発を行なうに当たって Excel の高度なマクロに関する学習 について記述します Ⅰ.Excel のマクロに関する学習 -2 1. 初めに Excel は単なる表計算のソフトと思っている方も多いと思います しかし Excel

More information

上の図がプロジェクトエクスプローラです 通常 VisualBasicEditor 画面の左上に配置されています Microsoft Excel Objects( ワークシート ) フォーム 標準モジュール クラスモジュールなどに分かれていて それらの集まりをプロジェクトといいます Excel のワー

上の図がプロジェクトエクスプローラです 通常 VisualBasicEditor 画面の左上に配置されています Microsoft Excel Objects( ワークシート ) フォーム 標準モジュール クラスモジュールなどに分かれていて それらの集まりをプロジェクトといいます Excel のワー TextBox1 Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 Beep なお 前回の記事で IF 条件式がわかりにくいとの指摘があったので そちらを再度 説明しましょう まず

More information

Prog2_4th

Prog2_4th 2018 年 10 月 18 日 ( 木 ) 実施 イベントハンドライベントハンドラとは Windows フォーム上のコントロールに対して クリックされた とか 文字列を変更された とかいったイベントを行った際に, それを受け取って処理を行うメソッドをイベントハンドラと呼ぶ 本日の課題第 3 回の授業では, フォームデザイナーで該当するコントロールをダブルクリックして, コードエディタに表示されたイベントハンドラの処理を記述したが,

More information

ホームページ (URL) を開く 閉じる 益永八尋 VBA からホームページを開いたり 閉じたりします ホームページを開くはシート名 HP_Open で操作し ホームページを閉じるはシート名 "HP_Close" で操作します ホームページを開く方法はいくつかありますがここでは 1 例のみを表示します なお これは Web から入手したサンプルプログラムから使い勝手が良いように修正 追加したものです

More information

第 1 章 VBA について 1 イントロダクション 校務で生徒や先生方のデータの集計など,Excel を使用することが多くなっています 日常,Excel で作業をしていると 同じ操作 を繰り返し行わなければいけないことが多くありませんか? この 同じ操作 を VBA を利用し, より業務を効率化さ

第 1 章 VBA について 1 イントロダクション 校務で生徒や先生方のデータの集計など,Excel を使用することが多くなっています 日常,Excel で作業をしていると 同じ操作 を繰り返し行わなければいけないことが多くありませんか? この 同じ操作 を VBA を利用し, より業務を効率化さ 平成 29 年度 プログラミング研修講座 岩手県立総合教育センター 第 1 章 VBA について 1 イントロダクション 校務で生徒や先生方のデータの集計など,Excel を使用することが多くなっています 日常,Excel で作業をしていると 同じ操作 を繰り返し行わなければいけないことが多くありませんか? この 同じ操作 を VBA を利用し, より業務を効率化させていきましょう 2 VBA とは

More information

GUIプログラムⅣ

GUIプログラムⅣ GUI プログラム Ⅳ 画像指定ウィンドウの生成 ファイル名 :awtimage.java import java.awt.*; import java.awt.event.*; public class awtimage extends Frame // コンポーネントクラスの宣言 Button btnbrowse; Label lblcaption7; TextField txtimage; //

More information

TestDesign for Web

TestDesign for Web 発行日 2012/6/21 発行元 株式会社アープ 本書は Web でのテスト自動化における Test Design の一連の操作方法まとめたものです Test Design のメニューの説明やより詳細な使い方については ユーザーズガイド を参照してください 目次 1. はじめに... 1 2. 環境構築... 2 2.1. Selenium のサイトについて... 2 2.2. Selenium

More information

目次 第 1 章はじめに 取扱いについて 記載内容について... 6 第 2 章基本操作 Excel Online を開く ファイル ( ブック ) を作成する ファイル ( ブック ) を開く..

目次 第 1 章はじめに 取扱いについて 記載内容について... 6 第 2 章基本操作 Excel Online を開く ファイル ( ブック ) を作成する ファイル ( ブック ) を開く.. Office 365 Excel Online - 利用マニュアル - 発行日 2015/11/01 1 目次 第 1 章はじめに... 5 1.1. 取扱いについて... 6 1.2. 記載内容について... 6 第 2 章基本操作... 7 2.1. Excel Online を開く... 8 2.2. ファイル ( ブック ) を作成する... 10 2.3. ファイル ( ブック ) を開く...

More information

バスケットボール

バスケットボール バスケットボール きょうつうへんすうせんげん 共通の変数を宣言する ひょうじ 1. ソリューションエクスプローラで コードの表示をクリックする つぎひょうじところしたかこにゅうりょく 2. 次のコードが表示されるので 1の所に 下の囲いのコードを入力する Imports System.Runtime.InteropServices Public Class Basketball にゅうりょく 1 ここに入力する!

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 02 グラフゖックで簡単な図形を描く図形描画プログラム 1 今回作成するゕプリケーションの概要 ボタンをクリックすると図形を描くプログラム 行われる動作 [1] ボタンをクリック [2] そのボタンに対する図形を描く これを使用者とコンピュータの関係で描くと [ 使用者 コンピュータ ] ボタンをクリック [ 使用者 コンピュータ ] 図形を描画して見せる 使用者がコンピュータにすること ボタンをクリック

More information

グラフィックス 目次

グラフィックス 目次 WPF チュートリアル Microsoft Expression Blend を使用してボタンを作成する 此のチュートリアルでは WPF のカスタマイズされたボタンを Microsoft Expression Blend を使用して作成する手順に付いて説明する Microsoft Expression Blend の具体的な動作は Extensible Application Markup Language(XAML)

More information

データベース1

データベース1 データベース操作プログラム Ⅲ VB20 プログラムの概要 ACCESS 等のデータベースの操作に不慣れな者でも 簡単に使用する事が出来るようなデータベースアプリケーションを目指します 今回は データグリッドをクリックする事に依り 其のレコードのフィールドデータを個別にテキストボックスやコンボボックスに表示するを付加する 此の際 カテゴリ ID や著者 ID の様に人間に解り難いデータ形式では無く

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 全コース Web フォロー付!! Excel VBA 初心者の方から始められる入門コースから 基本文法が学べるベーシックや 高度なプログラミングが学べるスタンダードまでしっかりと学習できます!! 学習の流れ Excel VBA 入門 VBA 初心者の方 Excel の基本知識をお持ちの方 Excel VBA ベーシック 基本文法を理解し 読解 ( 編集 ) 能力を身につけたい方 Exce lvba

More information

OTRS10 他社システムOTRS呼出利用手順書

OTRS10 他社システムOTRS呼出利用手順書 他社システム OTRS 呼び出し 利用手順書 はじめに 他システム OTRS 呼び出し機能 とは Microsoft Office ( Excel PowerPoint Word ) で作成したファイルに Microsoft Office のコマンドボタン作成機能を利用して OTRS の起動情報をコマンドボタンに設定することで OTRS の分析データを OTRS のメニューを開いてから選択せずに 表示することを可能にする

More information

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作 マイナンバー管理表 操作説明書 管理者用 2015 年 11 月 30 日 ( 初版 ) 概要 マイナンバー管理表 の動作環境は以下の通りです 対象 OS バージョン Windows7 Windows8 Windows8.1 Windows10 対象 Excel バージョン Excel2010 Excel2013 対象ファイル形式 Microsoft Excel マクロ有効ワークシート (.xlsm)

More information

テキストファイルの入出力1

テキストファイルの入出力1 テキストファイルの入出力 1 0. 今回の目的前回までは 2 回にわたって繰り返しについて学んできました 今回からテキストファイルの入出力について学ぶことにします 1. テキストファイルへの出力 1.1 テキストファイルについてテキストファイルとは コンピュータで扱うことが出来るファイルの中で最も基本的なファイルであり どの様な OS でもサポートされているファイル形式です Windows においては

More information

Microsoft PowerPoint - kakeibo-shiryo1.pptx

Microsoft PowerPoint - kakeibo-shiryo1.pptx 表計算ソフトを使って オリジナル家計簿を作ろう! < 基本編 > 午前の部 県立広島大学 経営情報学部経営情報学科 准教授小川仁士 2010/11/13 平成 22 年度県立広島大学公開講座 1-1 ガイダンス 使用するソフトウェア OS Microsoft Windows Vista 表計算ソフト Microsoft Office Excel 2007 オリジナル家計簿 ( 完成版 ) の基本仕様

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム VB 2005 2 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Dim) Windows

More information

Microsoft PowerPoint - vp演習課題

Microsoft PowerPoint - vp演習課題 演習課題 (1) 27 Nov., '18 katakan2hiragana.xlsm は, 下図のように 4~8 行目の B 列に漢字で表記した氏名,C 列にカタカナで表記したヨミガナ,D 列にひらがなで表記したよみがなを表示させることを意図している. このシートは, セル範囲 "B4:B8"( 図の赤枠内 ) に, キーボードから漢字で氏名を入力すると C 列にカタカナのヨミガナが自動的に表示されるようになっている.

More information

sinfI2005_VBA.doc

sinfI2005_VBA.doc sinfi2005_vba.doc MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 主なもの 型 型名 型宣言文字 長さ 内容 整数型 Integer % 2 バイト -32,768 32,767 長整数型 Long & 4 バイト -2,47,483,648 2,47,483,647 単精度浮動小数点数 Single 型!

More information

データベース1

データベース1 データベース操作プログラム Ⅱ VB9 プログラムの概要 オブジェクト型の変数宣言を行い コード上で データベースに接続し SQL を発行する 今回は オブジェクト型の変数宣言に依り データベースと接続する為のオブジェクト 及び 検索文を発行した際にデータを格納するオブジェクトを コード上で生成してデータベースに接続し 各レコードのフィールド情報を取得して 其れをコンボボックスの項目に追加する 此れに依り

More information

プログラミング演習

プログラミング演習 プログラミング入門 Ⅰ (No.11) Ⅰ11-1 [1] プログラムを修正する (1-1) 既にあるプログラムを開く 前回作ったプログラム prog1-10.xlsm を開いてみよう 既に保存してある VBA プログラムを開くには 以下のようにする ドキュメントから開く 1 Excel VBA のプログラムは Excel ファイルの中に入っているので Excel ファイルをダブルクリックする 2

More information

グラフィックス 目次

グラフィックス 目次 WPF チュートリアル WPF デザイナーに依るサイズ変更可能なアプリケーションの作成 Grid コンテナーコントロールと共に GridSplitter コントロールを使用する事に依り 実行時にユーザーに依ってサイズを変更出来るウィンドウレイアウトを作成出来る 例えば 領域に分割されて居る UI を持つアプリケーションで ユーザーが分割線をドラッグする事に依り より多くの内容を見る必要が有る領域を大きくする事が出来る

More information

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)... レコードセット (ADODB.Recordset) の使い方 作成日 : 2018/02/05 作成者 : 西村 更新履歴 更新日 更新概要 作業者 2018/02/05 新規作成 西村 1 目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst,

More information

情報基礎A

情報基礎A 情報基礎 A 第 10 週 プログラミング入門 マクロ基本文法 4 1 配列 FOR~NEXT 全眞嬉 東北大学情報科学研究科システム情報科学専攻情報システム評価学分野 http://www.dais.is.tohoku.ac.jp/~jinhee/jyoho-19.html 6 人分の合計を計算 2 socre(0) socre(1) socre(2) socre(3) socre(4) socre(5)

More information

モグラ叩きプログラム

モグラ叩きプログラム プログラミングの有用性 VB 2005 1 醒めよ!! 遣り度い事を遣るには 先ず 遣らなければ成らない事を遣る! 現に 其の事に気付いて 日々 其の 遣らなければ成らない事 に邁進して居る人間が 居る 寧ろ 其れを愉しんでさえ居る者も居る 然して 着実に 世の中が必要とする技 術を身に付けて行って居る者が居る 併し 何が 遣らなければ成らない事 なのか解らない場合は 現実に対応出来る技術力 を持ち

More information

このうち ツールバーが表示されていないときは メニューバーから [ 表示 (V)] [ ツールバー (T)] の [ 標準のボタン (S)] [ アドレスバー (A)] と [ ツールバーを固定する (B)] をクリックしてチェックを付けておくとよい また ツールバーはユーザ ( 利用者 ) が変更

このうち ツールバーが表示されていないときは メニューバーから [ 表示 (V)] [ ツールバー (T)] の [ 標準のボタン (S)] [ アドレスバー (A)] と [ ツールバーを固定する (B)] をクリックしてチェックを付けておくとよい また ツールバーはユーザ ( 利用者 ) が変更 ファイル操作 アプリケーションソフトウェアなどで作成したデータはディスクにファイルとして保存される そのファイルに関してコピーや削除などの基本的な操作について実習する また ファイルを整理するためのフォルダの作成などの実習をする (A) ファイル名 ファイル名はデータなどのファイルをディスクに保存しておくときに付ける名前である データファイルはどんどん増えていくので 何のデータであるのかわかりやすいファイル名を付けるようにする

More information

VB実用⑨ エクセル操作Ⅲ

VB実用⑨ エクセル操作Ⅲ VB でエクセル操作 Ⅲ VB 2005 9 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 ( De Facto Standard) で有ると謂う事が出来る 今回は エクセルのセルに設定された書式の取得を 重点的に学ぶ 前回迄に学んだエクセル操作の為のオブジェクトの生成と 既存のエクセルのデータが実際に入力されて居る範囲と値の取得を元に

More information

3D回転体プログラム

3D回転体プログラム 3D 回転体プログラム VB 2005 4 プログラムの概要 入力画面で マウスを用いて 側面より見た平面図を描きます マウスの左ボタンをクリックする事で連続線を描き 右ボタンをクリックすると新しい線を描く事が出来る 側面図が完成すると 回転の基本角度を設定して 確定ボタンをクリックすると 平面図を立体図に座標変換する 各軸の回転角度を設定して 表示ボタンをクリックすると 立体図が表示される 各軸の回転角度を変更して

More information

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = select * from Imports MySql.Data.MySqlClient Public Class Form1 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Label3.Text = "MySQL のデータ表示と更新のテストを行います メニューから行いたい処理を選択して実行してください

More information

データベースⅠ

データベースⅠ データベース操作プログラム Ⅰ VB 2005 8 プログラムの概要 データベースプログラムを手軽に作成する方法としては Access のフォーム機能を用いる事が 先ず考えられます ウィザードも充実しており 操作を覚えれば簡単に作成する事が出来ます 其れでは VB でデータベースプログラムを作るメリットは何んでしょうか 1 つは Access のフォーム機能に比べ コントロールが充実している事 より自由なデザインが可能です

More information

CubePDF ユーザーズマニュアル

CubePDF ユーザーズマニュアル CubePDF ユーザーズマニュアル 2018.11.22 第 13 版 1 1. PDF への変換手順 CubePDF は仮想プリンターとしてインストールされます そのため Web ブラウザや Microsoft Word, Excel, PowerPoint など印刷ボタンのあるアプリケーションであればどれでも 次の 3 ステップで PDF へ変換することができます 1. PDF 化したいものを適当なアプリケーションで表示し

More information