• ベストアンサー

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