VBでExcelファイルの行削除方法

このQ&Aのポイント
  • VBでExcelファイルの行を削除する方法について教えてください。
  • 現在、VBを使用してExcelファイルのデータベース操作を行っていますが、DELETE文で行を削除する際にエラーが発生しています。
  • DELETE文で「ISAMではリンクテーブル内のデータを削除することは出来ません」というエラーが表示され、行の削除ができない状況です。解決方法を教えてください。
回答を見る
  • ベストアンサー

VB でExcelファイルの行を削除したのですが?

VB歴はまだ浅く素人レベルではございますがよろしくお願いします。ご質問内容も不鮮明な点もあるかもしれませんがご指導お願い致します。 SQL Server & VB2008EEを使用しております。 身近なExcelファイルをデータベースもどきで使用できないかと思いまして、今挑戦しています。 現在、読み込み、ソート、UPDATEなどのクエリも順調に動作しました。 しかし、DELETEで 「ISAMではリンクテーブル内のデータを削除することは出来ません」 というエラーが出てしまい困っております。 UPDATE [会社$] SET 氏名='' などで空白には出来るのですが行が残ります。行削除が出来ると理想なのですが.. よろしくお願いいたします。 【参考ソースコード】************************************* Dim row As Integer Dim name As String 'データグリッドビューの行番号を取得する row = DataGridView1.CurrentRow.Index '行番号から社員名を取得する name = DataGridView1.Item(0, row).Value.ToString() 'コネクションを指定する cn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.jet.OLEDB.4.0; " & _ "Data Source=C:\DATA\TEST.xls; " & _ "Extended Properties=Excel 8.0") 'Excelブックの接続 cn.Open() com = New OleDb.OleDbCommand("DELETE FROM [会社$] WHERE 氏名='" & name & "'", cn) com.ExecuteNonQuery() 'コネクションを閉じる cn.Close() '正常終了のメッセージ MsgBox("1件の社員データを削除しました") 'データグリッドビューの再表示 DataLode() *****************************************************

  • MIKAHA
  • お礼率90% (107/118)

質問者が選んだベストアンサー

  • ベストアンサー
  • baq777
  • ベストアンサー率28% (20/71)
回答No.1

URL先のサポートの話では、 ExcelでOLEDBでレコードの削除は出来ない、とあります。 的外れですかね?

参考URL:
http://support.microsoft.com/kb/316934/ja
MIKAHA
質問者

お礼

ご回答を頂、ありがとうございます。 私も色々調べてみたのですが、削除項目ではヒットしませんでした。 参考URLのご紹介をいただき、ありがとうございます。 とてもわかりやすいサイトでした。 おっしゃるとうり出来ないのかもしれませんね。 何か方法があるかもう一度調査してみます。

