Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11全般 : Excel 2019)
セルの値によって隣のセルの数値の範囲を決める
投稿日時: 23/03/21 16:51:57
投稿者: たいあやぱぱ

A列の値によってその隣のB列に入力できる値の範囲を指定したいのですがどうすればできますでしょか。
やりたいことはA列は個人技能レベルを0〜5で指定する。
B列では、A列のレベルにあわせて時給の加給額を入力させたい。
レベル0 加給額 0
レベル1 加給額 10
レベル2 加給額 20〜30
レベル4 加給額 40〜80
レベル5 加給額 90〜130
 
A列のレベルによって例えば|A列が1の場合はB列で10とする。
A列の値によってB列でプルダウンリストで表示・選択できる値を決める
もしくは、プルダウンではなく、A列の値によって入力できる値を制限したいです。
 
これをできればVBAで完結させたいです。
VBAでなくとも、Excel機能でできるのであればそれもぜひ参考にさせていただきたいです。
 
宜しくお願い致します。

回答
投稿日時: 23/03/21 18:41:55
投稿者: taitani
投稿者のウェブサイトに移動

Excelの一般機能でもできる認識です。(面倒ですが。。。)
’---------------------
以下の表を作成します。

List	最小値	最大値
レベル0	0	0
レベル1	10	10
レベル2	20	30
レベル4	40	80
レベル5	90	130

 
List 範囲に「List」の名前を設定
最小値範囲に 「レベル0_最小値」〜「レベル5_最小値」までの名前を設定
同様に、最大値範囲に 「レベル0_最大値」〜「レベル5_最大値」までの名前を設定
 
元の表のレベル列に、入力規制→データの入力規制→設定で
リスト、元の値の計算式に、「=List」と入力。
 
加給額の列に、入力規制→設定→整数、次の間を設定し、
最小値に「=INDIRECT($A2&"_最小値")」
最大値に「=INDIRECT($A2&"_最大値")」
 
「エラーメッセージ」タブで、タイトル「エラー」
エラーメッセージ「範囲外の数字が入力されています」などで可能です。
※レベル3 がない部分はあえて触れていませんw

回答
投稿日時: 23/03/21 18:54:13
投稿者: taitani
投稿者のウェブサイトに移動

VBA なら、
Worksheet_Change を利用、レベル列だけを対象にして、
「レベル0」とかの値で入力規制の処理を行えばよいかと。
 
加給額が10単位であれば少しは楽かな。

回答
投稿日時: 23/03/22 14:00:31
投稿者: WinArrow

一般機能で
   
別シートに次のようなリストを作成、名前定義します。
   
[A列]  [B列]  [C列]  [D列] [E列]
レベル0 レベル1 レベル2 レベル3 レベル4
0    10   20    40   90
            30     50   100
                          60   110
                          70   120
                          80   130
   
名前定義の方法:セル範囲を選択し、
「数式」タブの「選択範囲から作成」→「上端行」チェック→「OK]
   
   
元シートのB列に入力規則設定
「リスト」
=IDIRECT(A1)

投稿日時: 23/03/22 18:57:21
投稿者: たいあやぱぱ

ありがとうございます。
これで行くとレベルに合わせて最小値〜最大値の範囲での入力に制限することができるのですね。
 
以下の部分についての設定方法をご教授いただけませんでしょうか。
>最小値範囲に 「レベル0_最小値」〜「レベル5_最小値」までの名前を設定
>同様に、最大値範囲に 「レベル0_最大値」〜「レベル5_最大値」までの名前を設定
 
宜しくお願い致します。
 

taitani さんの引用:
Excelの一般機能でもできる認識です。(面倒ですが。。。)
’---------------------
以下の表を作成します。
List	最小値	最大値
レベル0	0	0
レベル1	10	10
レベル2	20	30
レベル4	40	80
レベル5	90	130

 
List 範囲に「List」の名前を設定
最小値範囲に 「レベル0_最小値」〜「レベル5_最小値」までの名前を設定
同様に、最大値範囲に 「レベル0_最大値」〜「レベル5_最大値」までの名前を設定
 
元の表のレベル列に、入力規制→データの入力規制→設定で
リスト、元の値の計算式に、「=List」と入力。
 
