玄関へお回り下さい。
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 はそのままで使用頂けます。)
又、コメント等の注意書きは、よく読んでから使用願います。 


2004/12/15
2005/09/28
2012/06/08

VBレスキュー(花ちゃん)

VB.NET2003/VB2005/VB2008/VB2010
Excel 2007/Excel 2010/Excel VBA