10.エクセルファイル(.xls)をテキストボックスに表示及び編集保存する |
1.エクセルファイル(.xls)をテキストボックスに表示 2.エクセルファイル(.xls)の指定行又は指定のセルデータをテキストボックスに表示 3.エクセルファイル(.xls)の指定行又は指定のセルデータを書き換え保存 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:Microsoft ActiveX Data Objects 2.8 Library 参照設定方法参照 使用 API: その他 : : |
1.エクセルファイル(.xls)をテキストボックスに表示 |
基本的な設定や使用データは、4.xls (エクセル)ファイルを ADO を使って、 MSHFlexGrid へ表示 と同様です。 別途、Text1 のプロパティの設定で、MultiLine = True ScrollBars = vbBoth FontName = "MS ゴシック" FontSize = 12 等に設定しておいて下さい。(以下のサンプルも同様です。) Private Sub Command1_Click() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim strSQL As String Dim FolderName As String Dim DataFile As String Dim SheetNeme As String Dim myData As String Dim i As Long Dim myWork As String FolderName = App.Path DataFile = FolderName & "\dbtest.xls" SheetNeme = "dbtest" CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataFile & _ ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2""" CN.Open strSQL = "Select * From [" & SheetNeme & "$]" RS.Open strSQL, CN, adOpenKeyset, adLockOptimistic '末尾レコードまでのデータを読込 Do Until RS.EOF With RS For i = 0 To .Fields.Count - 1 '各列のデータを取得 Select Case i Case 0 myWork = fPadLeft(.Fields(i), 4, " ") & " " Case 1, 3 myWork = fStrCut(.Fields(i), 11) Case 2 myWork = fStrCut(.Fields(i), 6) Case 4 myWork = fStrCut(.Fields(i), 10) Case 5, 6 myWork = fPadLeft(Format$(.Fields(i), "#,###"), 8, " ") Case 7 myWork = fPadLeft(Format$(.Fields(i), "###.0"), 6, " ") & vbCrLf End Select myData = myData & myWork Next i .MoveNext '次のレコードに移動 End With Loop '取得したデータをテキストボックスに表示 Text1.Text = myData RS.Close CN.Close Set RS = Nothing Set CN = Nothing End Sub Private Function fPadLeft(ByVal myData As String, ByVal CutLen As Long, ByVal CutStr As String) As String '文字を右寄せし、指定した文字列の文字数になるまで左側に指定した文字(0 や " " 等)を埋め込みます。 Dim tmp As String tmp = Right$(String$(CutLen, CutStr) & myData, CutLen) fPadLeft = tmp End Function Private Function fStrCut(ByRef CutTxt As String, ByVal CutLen As Long) As String '半角・全角の混在する文字列を半角換算文字長で取り出し Dim myLen As Long, SysCodeTxt As String SysCodeTxt = StrConv(CutTxt, vbFromUnicode) '文字列を変換 myLen = LenB(SysCodeTxt) '半角換算のバイト数を取得 If myLen <= CutLen Then '指定の長さより短い場合 fStrCut = CutTxt & Space$(CutLen - myLen) '足りない分はスペースで Else '文字列の方が長い場合、指定のバイトでカットする fStrCut = StrConv(LeftB$(SysCodeTxt, CutLen), vbUnicode) If InStr(fStrCut, vbNullChar) > 0 Then '漢字1バイト目で分断された場合の処理 fStrCut = Left$(fStrCut, InStr(fStrCut, vbNullChar) - 1) & " " End If End If End Function 上記実行結果 べた書きのままなら、もう少しコードは簡単になるのですが、あまりにも味気ないので、MSHFlexGrid の印刷設定のところで使っていた自作の文字列関数を使ってレイアウトしてみました。 これを利用して、エクセルファイルに保存してあるデータの必要な部分をテキストボックス上に書きだしする等すれば、結構使用範囲も広がるかと思います。 |
2.エクセルファイル(.xls)の指定行又は指定のセルデータをテキストボックスに表示 |
基本的な設定等は、1.のサンプルと同様です。 Private Sub Command2_Click() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim strSQL As String Dim FolderName As String Dim DataFile As String Dim SheetNeme As String FolderName = App.Path 'データのあるフォルダーを取得 DataFile = FolderName & "\dbtest.xls" 'データファイル名を取得(通常で) SheetNeme = "dbtest" 'Excelファイルのシート名 CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataFile & _ ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2""" CN.Open strSQL = "Select * From [" & SheetNeme & "$]" RS.Open strSQL, CN, adOpenKeyset, adLockOptimistic With RS .MoveFirst '最初のレコードに移動 .Move CLng(3) '3行目に移動 Text1.Text = .Fields(1) ' 1 列を取得 End With RS.Close CN.Close Set RS = Nothing Set CN = Nothing End Sub 上記では、単純に4行目の2列目(実)データを取得しておりますが、どのようなデータ範囲でも取得する事が可能です。 これを利用して指定行のデータを取得するとか色々な事に使えるかと思います。 |
3.エクセルファイル(.xls)の指定行又は指定のセルデータを書き換え保存 |
基本的な設定等は、1.のサンプルと同様です。 Private Sub Command3_Click() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim strSQL As String Dim FolderName As String Dim DataFile As String Dim SheetNeme As String FolderName = App.Path 'データのあるフォルダーを取得 DataFile = FolderName & "\dbtest.xls" 'データファイル名を取得(通常で) SheetNeme = "dbtest" 'Excelファイルのシート名 'データベースに接続するための情報を設定する CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataFile & _ ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2""" CN.Open 'コネクションをオープン 'Recordsetオブジェクトのオープン strSQL = "Select * From [" & SheetNeme & "$]" RS.Open strSQL, CN, adOpenKeyset, adLockOptimistic Do Until RS.EOF With RS '氏名="木内 美子" の場合 "井上 美子" に書き換える If .Fields(1) = "木内 美子" Then .Fields(1) = "井上 美子" .Update End If .MoveNext '次のレコードに移動 End With Loop RS.Close CN.Close Set RS = Nothing Set CN = Nothing End Sub 上記では、氏名="木内 美子" の場合 "井上 美子" に書き換えて保存しております。 エクセルがインストールされていない環境でも単純な編集ならこれででもできますし、今まで VBA で処理していた事が VB6.0 から直接できたり、アイデア次第では結構使えるのではないでしょうか。 |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
Excel を使用せずに Excel ファイルを編集する エクセルファイル Excel ファイル / テキストボックス TextBox xls ファイル 編集 表示 保存 Excel ファイルをテキストボックスに表示 Excel ファイルを TextBox に表示 |