加給額の列に、入力規制→設定→整数、次の間を設定し、
最小値に「=INDIRECT($A2&"_最小値")」
最大値に「=INDIRECT($A2&"_最大値")」
 
「エラーメッセージ」タブで、タイトル「エラー」
エラーメッセージ「範囲外の数字が入力されています」などで可能です。
※レベル3 がない部分はあえて触れていませんw

回答
投稿日時: 23/03/23 10:47:27
投稿者: taitani
投稿者のウェブサイトに移動

List    最小値    最大値
レベル0    @    A
レベル1    B    C
---省略
レベル5    D    E
 
@のセルを選択して、左上の名前設定部分に「レベル0_最小値」を入力してEnter
※おそらく、初期表示は B2 かと。
 
同様に、Aセルを選択して、左上の名前設定部分に「レベル0_最大値」を入力してEnter
 
パターン分繰り返します。

回答
投稿日時: 23/03/23 16:06:16
投稿者: WinArrow

私見ですが、
入力値の種類を「整数」で
最小値〜最大値
で入力制限は可能ですが、
入力可能な数値が目視できた方が操作しやすいと思います。
 
入力可能な数値が目視
とは、入力値の種類を「リスト」にすることです。
 
これは質問者さんが判断することなので、あくまでも私見ということでご理解ください。

回答
投稿日時: 23/03/23 17:15:14
投稿者: taitani
投稿者のウェブサイトに移動

WinArrow さんの引用:
私見ですが、
入力値の種類を「整数」で
最小値〜最大値
で入力制限は可能ですが、
入力可能な数値が目視できた方が操作しやすいと思います。
 
入力可能な数値が目視
とは、入力値の種類を「リスト」にすることです。
 
これは質問者さんが判断することなので、あくまでも私見ということでご理解ください。

 
私もそう思ったのですが、10単位なのか判断できなかったため、上記の回答になりました。
10単位であれば、WinArrow さんの方法がよいと思います😂

回答
投稿日時: 23/03/23 21:11:48
投稿者: WinArrow

引用:

10単位であれば、WinArrow さんの方法がよいと思います😂

 
>10単位
は、参考で書いたもので、
単位は、名前定義するリストを業務に対応することが可能なので、
10単に限定する必要はないと思います。

回答
投稿日時: 23/03/24 10:40:23
投稿者: WinArrow

質問者さんの質問内容を読み返してみました。
 

引用:
列の値によってB列でプルダウンリストで表示・選択できる値を決める
もしくは、プルダウンではなく、A列の値によって入力できる値を制限したいです。

一般機能で、対応するとすれば、
前者は、入力規則の「リスト」で対応可能です。
後者も、入力規則の「整数」で範囲を設定することで対応可能です。
  
両者の違い
「リスト」:入力可能値がドロップダウンリストで目視できる。
「整数」+「範囲」:入力可能値が分からない。エラーメッセージでも表示できない。
これは、操作性に影響することなので、
どちらを採用するかは、質問者の判断になります。
  
一般機能ではなく、VBAで対応するとすれば、
コードの作成依頼になってしまうので、
一般機能での対応を参考にして、
質問者さんがコード作成をトライしてください。
いづれにしても、判断用テーブル(セル範囲で作成)を利用することをお勧めします。

回答
投稿日時: 23/03/24 11:06:19
投稿者: WinArrow

参考コード
 
対象シート:Sheet1 に入力規則の「入力メッセージを表示する」コードです。
カーソルが列Bに移動した時、実行されます。
 
Sheet1のシートモジュールに

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
Dim MSG As String
    If Target.Column <> 2 Then Exit Sub
    Target.Validation.Delete
    Select Case Target.Offset(, -1).Value
        Case "": Exit Sub
        Case 0
            Target.Value = 0
            Exit Sub
        Case 1
            Target.Value = 10
            Exit Sub
        Case 2: MSG = "20〜30"
        Case 4: MSG = "40〜80"
        Case 5: MSG = "90〜130"
        Case Else
            Exit Sub
    End Select
    With Target.Validation
        .Add Type:=xlValidateInputOnly, _
            AlertStyle:=xlValidAlertStop, _
            Operator:=xlBetween
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = "加給額入力"
            .InputMessage = "加給額を" & MSG & "の範囲で入力してください"
            .ShowInput = True
    End With

End Sub

トピックに返信