関連するQ&A

  • VB DataGridView 行削除

    Visualbasic 2010 を利用してWindowsFormアプリケーションを開発しております。 データベースはORACLE11を利用しております。 VB側よりOracleDataAdapterを利用してDatatableにORACLEのSELECT結果を格納しています。 DataGridViewには上記のDataTableをDataSourceとして割り当てております。 このDataGridViewに並び替え機能を組み込んでおります。 ※DataViewのSortを利用して並び替えを実現しております。 この後にDataGridViewの行削除を行うと以下の例外が発生します。 一意制約(XXX.PKY_テストデータ)に反しています Oracle.DataAccess.Client.OracleException これはDataTableをSortしたためOracleDataAdapterと一致しなくなったことが原因ではないかと推測しております。 DataGridViewの並び替えを行っても正常に行削除を行いDataTableにも反映する方法が分る方がいらっしゃいましたらご教授頂けないでしょうか。 VBソース抜粋 ・データ抽出 '/ SQLをOracleで実行した結果をデータアダプタに格納 Dadp5 = New OracleDataAdapter("SELECT * from テストデータ", CONFIG.Database) Dadp5.Fill(dt_test) Me.DataGridView_TEST.DataSource = dt_test ・並び替え(降順) Dim dv = New DataView(dt_test) dv.Sort = "テストコード DESC" dt_test = dv.ToTable Me.H_DataGridView_test.DataSource = dt_test ・行削除 Dim scBuilder As New OracleCommandBuilder(Dadp5) '/ データグリッドビューの編集内容をデータベースへ反映 '/ 生成されたSQLを実行する Dadp5.Update(dt_test) ※ここで例外が発生致します。 お手数おかけ致しますが宜しくお願い致します。 以上です。

  • データリーダーからのデータ読み出し方法(VB)

    お世話になってます。 先日データコネクションを質問しその後うまくいっているように見えたのですが、表記でまた躓いています。 コードは Dim cn As New OleDb.OleDbConnection Dim cmd As New OleDb.OleDbCommand Dim dr As OleDb.OleDbDataReader 'コマンドのコネクション設定 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\DB\Report.mdb" 'コネクションを開く cn.Open() 'コマンドの定義 cmd.CommandText = "SELECT password FROM T_Staff WHERE Staff_ID = '" & txtUserID.Text & "'" 'データリーダーからのデータの読み出し dr = cmd.ExecuteReader() ************************************************** 最後の行で ExecuteReader: Connection プロパティは初期化されていません。 と言うエラーメッセージが出ます。 少し検索してみましたがよくわかりません。 これって結局接続できていないのでしょうか? 初期化されていなというのはどういう状態のことなんでしょう? よろしくお願いいたします。

  • データグリッドビューの行にチェックボックス

    VB2010で、データグリッドビューの行にチェックボックスを入れたいのです。 DataGridViewCheckBoxCellでできるかなと思っているのですが、 下記のコードではチェックボックス行が追加されません。 どう修正すればよいでしょうか。 ご存知の方教えてください。よろしくお願いします。 Dim CB As New DataGridViewCheckBoxCell Me.DataGridView1.Rows.Add(CB)

  • VBの Datagridview 行削除コード

    VB2010でコーディングしています。(VB初心者です。) ネットでDatagridview 行削除コードを調べてボタンに実装したんですが、一回目は削除できるんですが 二回目が削除できません。(削除後にデータを再構築できていない?) ご教授お願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim DT As New DataTable DT = DirectCast(Me.DGV.DataSource, DataTable) Dim 削除 As Boolean = False '選択行の取得 For Each r As DataGridViewRow In Me.DGV.SelectedRows      Dim ID As String = DT.Rows(r.Index).Item("ID").ToString      (その他の処理) 'リスト上削除 Me.DGV.Rows.RemoveAt(r.Index) Next r End Sub

  • VB 2008のSQL文でスペースを削除したい

    開発環境 VB2008 PC管理台帳.使用者氏名のスペースを削除して表示させたいのですが、デバッグすると下記のようなエラーがでます。どなたかアドバイスおねがいします。 「String "PC管理台帳.使用者氏名+" から型 'Double' への変換は無効です。」 ちなみにPC管理台帳.使用者氏名には空行があります。 -------------------------------------------------- Private Sub Btn検索_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn検索.Click Dim cn As New OleDb.OleDbConnection Dim dView As New DataView cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source = C;\管理台帳データベース.mdb" dadp = New OleDb.OleDbDataAdapter("SELECT " + Replace(+"PC管理台帳.使用者氏名+", " ", "") + ",PC管理台帳.新PC名,PC管理台帳.部署名,PC管理台帳.マシンベンダ名,PC管理台帳.マシンモデル FROM PC管理台帳 WHERE 新PC名='" + TextBox1.Text + "'", cn) dadp.Fill(dset, "PC管理台帳") 'データベースの表示 DataGridView1.DataSource = dset.Tables("PC管理台帳") End Sub --------------------------------------------------

  • アクセスDbのテーブル項目属性の取得(VB2005)

    ご協力いただき、table名 field名までは取得できたのですが、種々プロパティを試していますが、fieldの「桁数」「タイプ」がどうしても取得できません。DAoでは .size .type だったのですが。 この部分接続など略(800文字とのことなので) Cn.Open() Dim S As String Dim tbl As DataTable Dim myRows() As DataRow tbl = Cn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) Dim I As Short myRows = tbl.Select() 'S = myRows(1).ItemArray(2) Dim ds As New DataSet For Each row As DataRow In myRows 'MsgBox(row.ItemArray(2)) Dim cmd As New OleDb.OleDbCommand("SELECT * From " + row.ItemArray(2), Cn) Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader Dim da As New OleDb.OleDbDataAdapter("SELECT * From " + row.ItemArray(2), Cn) da.Fill(ds, row.ItemArray(2)) For I = 0 To dr.FieldCount - 1 S = dr.GetName(I) 'Field name S = ds.Tables(0).Columns(I).ColumnName          この2行は同じものがとれます。 tables columns gettypeなど どれもうまく取得できませんでした。 よろしくご教示ください。

  • 空白行の削除マクロについてご教示ください

    空白行の削除に、下記マクロを活用させていただいていますが、 見た目空白なのに削除されない行が時々残ってしまいます。 削除されなかったセルを「Deleteキー」で空白にするとマクロが 実行され、きちんと削除されます。 こういった、スペースか何かが入っていても、見た目空白なら 削除するようにはできないでしょうか。 どなたかよろしくお願いいたします。 Sub 削除() Dim c As Range Dim 開始行 As Long Dim 最終行 As Long 開始行 = 5 最終行 = Range("a5000").End(xlUp).Row For Each c In Range("a" & 開始行 & ":a" & 最終行) If c.Value = "" Then Rows(c.Row).Delete End If Next End Sub

  • vb.net datagridviewの列位置変更

    vb.net datagridviewの列位置を変更する方法を教えて下さい。 データグリッドビューにDataTable(DBから抽出したデータ)を割り当てました。 DataGridView1.DataSource = DataTable1 ここに、カラムを追加しました Dim column As New DataGridViewButtonColumn() '列の名前を設定 column.Name = "Button" '全てのボタンに"詳細閲覧"と表示する column.UseColumnTextForButtonValue = True column.Text = "詳細閲覧" 'DataGridViewに追加する DataGridView1.Columns.Add(column) この追加したカラムを一番左に表示したいです。

  • Excel 行削除ループさせたい

    あるデータシートのB列に変数と同じものがあったらその行を削除したいです。 ところが下のようなFor文だと、行を削除した後にFor文の行番号が動いてしまうので、削除できないデータが残ってしまいます。 (1,2行目が削除対象行の場合、1行目を削除した時点で2行目が1行目のところにくるのでFor文から外れる) ループ文をネストさせたりいろいろやってみましたが 上手くいきません。 なにか良い方法は無いでしょうか? ’ラスト行はデータが入っている最後の行 For Each Myrange In シート名.Range("b6:b" & ラスト行) If Myrange.Value = 変数 Then nowrow = Myrange.Row シート名.Rows(nowrow).Delete End If Next

  • 条件によって行削除を繰り返し処理する

    一行目がフィールド名で、Z列まで値の入っているデータがあります。 x列が""の場合はその行を削除する処理を最終行まで続けたいのですが、 ""行が2行以上続いているとFor~によって行を飛ばしてしまいます。 何か良い方法はありませんでしょうか? Sub 削除() Dim last As Long Dim row As Long last = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).row For row = 2 To last If Cells(row, 24).Value <> "" Then Rows(Format(row) + ":" + Format(row)).EntireRow.Deletesift:=xlUp End If Next End Sub