※説明が難しくて長文失礼します。
1つのExcelブックの中に、次の2つのシートがあります。
・一覧表
・個人明細
「一覧表」シートには、A列、B列・・・に氏名、部署、担当案件名、予算金額・・・
という項目名で数百レコード入っています。
「個人明細」シートは、「一覧表」の1名分(1レコード)の情報が、
A4用紙での印刷用にレイアウトされたシートになっています。
具体的には、「個人明細」シート内の「氏名」欄からvlookupで、
「一覧表」シートから突合して表示しています。
現在は、「個人明細」シートの「氏名」セルの入力規則-リストの対処を
「一覧表」シートのA列に設定しているので、
プルダウンから必要な人を選択をすれば、その人の詳細情報が表示されます。
これを次のような仕様に出来ないでしょうか?
新しいウィンドウを開いて、「一覧表」と「個人明細」を並べて表示にして、
「一覧表」のカーソルの行と「個人明細」に表示する内容を連動させたいと思います。
その為に、
「一覧表」にある現在のカーソルのある行を取得できないでしょうか?
例えば67行目にカーソルがあったとしたら、
A67セル内の値を、「個人明細」のC2セルに表示させたいです。
更に「一覧表」の67行目はセル色を黄色にしてカーソルがある位置を一目瞭然にしたいです。
(条件付き書式でもできるかもしれませんが動作を軽くしたいです)
つまり、「一覧表」のセルをカーソルキー「↓」で移動していくだけで、
「個人明細」の表示内容が変わっていくようにしたいです。
関数またはVBAで実現できますでしょうか?
詳しい方、よろしくお願いいたします。
No.1
- 回答日時:
こんばんは。
>条件付き書式
→こちらでは、希望の事はできないので、やるならVBAになるかと。
カーソルでやるなら、イベントの、SelectionChangeを使う事になるかと。
https://excel-ubara.com/excelvba1/EXCELVBA425.html
>例えば67行目にカーソルがあったとしたら、
A67セル内の値を、「個人明細」のC2セルに表示させたいです。
Worksheets("個人明細").Range("C2").Value = Cells(ActiveCell.Row,1).Value
上記を組み合わせれば、できるのでは?と思います。
先ずはチャレンジされてみて、不明点があったら、コードをアップして、
やりたい結果、現状の結果などで、再度質問をされたら?と思います。
No.2
- 回答日時:
私だったら個人明細シートの氏名を入れるセル(C2?)にMATCH関数で一覧表シートのA列を指定し行を入れるところを別セルで参照します。
行を指定する別セルにスピンボタンを配置すればそこを上下するだけでデータが変更になっていくかと思います。
ありがとうございます。
MATCH関数をどこに入れてどう参照するかがピンときませんでした。
ちょっと時間をかけてテストしたいと思います。
スピンボタンは、よく年齢など「01」を上下の矢印で増減させるボタンですよね?
理想の操作性としては、1行ずつ下げるだけではなく、離れた場所をクリックしても良いように対応したいです。
(No.3の回答がとても理想に近かったです。)
No.3
- 回答日時:
こんにちは
関数ではカーソル位置(=選択セル)の位置を取得することはできないので、VBAでなければ難しいと思います。
>条件付き書式でもできるかもしれませんが動作を軽くしたいです
カーソル位置を監視することになるので、「軽く」と言ってもそれなりの負荷がかかります。
また、VBA自体が速度が遅いので、エクセルの組み込み機能に比較すれば遅いことにもなります。
とはいえ、ご提示程度の内容であれば、操作にはさほど影響が出るようなことは無いでしょう。
※ 個人明細シート内に複雑な関数式が設定されていて、C2セルを参照しているような場合は、そちらの影響で重たくなる可能性があります。
下のサンプルでは、勝手に以下の仮定をしています。
・一覧表で色を付ける対象は10列まで(A:J)とする
・A:J列の基本色は色なしとする
(以前の色を消すため、元々色を付けたセルがあっても消されるので)
・感知する対象はA列のみとする
(その他の列を選択しても、行の色は変わりません)
一覧表のシートの、シートモジュールに以下のコードをコピペしてみてください。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const TSheet = "個人明細"
Range("A:J").Interior.Color = xlNone
If Target.Count > 1 Or Target.Column <> 1 Then Exit Sub
Target.Resize(1, 10).Interior.Color = vbYellow
Worksheets(TSheet).Range("C2").Value = Target.Value
End Sub
ありがとうございます。
いきなり理想通りで完璧な動作をしました!
自分なりの理解では
> If Target.Count > 1 Or Target.Column <> 1
この数値を3にすれば対象列をC列に出来ることが分かりました。
> Range("A:J")
> Target.Resize(1, 10)
黄色で塗る範囲をBR列まで広げたければ、
("A:BR")、(1, 70)にすれば出来る事が分かりました。
申し訳ありません、追加の質問です。
1.1行目~5行目はレコードの範囲外です。1行目~5行目を塗りつぶし範囲から外す事は出来ますか?
2.また最終行以降も反応しないように出来ます?
3.感知する対象を3(C列)にした場合、C列より右しか塗られませんでしたがどんな場合でもA列から塗るように出来ますか?
4.カーソル位置がどの列にあったとしても関知するように出来ないでしょうか?
No.4ベストアンサー
- 回答日時:
No3です
>申し訳ありません、追加の質問です。
要望ではっきりしない部分がありますので、ある程度設定できる形にしておきました。
※ 定数にしてある部分を適当に変更してください。
※「最終行」はC列の最終行を用いています。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MaxRow As Long, rw As Long
Const TSheet = "個人明細" '←転記先シート名
Const RColumn = 70 '←感知対象列範囲(最大列番号)
Const TColumn = 3 '←転記元セルの列番号
MaxRow = Cells(Rows.Count, 3).End(xlUp).Row
If MaxRow < 5 Then MaxRow = 6
Range("A6").Resize(Rows.Count - 5, RColumn).Interior.Color = xlNone
rw = Target.Row
If Target.Count > 1 Or rw < 6 Or rw > MaxRow Or _
Target.Column > RColumn Then Exit Sub
Cells(rw, 1).Resize(, RColumn).Interior.Color = vbYellow
Worksheets(TSheet).Range("C2").Value = Cells(rw, TColumn).Value
End Sub
ありがとうございます。
はっきりしない部分があったとのこと、すみません。。。
しかしやりたかった追加部分は全てクリアされて完璧に満たされてました。
変数化されていてすごく便利です。
更にカスタマイズしたい箇所があったらソースを見て勉強します。
大変助かりました。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) たくさんあるフォームコントロールを効率よく確認するには 1 2022/12/24 12:27
- Excel(エクセル) エクセルの数式で教えてください。 1 2022/10/25 09:26
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
VBAの天才来てください
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
エクセルのマクロでアクティブ...
-
VBA 存在しないシートを選...
-
同じ作業を複数のシートに実行...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
【VBA】シート名に特定文字が入...
-
【VBA】色のついたシート名を取得
-
ExcelVBA:複数の特定のグラフ...
-
ExcelVBA シート名を複数セルか...
-
XL:BeforeDoubleClickが動かない
-
VBAを用いて繰り返し自動的...
-
excelのマクロで該当処理できな...
-
VBA ユーザーフォーム上のチェ...
-
Excel マクロについての相談
-
特定の文字を含むシートだけマ...
-
エクセル・マクロ シートの非...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報