Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6704 / 13644 ツリー ←次へ | 前へ→

【43617】入力規則のリストから選択後自動入力 ユイリン 06/10/20(金) 1:19 質問[未読]
【43625】Re:入力規則のリストから選択後自動入力 Jaka 06/10/20(金) 9:30 発言[未読]
【43628】Re:入力規則のリストから選択後自動入力 ユイリン 06/10/20(金) 9:56 回答[未読]
【43630】Re:入力規則のリストから選択後自動入力 Jaka 06/10/20(金) 10:17 発言[未読]
【43638】Re:入力規則のリストから選択後自動入力 ユイリン 06/10/20(金) 16:51 質問[未読]
【43641】Re:入力規則のリストから選択後自動入力 Jaka 06/10/20(金) 17:13 発言[未読]

【43617】入力規則のリストから選択後自動入力
質問  ユイリン  - 06/10/20(金) 1:19 -

引用なし
パスワード
   どなたか教えてください。
cells(1,1)とcells(1,4)に入力規則のリストを設定します。
そのデータ範囲はcells(3,1)からcells(3,3)に設定します。
リストから選択するとそれぞれの右隣のセル(cells(1,2)とcells(1,4))に
相当する値を自動的に入力するようなマクロを作りたいのです。
模式図を下に示します。

  1      2      3      4
  _____________________
1 |3      z      2      y
2 |1      2      3 ←リストのデータ範囲    
3 |x      y      z ←値    

自分で作ってみたマクロは・・・・

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Cells(1, 1) Then
For k = 1 To 3
If Cells(2, k) = Cells(1, 1) Then
Cells(1, 2) = Cells(3, k)
Exit For
Else
Cells(1, 2) = ""
End If
Next k
End If
If Target = Cells(1, 3) Then
For k = 1 To 3
If Cells(2, k) = Cells(1, 3) Then
Cells(1, 4) = Cells(3, k)
Exit For
Else
Cells(1, 4) = ""
End If
Next k
End If
Exit Sub
End Sub

実際やってみると、リストから選択しても自動的に入力されません。
ただ、リストを設定しているセルに無理やり手入力すると、ちゃんと自動的に
入力されるのです。
どういうことでしょうか??ご教授ください。
よろしくお願いいたします。

【43625】Re:入力規則のリストから選択後自動入力
発言  Jaka  - 06/10/20(金) 9:30 -

引用なし
パスワード
   コード読んでないけど、
>入力規則、データ範囲はcells(3,1)からcells(3,3)に設定します。
>Worksheet_Change、リストから選択しても自動的に入力されません。、
>手入力すると、ちゃんと自動的に入力されるのです。
ということから見て、多分EXL97なのでは...。
EXLバージョンは、何でしょうか?

【43628】Re:入力規則のリストから選択後自動入力
回答  ユイリン  - 06/10/20(金) 9:56 -

引用なし
パスワード
   Excel97です・・・

▼Jaka さん:
>コード読んでないけど、
>>入力規則、データ範囲はcells(3,1)からcells(3,3)に設定します。
>>Worksheet_Change、リストから選択しても自動的に入力されません。、
>>手入力すると、ちゃんと自動的に入力されるのです。
>ということから見て、多分EXL97なのでは...。
>EXLバージョンは、何でしょうか?

【43630】Re:入力規則のリストから選択後自動入力
発言  Jaka  - 06/10/20(金) 10:17 -

引用なし
パスワード
   >Excel97です・・・
やっぱり...。
残念ですが、97だと入力規則のデータ範囲にセルを参照させた場合、
Worksheet_Change イベントが発生してくれません。
リスト項目に直接、
あ,い,う,え,お
と書いた場合は、反応してくれるけど.....。

で、リスト項目にセル範囲で参照させたい場合は、イベント発生用作業セルを使います。

入力規則のセル、A1として
作業セル
=A1

A1セルの値が変更されると作業セルの再計算イベントが発生します。
Private Sub Worksheet_Calculate()

このイベントを利用して、こんな感じにコードを書きます。
If ActiveCell.Address(0, 0) = "A1" Then
  メインコード
End If

PS
なぜ、ActiveCellなのか、解らない人のために
手動で入力規則のセルを操作した時は、どのセルを選択してますか?

【43638】Re:入力規則のリストから選択後自動入力
質問  ユイリン  - 06/10/20(金) 16:51 -

引用なし
パスワード
   ありがとうございます。
でも、教えていただいた下記の方法でやっても、
やはり反応なしなのですが・・・
(入力規則を設定しているセルは「A1」です)

>Private Sub Worksheet_Calculate()
>
>このイベントを利用して、こんな感じにコードを書きます。
>If ActiveCell.Address(0, 0) = "A1" Then
>  メインコード
>End If
>
>PS
>なぜ、ActiveCellなのか、解らない人のために
>手動で入力規則のセルを操作した時は、どのセルを選択してますか?

【43641】Re:入力規則のリストから選択後自動入力
発言  Jaka  - 06/10/20(金) 17:13 -

引用なし
パスワード
   ▼ユイリン さん:
>でも、教えていただいた下記の方法でやっても、
>やはり反応なしなのですが・・・
・入力規則のセル、A1として
・作業セル
・=A1
これ忘れてませんか?
B1セルでもなんでも良いですが、作業セルにA1を参照させる
=A1
って言う関数を入れておく。

また、計算方法が手動になっていると再計算されないので動きません。

6704 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free