• ベストアンサー

Excel2003のVBAで質問です。

Excel2003のVBAで質問です。 名前や住所などの単純なデータベース(一人分で一行の)があります。 各行の一番左に、小さなユーザーフォームをそれぞれ付けます。 消したい行のユーザーフォームを押すと、その行が消える。 というマクロを作りたいと思っています。 必ずしも消したい行のセルにカーソルがあるとは限らないので、どうやって押されたユーザーフォームがある行番号を抽出したらいいのかわかりません。 説明がわかりにくくてすみません。 まだ勉強が足らないのですが、教えていただけたら助かります。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

ユーザーフォームでないとダメでしょうか? ボタンの代わりにボタン風にセルに色をつけたりして(枠線もカラー指定できるので可能です)、そのセルが選択されると行を消すという内容なら可能です。 当該ワークシートのSelectionChangeイベントでTarget(rangeオブジェクト)からrowsプロパティからdeleteメソッドで行を確認すればその行をです。 複数セル選択や飛びセル選択(ctrlキーを押しての選択)も対応しておけば完璧です。 いかがでしょうか? フォームの位置は図形と同じピクセルで確認できますが、これを行数と結びつけるためには、各行の行高さを取得して計算する必要があり非常に複雑です。 セル選択を利用する方がVBAの使い方としてはベストです。

lemonmiffy
質問者

お礼

ありがとうございました。 今回はこちらの回答を参考に考えてみます。 他の皆様、素早い回答助かりました。

その他の回答 (2)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

「各行の一番左に、小さなユーザーフォームをそれぞれ付けて、消したい行のユーザーフォームを押すと」 じゃなくて、 「消したい行の一番左のセルを、クリック すると」 or 「消したい行の一番左のセルを、ダブルクリック すると」 or 「消したい行の一番左のセルを、右クリック すると」 にしてみてはいかがですか?

lemonmiffy
質問者

お礼

ありがとうございました。 目からうろこです。

  • aloha8861
  • ベストアンサー率10% (7/70)
回答No.1

フォームは1個でいいんじゃないの? ダブルクリックなどでフォームを出現させて そのときのアクティブセルに対するRowを取得してDeleteすればいいと思うけど・・ Sub Macro1() Dim r As Long r = ActiveCell.Row Rows(r).Delete Shift:=xlUp End Sub 複数削除する場合はチェックマークをつけて For Eachなどで チェックマークがあったら削除と ループをかければいいと思います

lemonmiffy
質問者

お礼

ありがとうございました。 とても参考になりました。

