データ入力における Excel UDF と条件付きカスタム データ検証の組み合わせ

データ入力における Excel UDF と条件付きカスタム データ検証の組み合わせ

調査によると、これは VBA コードを使用せずには不可能かもしれませんが、それでも、尋ねる価値はあると思います。 ユーザーがセルにデータを入力できるのは、直前のセルが特定の値である場合のみにしたいのです。

たとえば、A1に、、、、という値を持つドロップダウンリストがあります。StaffユーザーStudentが、、、を選択Managerした場合、BoardStaffStudentManagerA1の値はB1自動的に生成されるユーディーエフ IF式ですが、A1で選択された値が の場合Board、ユーザーは特定の数値を入力できます。B1

カスタム検証は真実または間違いの数式タブに入力できる数式が存在しません。カスタムデータ検証窓。

それで、セルに数式を入力して、選択肢がない場合は数式が存在しないという回避策はありますか?A1Board

これがかなり理解しやすいことを願います。

そうでない場合、この問題を解決できるコード構成について誰か助けていただけませんか? 私の VBA の知識はまだ非常に素人です。

したがって、私の知識からすると、この種の構造のコードが適用されると思われます。

If Select Case Range(A1).Value = "Staff" Then B1 = Application.WorksheetFunction. (Since a Match function is employed) ElseIf Select Case Range(A1).Value = "Student" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Manager" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Board" Then (My knowledge fails me here) Else B1 ="" End If

できれば、私はあまり使いたくないのですがInputBox

ご返信ありがとうございます。

答え1

何か見落としがない限り、UDF は VBA で記述されているため、ワークブックにはすでにコードがいくつか含まれています。

また、ユーザーが意図しないセルにデータを入力できないようにするために、ワークブックがロックされていると思われます。

これらの仮定に基づいて、疑似コードをある程度整理し、既存の UDF にいくつかのコード行を追加して変更します。

Dim refCell as Range
refCell = ThisWorkbook.Worksheets(mySheet).Range("A1")
Dim targetCell as Range
targetCell = ThisWorkbook.Worksheets(mySheet).Range("B1")
With refCell
  If .Value = "Staff" or .Value = "Manager" or .Value = "Board" then
    targetCell.Locked = True
    'Call your existing UDF code here to generate the value
  Else
    targetCell.Locked = False
  End If
End With

これで開始できるはずです。

関連情報