- ベストアンサー
エクセルのドロップダウンリストを自動で出すには?
エクセル(2007 OLD STYLE)のドロップダウンリストを設定してますが、セルのところで▼をクリックするのではなく そのセルに来たら自動でリストを表示させるようにしたいのですが、そのためのVBAはどのように するのでしょうか?宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Range("A51:A100").EntireRow.Delete xlShiftUp ちょっとはご自分で考えるクセを付けたほうがいいですよ。 人に教わるばかりでは身に付きません。 自分で調べて死ぬほど考えて答えにたどり着いたとき、本当に自分の力になります。
その他の回答 (5)
- kybo
- ベストアンサー率53% (349/647)
>しかし、これでは空白行の下の方の合計の行まで削除されてしまいます。 Range("A" & Rows.Count).End(xlUp).Offset(1)はA列の最終行のひとつ下という意味です。 A100は適当に思う数字に変えて下さい。 Range(Range("A" & Rows.Count).End(xlUp).Offset(1), Range("A100")).EntireRow.Delete xlShiftUp >それからついでなのですが、VBAを理解するのに良いサイトがあれば教えていただきたいのですが。 私は全て独学なので、初心者にとってどういうのがわかりやすいのかが私には理解出来ません。 「良い」かどうかは、ご自身で判断するものなので、これについての回答は控えます。
お礼
そうか、わかりました、 Range("A" & Rows.Count).End(xlUp).Offset(1)は つまり上から下に最終行を見ていく際、A101に合計欄があるからA102を 示す訳ですね、だからA102行目から上に50行削除された訳ですね。 では、A101行目に合計欄があるとして、A51からA100までを削除したい場合は どのように書いたらよいのでしょうか? サイトの件はわかりました、確かに人によって理解の仕方違いますし、よけいな事聞いてすみませんでした。 宜しくお願いします。
補足
解答ありがとうございます。 Range("A" & Rows.Count).End(xlUp).Offset(1)はA列の最終行のひとつ下という意味です。 ですね、勉強しましたのでわかりますが、 これですと、つまりA50行目までデータが入っていたとしてA51行目から下に空白を検索して A100迄を削除しなさいってことですよね。 しかしこれですと下全部がやはり削除されるみたいです。 たとえばA101行目に合計欄があるとして、A51からA100までを削除したいのですが、 教えて頂いた上記の書き方では駄目みたいなのですが? たびたび済みませんが、宜しくお願いします。
- kybo
- ベストアンサー率53% (349/647)
A列の最終行から下をすべて削除するコードです。 Range(Range("A" & Rows.Count).End(xlUp).Offset(1), Range("A" & Rows.Count)).EntireRow.Delete xlShiftUp
お礼
行を指定した削除でなく、たとえば、A列に日にち、B列に社名、C列20行目に合計をしているとして、 19行目から上の空白を削除するように下記のように書きましたが動きません。 どこが違うのかご教授、宜しくお願いします。 Range(Range("A4", Range("A19").EntireRow.End(xlUp).Offset(1).EntireRow.Delete xlShiftUp
補足
ありがとうございます。 色々とお手数をお掛けしております。 しかし、これでは空白行の下の方の合計の行まで削除されてしまいます。 行を指定して削除したいのですが...。 それからついでなのですが、VBAを理解するのに良いサイトがあれば教えていただきたいのですが。 色々調べておりますが、なかなkわかりやすいサイトがないものでして...。 すみませんが、宜しくお願いします。
- kybo
- ベストアンサー率53% (349/647)
>1の余った行を削除出来る様にするにはどうやればよいのでしょうか? ちょっと意味がわかりかねます。 当初の質問からかなりずれているのでは?
補足
説明不足で済みません、 A列に日にち、B列に社名、C列に金額、C100に合計欄という表を作っていて たとえば、A列1~C列10までデータを入力していき、 70行迄しかデータがなかった場合、A71行からA99行までの空行は削除したいっていう 意味です。 教えて頂いたVBAでは上記の作業は出来ないみたいですので出来る様に出来ないかと 思いまして、よろしくお願いします
- kybo
- ベストアンサー率53% (349/647)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, Range("A1:A10")) Is Nothing Then SendKeys "%{DOWN}" End If End Sub A1:A10であれば、できます。 >また、sheet1、sheet2とsheetごとに書かなければならないのでしょうか? 全シートであれば、ThisWorkbookに以下の様にすれば、1回で済みます。 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Not Intersect(Target, Range("A1:A10")) Is Nothing Then SendKeys "%{DOWN}" End If End Sub
お礼
2の離れた列に設定する場合は出来ました。 単にRange("A1:A10,C1:C10")これでいいわけですね。 1の余った行を削除出来る様にするにはどうやればよいのでしょうか? 宜しくお願いします。
補足
解答ありがとうございました。出来ました。 重ねて質問なのですが、 1.データを入力していって余った行を削除する場合があるのですが、 これでは削除できないみたいですね。 2.B列、C列にも設定する場合はどうやるのでしょうか? 上記の中に記入しないといけないのでは無いかと思い、&でつないでみたり しましたが、わかりません。 よろしくお願いします。
- kybo
- ベストアンサー率53% (349/647)
そんな方法はSendkeyしかないと思います。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then SendKeys "%{DOWN}" End If End Sub
お礼
出来ました。 これは各sheetに書かなければならないのですね。 最初、標準モジュールとかクラスモジュールに書いたから動きませんでした。 それで質問なんですが、 例えば、A1に会社名としてB1にA社、B2にB社、B3にC社としてA列2から下へと データを入力していき、自動表示をさせたいのです。 If Target.Address = "$A$2"を"$A$2:$A$10"としても駄目みたいですね。 列を指定することが出来るのでしょうか? 出来れば、A2以下でその設定が出来ればよいのと、行を削除してもエラーにならないように したいです。 また、sheet1、sheet2とsheetごとに書かなければならないのでしょうか? 色々勉強しましたが、いまいちわかりません。 どうかよろしくお願いします。
補足
早速の解答ありがとうございます。 やってみましたが、動かず色々調べておりますが、どうも上手くいきません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then SendKeys "%{DOWN}" End If End Sub A1のセルに来たらリスト表示するという意味でしょうか? たとえば、A1にA、A2にB、A3にCとあり、B列にドロップダウンリストの設定をしているとう事で したらどうなるのでしょうか? 宜しくお願いします。
お礼
わかりました、死ぬほど考えてみます。 どうも、色々お世話になりありがとうございました。