2017-05-11 4 views
0

セルA5では、リストの検証が行われます(Cat A、Cat BおよびCat C)。ユーザがカテゴリAを選択すると、セルC5には、ユーザにセルを記入するように指示する数式が入力されます。ユーザーがセルC5に移動すると、数式は表示されず、ドロップダウンまたはリストの検証が行われます(はいまたはいいえ)。データ検証の変更のためのExcelマクロ

ユーザーがセルA5に戻ってカテゴリCを選択すると、セルC5に元の数式が入力され、ユーザーはセルを再セルします。ユーザーがセルC5に行くと、数式はなくなりますが、ドロップダウンまたはリストの検証(はい/いいえ)

これに対して簡単なマクロを書くことは可能ですか?誰でもどうぞ?どうもありがとうございます。

私はどのように知っていると思いますが、より多くの考えが必要です。

+0

私は[excel-vba]タグを追加しました。そうしないと、誰もその質問が表示されません。しかし、人々が助けようとする前に、彼らはあなたが働くと思うコードを見たいと思うでしょう。 – YowE3K

+0

これには*簡単なマクロを書くことはできませんが、VBAを使うことは間違いありません。ユーザーのアクションに応答するには、worksheet_changeおよびworksheet_selectionchangeイベントを使用する必要があります。 –

答えて

0

これはかなり簡単なコードですが、VBAを書かなかったのかどうかは分かりません。 2つのサブルーチンが必要です。 VBEで "Project - VBAProject"ペインのワークシートをダブルクリックしてください。鉱山は

enter image description here

我々はワークシートのイベントに基づいてサブルーチンを使用しようとしている「シート1」タブで、ブック「Book1.xlsという」用に構築されています。イベントは、VBAのコードを起動するフロントエンド(セルの選択など)で発生するものです。

  1. SelectionChange - このワークシートイベントは、ユーザーがセル/範囲の選​​択を変更するたびに発生します。ユーザーがセルC5に切り替えたかどうかを検出するために使用します。

  2. 変更 - このワークシートのイベントは、誰かがセルの値を変更したときに発生します。私たちは、A5は、以下を置き、あなたのVBEのコードエディタペインで

を変更されたかどうかを確認するためにそれを使用する:

Private Sub Worksheet_Change(ByVal Target As Range)  
    'This subroutine fires when a cell value changes in this worksheet. 

    'did someone change something specifically in cell A5? 
    If Not Intersect(Target, Sheet1.Range("A5")) Is Nothing Then 

     'Is the value A or C? 
     If Sheet1.Range("A5").Value = "A" Or Sheet1.Range("A5").Value = "C" Then 
      'Remove any data validation for this cell: 
      Sheet1.Range("C5").Validation.Delete 

      'and change the value of C5 to "Fill in this cell" 
      Sheet1.Range("C5").Value = "Fill in this cell" 

     End If 
    End If    
End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    'This subroutine fires when a user selects a different cell or range. 
    'So... it fires ALL The time so the next line is super important. 

    'Did someone change selection specifically to cell C5? 
    If Not Intersect(Target, Sheet1.Range("C5")) Is Nothing Then 

     'Is the value currently "Fill in this cell"? 
     If Sheet1.Range("C5").Value = "Fill in this cell" Then 

      'Empty the cell 
      Sheet1.Range("C5").Value = "" 

      'Add data validation to some list somewhere 
      With Sheet1.Range("C5").Validation 
       .Delete 
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
       xlBetween, Formula1:="=$J$1:$J$4" 'This the range that the list exists in 
       .IgnoreBlank = True 
       .InCellDropdown = True 
       .InputTitle = "" 
       .ErrorTitle = "" 
       .InputMessage = "" 
       .ErrorMessage = "" 
       .ShowInput = True 
       .ShowError = True 
      End With 
     End If 
    End If 
End Sub 

私はコメントで重要なものを指摘してきました。あなたのニーズに合うように、おそらくそれを少し猿にする必要があります。最も顕著なのは、セル検証コードです。現在、C5のデータ検証はJ1:J4に設定されています。あなたのニーズに合わせてそれを変更してください。

+0

ありがとうございました。これはとても役に立ちます:) –

関連する問題