[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Enterを押してセル内容を変更させるマクロを』(すがやっち)
[Enterを押して、セルの内容を変更させるマクロを作りたい]
早速ですが、質問させていただきたいと思います。
宜しくお願いします(前回の質問から間もないですが…)
以下のようなマクロがあります。C3セルに文字を入力し、Enterを押すと、別のマクロ(C3の入力値を基にして、検索を開始する)が実行されるというものです。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("C3").Address Then
⇒ Application.Run "'予算センタ検索システム(9.1現在).xls'!検索"
End If
End Sub
上記記述の⇒のところに、例えばC3セルに 田中 と入力していたら、*田中* となるようなマクロを設定したいと考えています(要は、その後のマクロで田中を含む値を検索したいわけなのです)。
いろいろと検討してみましたが、うまくいきませんでした。例えば以下のように設定してみましたが、エラーが表示されてしまいました。
Range("C3").value = "*"&"Range("C3").value"&"*"
どのようにすればうまくいくものなのでしょうか?
皆さん、宜しくお願いします。
単純に変数として aa=Target.Address として、 検索する文字に aa を入れてやってはどうでしょう。 検索では、完全一致ではないの選択をしていれば、単純に田中で 田中太郎や 大田中一郎も検索されますよ。
(川野鮎太郎)
また検索で、「完全一致ではないの選択」というのはどこで設定するのでしょうか?それはExcelのメニューバーかなにかで行えるのでしょうか?それともマクロの記述が別途必要ということでしょうか?
理解力がなく、質問ばかりで非常に申し訳なく思いますが、宜しくお願いします。
(*'ω'*)......ん? >Application.Run "'予算センタ検索システム(9.1現在).xls'!検索"ってことは、 検索するマクロはあるってことですよね。 Target.Address = Range("C3").Address Then でTrue だったときの C3の値が田中だったら、 aa=Target.Address で aaに田中が代入されているはずですから、 Application.Run "'予算センタ検索システム(9.1現在).xls'!検索"の中に
Cells.Find(What:="100", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
こんなのがあるはずですから、"100"のところに aa を入れてやればどうでしょう。
>>完全一致ではないの選択 は、上記の MatchCase:=False のところが、 MatchCase:=True になってたら、完全一致で検索されていることになります。 (川野鮎太郎)
Range("B9:G4000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("B2:G3"), Unique:=False
なので、川野さんが仰る、What:="100"も、MatchCase:=False もどちらの記述もないのです。
ただわかったことは、*田中*としなくとも、完全一致ではない検索(入力した文字列を含む検索)が出来ればそれでよいということがわかりました。他にもっとよい方法がありましたら、知恵をお貸しください。宜しくお願いします。
話がよく分らないので、コードの一部分だけに反応します。 >Range("C3").value = "*"&"Range("C3").value"&"*" Range("C3").Value = "*" & Range("C3").Value & "*" で前後にアスタリスクが付きました。(「"」を省いただけです。) 完全一致の検索はExcelのバージョンによって設定方法が若干異なるようです。 ↓が参考になりませんでしょうか? (Hatch) http://support.microsoft.com/default.aspx?scid=kb;ja;402757
フィルタオプションを使ったことが無かったので、?(゜_。)?だったんですが、 こんな方法なら出来るようになりました。 C3の値でフィルタするようですが、入力はC1では駄目でしょうか。 そうしないと、Worksheet_Changeの場合には、C3が変わると*を付けた時点でループしてしまいます。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> Range("C1").Address Then Exit Sub
Range("C3") = "*" & Range("C1") Range("B9:G4000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B2:G3"), Unique:=False
Range("C3") = Target
End Sub
これでも役目は果たすと思います。(多分 (川野鮎太郎)
>Range("C3").Value = "*" & Range("C3").Value & "*"
の記述では
>Worksheet_Changeの場合には、C3が変わると*を付けた時点でループしてしまいます。
確かに川野さんが仰るとおりループしてしまいます。一体何故なんでしょうか…。私としては入力欄はC3で譲れないところです(見栄えだけが理由ですが…)
何とかC3を入力欄にして、部分一致検索ができるような記述は出来ないでしょうか?
何度も申し訳ありません。よろしくお願いします。
こう? (夏目雅子似) Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Address = Range("C3").Address Then Target.Value = "*" & Target.Value & "*" ' Application.Run "'予算センタ検索システム(9.1現在).xls'!検索" End If Application.EnableEvents = True End Sub
ぉお!!(゚ロ゚屮)屮と思って今試してみたら、Application.EnableEvents = Falseのせいで、 C3の値が変わらないのでフィルタが上手くいかないようです(ノ_・。) (川野鮎太郎)
>C3セルに文字を入力し、Enterを押すと うん?何かの間違いじゃないの?? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$3" Then Exit Sub Application.EnableEvents = False Target.Value = "*" & Target.Value & "*" Application.EnableEvents = True ' Application.Run "'予算センタ検索システム(9.1現在).xls'!検索" End Sub (夏目雅子似)
これって、川野鮎太郎さんだけがC1でC3を変えようとしてるだけじゃないの?? (夏目雅子似)
いえいえ、夏目さんのをそのままコピペしたのでそれは無いんですけど・・・ すいません、やはり自宅のPC少し変みたいです>< 挙動がバラバラ_/ ̄|○ il||li (川野鮎太郎)
うん?変わらない?? Application.EnableEvents = False のままじゃないの?どこかで、 Application.EnableEvents = True を走らせてみたら? (夏目雅子似)
そう思って標準モジュールでApplication.EnableEvents = Trueに頑張ってもらったんですが(^_^A; 一度再起動してみます_/ ̄|○ il||li ==☆((((((((( ;^ー^)ノ いってきま〜す♪ 再起動 (川野鮎太郎)
ごめんなさいm(_ _)m フィルタ自体も動きがおかしいのでまた明日やってみます。 夏目さんので良いはずです。ぺこり(o_ _)o)) (川野鮎太郎)
夏目さん、会社でやったら上手くいきました^^ お手間取らせてすいませんでしたm(._.)m ペコッ (川野鮎太郎)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$3" Then Exit Sub Application.EnableEvents = False Target.Value = "*" & Target.Value & "*" Application.EnableEvents = True ' Application.Run "'予算センタ検索システム(9.1現在).xls'!検索" End Sub
C3セルの他に、E3とF3も加えたい(E3とF3のセルが変更されたら、C3と同様にマクロが実行されるようにしたい)と思います。
その場合は、どういった記述になりますでしょうか?
お忙しいところ大変恐縮ですが、宜しくお願いします。
If Target.Address <> Range("C3").Address And Target.Address <> Range("E3").Address And Target.Address <> Range("F3").Address Then Exit Sub に変えてやればいいのかな。 (川野鮎太郎)
↓こちらが参考になりませんか? (夏目雅子似) [[20040708005225]]『シートの検索』(初心者)
↑のIntersect って具体的にはどういう感じで表すんですか? _〆\(..;) メモメモしただけで、身についてない_/ ̄|○ il||li ご指導('-'*)ヨロシクお願いします♪ (川野鮎太郎)
なんか呼ばれたような・・・・
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub If Application.Intersect(Target, Range("C3,E3,F3")) Is Nothing Then Exit Sub MsgBox "ok" End Sub
(INA)
ぉお!!(゚ロ゚屮)屮 出来ました^^v クリックしたセルの値と、Range("C3,E3,F3")の値を比較して、同じセルが無いときに Exit Sub となるわけですね。 VBAのヘルプでIntersectで調べて、一生懸命以下のようなことを試していました_/ ̄|○ il||li ' Set isect = Application.Intersect(Range("C3"), Range("E3"), Range("F3")) ありがとうございました。 ※質問者のすがやっちさん、横やり入れてすいませんでした。 (川野鮎太郎)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.