
こんばんは
>見出し(日付)をドロップダウンリストで選ぶと
>シートはB3でウインドウ枠の固定をしています。
日付けは(3行目)1/1のように入力されたセルです
VBAで処理する方法です
対象のシートモジュールに下記を書き込みA1セルのリストを変更してください
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Dim r As Range
Set r = Rows(3).Find(Range("A1"))
If Not r Is Nothing Then Application.Goto r, True
End If
End Sub
上記の処理で、リストをB1に変更する場合はどうしたら良いのでしょうか?
No.4ベストアンサー
- 回答日時:
>それから同じ行に、リストと移動セルがある場合に、上手く行かないのは同じもの(日付)が2つ在るからでしょうか?
そうかもしれませんね。ご質問に示されているコードで説明すると
Findメソッドの検索範囲はRows(3) 3行目すべてなので3行目にリストを設置した場合そのようになる可能性があります。
また、Findメソッドのオプションは前回の設定を引き継ぎますので
Find(Range("A1"))と省略せずに設定する必要があります。
参考サイトで確認するとか、
マクロの記録で リボンの検索・・オプションを設定して検索できる事を確認し、記録を終了し、記録されたコードを参考に書き直すのが良いと思います。
>その場合セル範囲を指定(Range(”B2:AB2”))とかにしておけば良いのでしょうか?度々の質問になりますが、お願いいたします。
A2セルにリストを設置した場合、そのような方法で回避できると思います
また、Findメソッドの引数にはAfter 開始セルの指定があるので
これを使う方法もあります。
https://excel-ubara.com/excelvba4/EXCEL225.html
回答としてFindメソッドで実行する方法を書きましたが
Forループで探す方法もあります。
範囲が狭く限定的かつターゲットが1つの場合、ならこのような考え方も
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ListCell As Range
Set ListCell = Range("A2")
If Not Intersect(Target, ListCell) Is Nothing Then
Dim r As Range
For Each r In Range("B2:AB2")
If ListCell.Value = r.Value Then Exit For
Next
If Not r Is Nothing Then Application.Goto r, True
End If
End Sub
A2にリストB2以降の2行目を対象にループ 見つけたらループを抜ける
抜けた時の r 変数のオブジェクトにApplication.Goto
見つからない場合は r 変数は Nothingなので処理されない
比較が .Value = なので 日付の扱いに注意する
No.3
- 回答日時:
#1です 追記します
>マクロは始めたばかりで初心者です
とありましたので、Dim ListCell As Rangeについて
安易にListCellと変数名を設定しましたが、予約語や関数名で使用する可能性の低い名前にした方が良いです。
私は好みませんが、VBAでは2バイト文字を変数名にすることも可能です
基本的な事などで 参考サイトでご確認ください
http://officetanaka.net/excel/vba/variable/06.htm
No.2
- 回答日時:
こんにちは
>上記の処理で、リストをB1に変更する場合はどうしたら良いのでしょうか?
意図がよくわかりませんけれど・・
コード中の「"A1"」の部分を、「"B1"」に変更すれば良いのでは?
No.1
- 回答日時:
こんにちは
https://oshiete.goo.ne.jp/qa/12765874.html 回答したものです
説明を付けますが、自身でも調べてみてくださいね。
Private Sub Worksheet_Change(ByVal Target As Range)
セルの値が変更時に処理が行われます
戻り値はTarget As Range Target変数にRangeセル範囲がセットされます
範囲なので1つのセルの場合も複数のセルの場合もあります。
参考:https://vbabeginner.net/worksheet_change/
If Not Intersect(Target, Range("A1")) Is Nothing Then
Intersect 異なるセル範囲の交差範囲を取得します
Is Nothing 範囲が無い時、Notで否定しているので交差している時となります
Dim r As Range
Dim r As Range 変数宣言 Rangeオブジェクト型 セル範囲です
Set は オブジェクト型変数を設定する時の命令
Set r = Rows(3).Find(Range("A1"))
Rows(3).Find(Range("A1")) 省略していますがFindは探す
Rows(3) 3行目にA1セルの値が無いか探して変数rにセットします
If Not r Is Nothing Then Application.Goto r, True
r Is Nothing 変数 rにセットされているか Notで否定しているので
変数rにセットされていれば、(言い方を変えると見つかった時は)
参考:https://docs.microsoft.com/ja-jp/office/vba/api/ …
Application.Goto r, True rに移動する Trueはスクロールするです 一番左上に表示されますが、ウィンドウの固定を設定しているのでB3になると思います。
End If
End Sub
もうお分かりですね
A1セルのリストの場所を変えるのですから、A1を指定している箇所
すべてを変えます。
複数ある場合はメンテナンスなどが判り難い事がありますので
これもRangeオブジェクト型変数にセットすると1か所の変更で良くなります
まだ、Findに関しては問題が生じる可能性がありますので
VBA Find 日付を探す などで グーグル先生に聞くと
自身での理解が深まると思います。
一応、変数に入れたイベントプロシージャを書きます
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ListCell As Range
Set ListCell = Range("B1")
If Not Intersect(Target, ListCell) Is Nothing Then
Dim r As Range
Set r = Rows(3).Find(ListCell)
If Not r Is Nothing Then Application.Goto r, True
End If
End Sub
解説ありがとございました、すごく勉強になりました。
今まで基本的なものがないまま、ネット上の物を使って作っていました。けれど上手く行かず困っていました。読み解きに時間はかかりますが、調べながら進めていきます。
それから同じ行に、リストと移動セルがある場合に、上手く行かないのは同じもの(日付)が2つ在るからでしょうか?その場合セル範囲を指定(Range(”B2:AB2”))とかにしておけば良いのでしょうか?度々の質問になりますが、お願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
揮発性関数の語源・由来は何ですか?
Excel(エクセル)
-
Excelの式でどうしても理解出来ない式があります。
Excel(エクセル)
-
式の結果が0の時に空白にしたセルと、別のセルを足した結果を出す場合
Excel(エクセル)
-
4
エクセル「コメント」の初期設定
Excel(エクセル)
-
5
Excelで「1,2,3,4,5」を「1-5」とまとめることはできますか?
Excel(エクセル)
-
6
ExcelのIF関数や複数の関数の複雑な組み合わせを、ひたすら練習できるような問題集があったら教えて
Excel(エクセル)
-
7
excel関数について お世話になります。上のセルに関数を入れセル右下をダブルクリックすると、関数は
Excel(エクセル)
-
8
エクセルの都道府県名連続入力を抽出削除するには
Excel(エクセル)
-
9
Excel 【データの加工】
Excel(エクセル)
-
10
エクセルの付属テンプレートで来年カレンダーはどうすれば作れますか?
Excel(エクセル)
-
11
エクセル 先頭行の固定がなぜか解除される
Excel(エクセル)
-
12
エクセル特定記号で囲まれた数字、文字を抽出
Excel(エクセル)
-
13
Excel関数について 下記の業務をもっと効率よく出来る関数がないか悩んでます(´;Д;`) ※質屋
Excel(エクセル)
-
14
エクセル シート名
Excel(エクセル)
-
15
日時毎に整理された4列のデータを1列に直したいです。
Excel(エクセル)
-
16
【Excel】エラー解消をお願いします…。
その他(Microsoft Office)
-
17
エクセルでできること
Excel(エクセル)
-
18
Microsoft Excelで別シートを参照すると#Value!と表示される
Excel(エクセル)
-
19
ハイパーリンクを値貼り付け
Excel(エクセル)
-
20
エクセルで数字の最初に¥、終わりに円をつけることができますか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
エクセルの一つのセルに複数の...
-
5
エクセル 足して割る
-
6
【エクセル】IF関数 Aまたは...
-
7
excelのCOUNTIF関数で、『範囲=...
-
8
Excelについて(セル内の文字を...
-
9
Excelで、「特定のセル」に入力...
-
10
貼り付けで複数セルに貼り付けたい
-
11
excelの特定のセルの隣のセル指...
-
12
対象セル内(複数)が埋まった...
-
13
エクセルのセル証明
-
14
ピボットテーブルの更新時にエ...
-
15
セルをクリック⇒そのセルに入力...
-
16
VBAでの結合セルのコピー&ペー...
-
17
Excelで数式内の文字色を一部だ...
-
18
エクセルで全角ひらがなを半角...
-
19
界面活性剤に対する添加塩の効果
-
20
セル番号を返す関数
おすすめ情報
公式facebook
公式twitter