掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excelのレコードクリア (ID:115623)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
多少理解できました。 文句ばっかり言って申し訳ないですが、このあたりの理解を深めて頂かないと 何がやりたいのかも伝わりませんので頑張って下さい。 まず、ちょっと話題が外れますが、『レコード』という言葉の使い方が大雑把に 感じますので少しそちらの話題で書き込みします。この掲示板で『レコード』と いう表現を使った場合、データベースのグループ化された入れ物の事だと思って 下さい。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdobjrecord.asp >ListViewにあるレコードがExcelに書き込まれます。 とか >一度Excelのレコードを削除してから といった表現は、多少プログラムに慣れている者にとっては非常に分かり辛いです。 ListView の場合は Item と表現します。Excel の場合はセル(範囲: Range)です。 >ListViewにあるレコードがExcelに書き込まれます。 をこちらが必要とする情報を含めて正しく書くなら 『ListView に表示されている文字列を DAO.Recordset.Fields(i) に設定し、 .Update コマンドを実行することで Excel のシート上に書き込みます。』 でしょうか?面倒に思うかもしれませんが、初心者の方の中には .Update コマンド を忘れてるだけの人もいます。そういった間違いをなくすため、自分のやった ことは"必要な事をもらさない程度に詳しく"、ヘルプなどで使われている"他人が 理解できる表現"で書くように心がけて下さい。 以上の内容でレコードと呼べる存在は DAO.Recordset の各行のみです。 Recordset は本来データベースを操作する為のもので、データベースを相手に してこそレコードの意味が生き、ちゃんとした操作ができます。 Excel はデータベースではありません。レコードという入れ物の、セルアドレスに 対応した場所にセルのデータを入れているだけであって、レコードと Excel の セルは全く別の存在だということを意識しておいて下さい。 >ボタンは1つです。 >そのボタンが押された時にListViewにあるレコードがExcelに書き込まれます。 >起動時(Form_Load)にはそのExcelからListViewに読み込まれます。 >ListViewの内容は変更が可能になっています。 >のでボタンが押された時には同じExcelに書き込みをするので一度Excelのレコードを削除してから >書き込みをしようと考えています。 まず、DAO.Recordset のレコードは削除できないらしい…という事は理解して いただけたと思います。ここで一般には2つの方法を思いつきます。 1、DAO.Recordset は無視してシートのデータを直接消してしまう。(きのこさんの考えた方法です) 2、DAO.Recordset.Fields(i) = "" で上書き保存する。 上書きの処理を載せていただいておりませんので分かりませんが、どうせデータを 書き込むなら、一般には削除するだけ無駄となります。2、の方法でも問題ない ケースも有り得ます。不都合があるならその理由を書いていただかないと、ボクには 伝わりません。ですから謎です。 >このソースでしたら両方使わないといけなくないですか? 上にあげた方法なら DAO のみで出来ますし、Worksheet オブジェクトを使うなら Variant 型の配列でデータを一括して読み込む方法もあります。 Dim Datax() As Variant Datax = xlSheet.Range("$A$1").Resize(20 + 1 , 11 + 1).Value 配列の Index が1つずれるので注意が必要ですが、DAO のみか Worksheet オブジェクト のみでも実現可能です。特に問題ないのであれば、使う技術は共通化を図ったほうが 理解しやすいですし、ソースもすっきりします。不必要なオブジェクトも生成しなくて よくなります。ですから複数の技術を使った今回のコードはボクにとって謎です。 >6行目からの削除でいいんです。 >12行目まで削除ではなく、レコードすべてを削除したいんです。 何の説明も無く 6 行目から削除して >とやると、最後のレコードしか消えません。 と書いてあったからレコードカウントが実は 6 で 6 行目から削除しているので 最後のレコードが消え、そこから余分な 6 カウントの処理が走りますから 12 行目まで削除されていると予想しました。そこをチェックして欲しかったんですが? とりあえず違うみたいなのでいいですが、Delete メソッドを複数回実行するのは 処理としていまいちです。Excel シートの Range 範囲を計算して1処理にした 方が良いでしょう。何か理由があって嫌な場合でも、少なくとも For 文は 6 回 余分に動いてますから、そこは直した方が良いでしょう。 >とやると、最後のレコードしか消えません。 Worksheet オブジェクトを使った Delete は DAO とは関係ないですし、削除が 6 行からで良いならこのコードでも処理としてはお望みの結果を実現していると 思います。Delete した時のセルの動きはどうなってますか?『上に詰める』…は Excel で設定できましたかねぇ?(忘れました)デフォルトは『横に詰める』だった と思うんですが…『上に詰める』だったら当然ながら処理はおかしくなります。 でも最後のレコードしか消えないと言うのであれば、別の処理が関係していると 思われます。現象が再現できるコードを調べ直して下さい。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.