関連するQ&A

  • VBAで実行押すまでExcel非表示にしたい

    VBAでユーザフォームを作成しました。 Excelを立ち上げるとExcelシートの前にユーザフォームが出る状態なのですが、 ユーザフォームの実行ボタンを押すまでは非表示にしたいのですが、どのような記述をしたらよいでしょうか? マクロ的に実行ボタンを押すと結果が、Excel上に反映されるので、実行ボタンを押すまで非表示であれば大丈夫です どうか教えてください。

  • 〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転

    〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転記する方法 EXCEL2003でデータが480行/65列ある第1のシート(データベース的)があります。 第1のシートの列にデータが入力されている場合のみ、第2シートの指定されたセルに検索した列の 表題と検索したデータを結合して転記したいのですが良い方法が分りません。 その際、各行毎に検索し空白列は第2のシ-トに転記せず左詰めにして転記したいのですが・・・・ 初心者に合せたご教示をお願いします。 また、Excel VBAの短期マスター法が御座いましたら合せて教示願います。 以上、宜しくお願い致します。

  • Excel2003に関しての質問です。

    Excel2003に関しての質問です。 A列の各セルごとに数字や文字など、さまざまな文字列が存在したBookにて、 『数字が8個連なった行のみを抽出し、ほかの行は削除する』ことはできるでしょうか? たとえば添付のようなものです。 添付画像は2007ですが、会社のは2003なので… この場合は、2.3行目や5.6行目などを抽出し、ほかのデータは削除したいのです。 また、この抽出作業をマクロ記憶しておき、手間を省きたいと思っています。 面倒なのが、データの個数が日々増減しているので、 Aの○○行を毎回消せば大丈夫!というものでもないので、困っています。 どなたかご教示ください…

  • (Excel VBA)困っています・・・orz

    エクセルを使うとある業務でマクロを組み、最適化を図ろうと試みているのですが 気がつけば高度な領域に突入していまして、僕みたいなレベルじゃ全然???な状況になってしまいました。 まず A列の1行目から任意の行に(10行までしかなかったり、1000行まであったりとランダムにあるとする)、任意の文字列(ABCなど)があるとします。 それからオートフィルタを使い、A列からある任意の文字列(ABCなど)を検索条件にしてデータを抽出します。 抽出されたデータベースのA列には検索条件にある「ABC」が任意の行まであり、その抽出されたデーターベースのD列に今度は「XYZ」とという文字列を 抽出された分の最終行まで割り振る・・・ つまりA列《ABC》で検索され抽出されたデータのD列には《XYZ》が自動に入力される もし、検索条件(ABC)で抽出されたデータが「0」件だった場合は、D列には何もせず、次の検索条件に進む・・・ というものをマクロで組みたいのですがどうやったらよいのでしょうか?? 何卒、ご教授お願い致します。

  • Excel2000とExcel2002のVBAの違いについて。

     以前、このカテゴリーにて、Excel2000におけるVBAのマクロを教えてもらったのですが、そのマクロ入力済みエクセルファイルをExcel2002へ移植したら、上手くVBAが働きません。  具体的にいうと、シート1に入力したデータの履歴を、シート2にて保存していくマクロなのですが、Excel2002では履歴のシートに上書きしていくことがあります。(たまに発生する)  Excel2000ではキチンと履歴のセルが全て残ります。  どなたか、この不具合を認識しておられる方。もしくは、対策をご存知の方がいらっしゃいましたら、教えてください。  

  • Excel2007で、行の自動色分けについての質問です。

    Excel2007で、行の自動色分けについての質問です。 B1とB2をセルの結合で一行にします。その左A1、A2はそのままにしておきます。これをワンセットとして考えます。つまり一列目は二行、2列目は1行になっているものを一単位として考えるという意味合い。 MOD関数で一行単位で色分けできますが、この一単位を一行と考えて、色分けしようとしても1列目の余りが違うので、一列目は色つきのセル(行)とそうでないセル(行)に別れてしまいますし・・・ なにかいい方法があればお願いします。

  • EXCEL2000のVBAで*.dbf形式データからデータを抽出するには(ODBCとの連携について)

    こんにちは 「データベースなら任せて!!」 という方におたずねします。 最近、EXCEL2000のVBA講習をやることになりました。 VBAの基本的な説明はできるのですが、困ったことに外部データとのやり取りについては うまく説明できません。 いろいろ調べてますが、よくわかりません。 やりたいことは、 複数のデータベースファイル(*.dbf)があります、 それをEXCEL上でフォームパネルを用意しデータを抽出・検索などできるように 制御したいのですが、 まず、 疑問(1)ODBCやSQLをVBAを使って制御しデータベースファイル(*.dbf)を扱うには。 疑問(2)データベースファイル(*.dbf)を扱えたとしてその後、どのように抽出や検索をさせるのか。 おたすけください。

  • 【Excel VBA】並べ替え

    Excel2003を使用しています。 あるテキストファイルから必要なデータを抽出し、予めExcelで作成してある表に、抽出したデータをコピーするという作業をマクロで処理しています。 Excelの表は、A列→4桁の番号(数値)、C列→文字列、D列→数値で、A列の番号順(昇順)に表示されています。 抽出されたデータは、2行目以下に表示されるので、まず、A2セルに『0000』、C2セルとD2セルにそれぞれ該当のデータがコピーされ、以下、順番にコピーされます。このA2セル『0000』の行データをコピーされたデータの一番最後にもっていき、下記のように上方向へシフトさせたいのですが、このようなことはコードを追加することで可能でしょうか?    A列  C列  D列 2  0000  あ  100 3  1200  い  200 4  1500  う  300        ↓ 2  1200  い  200 3  1500  う  300 4  0000  あ  100 データ元のテキストファイルは、会社で使用しているシステムの機能を使って、テキストファイルにしたものです。このデータが昇順で表示されているので、こちらを並べ替えてマクロを実行すればいいかと思ったのですが、数値と文字列が混在しているので、Excelの表にコピーした後(数値と文字列の混在がなくなった後)に、上記のように並び替えることができればと思い、質問させていただきました。 よろしくお願いします。

  • EXCEL2000VBAのアプリケーションエラーについて

    EXCEL2000VBAにてユーザーフォームを使ったマクロを作ったのですが、マクロを実行しユーザーフォームからエクセルのシートにデーターを移行する際に、アプリケーションエラーというエラーがでます。 他のイベントプロシージャの動作ではこのエラーは発生しません。 EXCEL2003でも発生しました。 はっきり分かりませんが、必ずアプリケーションエラーが生じるのではなく、1,2度保存や終了を繰り返した後に発生するようです。 アプリケーションエラーどういった場合に発生するのでしょうか? また、なぜこのようなことが発生するのでしょうか? 初心者ですのでよろしくお願いいたします。

  • Excel2010 VBA

    Excel2010でVBAのフォームを使って「コマンドボタン」をクリックしたときにフォーム入力した内容をデータ(リスト)に転記(反映)させたいのですが どのようにしたらいいでしょうか? コマンドボタンの作り方は分りましたがそのマクロを実行する内容(コード)の作り方がいまいちわかません ちなみにデータ(リスト)は上から順番に空白の列を埋められていけばいいです よろしくお願いします

専門家に質問してみよう