- ベストアンサー
Excel2003のVBAで質問です。
Excel2003のVBAで質問です。 名前や住所などの単純なデータベース(一人分で一行の)があります。 各行の一番左に、小さなユーザーフォームをそれぞれ付けます。 消したい行のユーザーフォームを押すと、その行が消える。 というマクロを作りたいと思っています。 必ずしも消したい行のセルにカーソルがあるとは限らないので、どうやって押されたユーザーフォームがある行番号を抽出したらいいのかわかりません。 説明がわかりにくくてすみません。 まだ勉強が足らないのですが、教えていただけたら助かります。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ユーザーフォームでないとダメでしょうか? ボタンの代わりにボタン風にセルに色をつけたりして(枠線もカラー指定できるので可能です)、そのセルが選択されると行を消すという内容なら可能です。 当該ワークシートのSelectionChangeイベントでTarget(rangeオブジェクト)からrowsプロパティからdeleteメソッドで行を確認すればその行をです。 複数セル選択や飛びセル選択(ctrlキーを押しての選択)も対応しておけば完璧です。 いかがでしょうか? フォームの位置は図形と同じピクセルで確認できますが、これを行数と結びつけるためには、各行の行高さを取得して計算する必要があり非常に複雑です。 セル選択を利用する方がVBAの使い方としてはベストです。
その他の回答 (2)
- nattocurry
- ベストアンサー率31% (587/1853)
「各行の一番左に、小さなユーザーフォームをそれぞれ付けて、消したい行のユーザーフォームを押すと」 じゃなくて、 「消したい行の一番左のセルを、クリック すると」 or 「消したい行の一番左のセルを、ダブルクリック すると」 or 「消したい行の一番左のセルを、右クリック すると」 にしてみてはいかがですか?
お礼
ありがとうございました。 目からうろこです。
- aloha8861
- ベストアンサー率10% (7/70)
フォームは1個でいいんじゃないの? ダブルクリックなどでフォームを出現させて そのときのアクティブセルに対するRowを取得してDeleteすればいいと思うけど・・ Sub Macro1() Dim r As Long r = ActiveCell.Row Rows(r).Delete Shift:=xlUp End Sub 複数削除する場合はチェックマークをつけて For Eachなどで チェックマークがあったら削除と ループをかければいいと思います
お礼
ありがとうございました。 とても参考になりました。
お礼
ありがとうございました。 今回はこちらの回答を参考に考えてみます。 他の皆様、素早い回答助かりました。