プロが教える店舗&オフィスのセキュリティ対策術

エクセル(2007 OLD STYLE)のドロップダウンリストを設定してますが、セルのところで▼をクリックするのではなく
そのセルに来たら自動でリストを表示させるようにしたいのですが、そのためのVBAはどのように
するのでしょうか?宜しくお願いします。

A 回答 (6件)

Range("A51:A100").EntireRow.Delete xlShiftUp



ちょっとはご自分で考えるクセを付けたほうがいいですよ。
人に教わるばかりでは身に付きません。
自分で調べて死ぬほど考えて答えにたどり着いたとき、本当に自分の力になります。
    • good
    • 0
この回答へのお礼

わかりました、死ぬほど考えてみます。
どうも、色々お世話になりありがとうございました。

お礼日時:2011/08/31 20:06

>しかし、これでは空白行の下の方の合計の行まで削除されてしまいます。


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)はA列の最終行のひとつ下という意味です。
ですね、勉強しましたのでわかりますが、
これですと、つまりA50行目までデータが入っていたとしてA51行目から下に空白を検索して
A100迄を削除しなさいってことですよね。
しかしこれですと下全部がやはり削除されるみたいです。
たとえばA101行目に合計欄があるとして、A51からA100までを削除したいのですが、
教えて頂いた上記の書き方では駄目みたいなのですが?
 
たびたび済みませんが、宜しくお願いします。

補足日時:2011/08/31 16:52
    • good
    • 0
この回答へのお礼

そうか、わかりました、
Range("A" & Rows.Count).End(xlUp).Offset(1)は
つまり上から下に最終行を見ていく際、A101に合計欄があるからA102を
示す訳ですね、だからA102行目から上に50行削除された訳ですね。
では、A101行目に合計欄があるとして、A51からA100までを削除したい場合は
どのように書いたらよいのでしょうか?

サイトの件はわかりました、確かに人によって理解の仕方違いますし、よけいな事聞いてすみませんでした。

宜しくお願いします。

お礼日時:2011/08/31 17:04

A列の最終行から下をすべて削除するコードです。



Range(Range("A" & Rows.Count).End(xlUp).Offset(1), Range("A" & Rows.Count)).EntireRow.Delete xlShiftUp

この回答への補足

ありがとうございます。
色々とお手数をお掛けしております。

しかし、これでは空白行の下の方の合計の行まで削除されてしまいます。
行を指定して削除したいのですが...。

それからついでなのですが、VBAを理解するのに良いサイトがあれば教えていただきたいのですが。
色々調べておりますが、なかなkわかりやすいサイトがないものでして...。

すみませんが、宜しくお願いします。

補足日時:2011/08/31 11:26
    • good
    • 0
この回答へのお礼

行を指定した削除でなく、たとえば、A列に日にち、B列に社名、C列20行目に合計をしているとして、
19行目から上の空白を削除するように下記のように書きましたが動きません。
どこが違うのかご教授、宜しくお願いします。

Range(Range("A4", Range("A19").EntireRow.End(xlUp).Offset(1).EntireRow.Delete xlShiftUp

お礼日時:2011/08/31 15:59

>1の余った行を削除出来る様にするにはどうやればよいのでしょうか?



ちょっと意味がわかりかねます。
当初の質問からかなりずれているのでは?

この回答への補足

説明不足で済みません、
A列に日にち、B列に社名、C列に金額、C100に合計欄という表を作っていて
たとえば、A列1~C列10までデータを入力していき、
70行迄しかデータがなかった場合、A71行からA99行までの空行は削除したいっていう
意味です。
教えて頂いたVBAでは上記の作業は出来ないみたいですので出来る様に出来ないかと
思いまして、よろしくお願いします

補足日時:2011/08/31 10:24
    • good
    • 0

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

この回答への補足

解答ありがとうございました。出来ました。
重ねて質問なのですが、

1.データを入力していって余った行を削除する場合があるのですが、
これでは削除できないみたいですね。

2.B列、C列にも設定する場合はどうやるのでしょうか?
上記の中に記入しないといけないのでは無いかと思い、&でつないでみたり
しましたが、わかりません。

よろしくお願いします。

補足日時:2011/08/31 06:51
    • good
    • 0
この回答へのお礼

2の離れた列に設定する場合は出来ました。
単にRange("A1:A10,C1:C10")これでいいわけですね。

1の余った行を削除出来る様にするにはどうやればよいのでしょうか?

宜しくお願いします。

お礼日時:2011/08/31 09:43

そんな方法はSendkeyしかないと思います。



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
SendKeys "%{DOWN}"
End If
End Sub

この回答への補足

早速の解答ありがとうございます。

やってみましたが、動かず色々調べておりますが、どうも上手くいきません。
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列にドロップダウンリストの設定をしているとう事で
したらどうなるのでしょうか?
宜しくお願いします。

補足日時:2011/08/30 15:06
    • good
    • 0
この回答へのお礼

出来ました。
これは各sheetに書かなければならないのですね。
最初、標準モジュールとかクラスモジュールに書いたから動きませんでした。

それで質問なんですが、
例えば、A1に会社名としてB1にA社、B2にB社、B3にC社としてA列2から下へと
データを入力していき、自動表示をさせたいのです。
If Target.Address = "$A$2"を"$A$2:$A$10"としても駄目みたいですね。
列を指定することが出来るのでしょうか?
出来れば、A2以下でその設定が出来ればよいのと、行を削除してもエラーにならないように
したいです。

また、sheet1、sheet2とsheetごとに書かなければならないのでしょうか?

色々勉強しましたが、いまいちわかりません。
どうかよろしくお願いします。

お礼日時:2011/08/30 21:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A