Excel ワンポイントテクニック集(5個) (SNo.067) 1.Excelのシート名を取得する 2.罫線の描画 3.罫線の描画(自作関数を使って) 4.ExcelのSpeech.Speak メソッドを使っての音声読み上げ 5.Excel の GetPhonetic メソッドを使ってのふりがなを取得 サンプル投稿用掲示板のワンポイントテクニック集 |
|
使用コントロール | ご使用環境に合わせて準備して下さい |
その他条件 | WindowsVista VB2010(VS2010 Pro) Framework 4 / ターゲットCPU:X86 Excel 2007/Excel
2010 [Option Compare Text] [Option Explicit On] [Option Infer On] [Option Strict On]で設定 プロジェクト→参照の追加→COM→Microsoft Excel 12.0(14.0) ObjectLibrary を参照設定しておいてください。 Excel の起動・終了のコードは、Excel の起動・終了に関する設定 か Excel の起動・終了に関する設定(VB.NET) ( No.1 ) を使用して下さい。 |
1.Excelのシート名を取得する
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 'テストする適当な、Excel ファイルを準備しておいて下さい。 Call ExcelOpen(System.IO.Path.GetFullPath("..\..\..\data\test.xls"), "Sheet1") '=================================================================================================== 'シート名の取得 Dim xlElement As Excel.Worksheet = Nothing For Each xlElement In xlSheets Debug.Print(xlElement.Name) MRComObject(xlElement) '都度デクリメントしておかないと解放されない。 Next '=================================================================================================== '動作確認の為、2秒間表示しておく System.Threading.Thread.Sleep(2000) 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub Sheet1 とかに読み書きするときは、ちゃんと変数に受けて、使った変数をReleaseComObjectしている人が、上記のようにシート名を取得する時には、そのような使い方をせず、プロセスが終了しない事に悩んでいるケースがあるようです。 他人のコード(マクロ・VB6.0のコード)を丸写しするのではなく、キーボードから1文字づつ入力するようにして少しでも理解を深めて下さい。 |
|
2.罫線の描画 Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '=================================================================================================== 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秒間表示しておく System.Threading.Thread.Sleep(3000) 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub |
|
3.罫線の描画(自作関数を使って) Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '=================================================================================================== '自作関数を使って罫線を描画 '開始点、終了点、線種、線の太さ、位置(定数値) を指定 '位置が 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) '2重線で下の上側に引く Call SetLine(8, 2, 8, 8, _ Excel.XlLineStyle.xlDouble, _ Excel.XlBorderWeight.xlThick, _ Excel.XlBordersIndex.xlEdgeTop) '=================================================================================================== '動作確認の為、3秒間表示しておく System.Threading.Thread.Sleep(3000) 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行 Call ExcelClose(IO.Path.GetFullPath(".\Test.xlsx"), False) 'False の場合保存しないで終了 'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub '罫線を引く自作関数 '開始点、終了点、線種、線の太さ、位置(定数値) を指定 '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) & ":" & R1ToA1(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(DirectCast(i, Excel.XlBordersIndex)) '罫線の表示位置を設定 xlBorder.LineStyle = ls '罫線の線種を設定 xlBorder.Weight = lw '罫線の太さを設定 MRComObject(xlBorder) Next i Else '個別に罫線を引く xlBorder = xlBorders(DirectCast(lps, Excel.XlBordersIndex)) '罫線の表示位置を設定 xlBorder.LineStyle = ls '罫線の線種を設定 xlBorder.Weight = lw '罫線の太さを設定 MRComObject(xlBorder) End If MRComObject(xlBorders) MRComObject(xlRange) End Sub Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer) As String 'R1C1形式のアドレスをA1形式に変換する関数 Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim A1 As String = "" If c1 < 1 Or c1 > 16384 Then 'Excel のバージョンに合せて下さい。 MessageBox.Show("指定が間違っています。") A1 = "A1" Return A1 End If If c1 <= 26 Then A1 = s.Chars(c1 - 1) & CStr(r1) ElseIf c1 <= 702 Then A1 = s.Chars(((c1 - 1) \ 26) - 1) & s.Chars(((c1 - 1) Mod 26)) & CStr(r1) Else A1 = s.Chars(((c1 - 703) \ 676)) & s.Chars((((c1 - 703) \ 26) Mod 26)) & _ s.Chars(((c1 - 1) Mod 26)) & CStr(r1) End If Return A1 End Function |
|
4.ExcelのSpeech.Speak メソッドを使っての音声読み上げ Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click '=================================================================================================== 'ExcelのSpeech.Speak で読み上げ Dim xlApp As New Microsoft.Office.Interop.Excel.Application Dim xlSpeech As Microsoft.Office.Interop.Excel.Speech xlSpeech = xlApp.Speech 'コントロールパネルの音声認識の音声の選択で LH Kenji か LH Naoko を '選んでおいてください。 Excel2002 のCD 内に入っています。 '下記コードを実行して入っていない場合はウィザードが表示されます。 xlSpeech.Speak(TextBox1.Text) 'xlSpeech 及び xlApp を解放 xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSpeech) xlSpeech = Nothing System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) xlApp = Nothing '=================================================================================================== 'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub |
|
5.Excel の GetPhonetic メソッドを使ってのふりがなを取得 Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click '=================================================================================================== 'Excel の GetPhonetic メソッドを使ってのふりがなを取得 Dim xlApp As New Excel.Application Dim myName As String Dim furigana As String '文字列中の空白を除去(Microsoft.VisualBasic.Strings. を省略しております) myName = StrConv("山田 花子", VbStrConv.Wide).Replace(" ", "") 'ExcelのGetPhonetic関数を使ってふりがなを取得 furigana = xlApp.GetPhonetic(myName) '取得したふりがなをひらがなに変換(お好みで) Label2.Text = "山田 花子 :" & StrConv(furigana, VbStrConv.Hiragana) 'xlApp を解放 xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) xlApp = Nothing '=================================================================================================== 'Excel.EXE がタスクマネージャーに残っていないか調査(実使用時は必要なし) Call ProcessCheck() '正常に動作する事が確認できたらこの行は、コメントにして下さい。 End Sub |
|
これらのサンプルをご利用になる場合は、必要により Excel の起動・終了処理を追加して下さい。 (No.4 及び No.5 はそのままで使用頂けます。) 又、コメント等の注意書きは、よく読んでから使用願います。 |