ワークブックのシート(シート2)の列Dに値があり、その値は数式から導出され、列Cセルの長い値の最終部分のみを取得します。長い値は、ダブルクリックで列Cに自動的に入力されます。別のシート(Sheet5)には、そのシートのC列に値のリストがあります。Sheet2の列Dの値のいずれかがSheet5の列Cの値のいずれかと等しい場合、Sheet2のF列のセルを赤に変更します。Sheet2のF列セルが赤になると、列Dの値に応じて、赤色のセルがクリック可能になり、列Dの値に関連付けられた参照値を一覧表示する別のシートに移動します。以下のコードそれだけです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446"))
Dim CellF As Range, CellD As Range, Cell As Range
If Not Application.Intersect(c, Range(Target.Address)) Is Nothing Then
Set CellF = Range("F" & Target.Row)
Set CellD = Range("D" & Target.Row)
If CellF.Value <> "" And getMacroDictionary.Exists(CellD.Text) Then
CellF.Interior.ColorIndex = 3
Else
CellF.Interior.ColorIndex = 0
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim key As String, dic As Object
Set sourceRange = Nothing
If Target.Column = 6 And Target.Cells.Count = 1 And Target.Interior.ColorIndex = 3 Then
Set sourceRange = Target
Set dic = getMacroDictionary
key = Target.Offset(0, -2).Value2
If dic.Exists(key) Then Application.Run dic(key)
End If
End Sub
Function getMacroDictionary() As Object
Dim dic As Object
Set dic = CreateObject("SCripting.Dictionary")
dic.Add "1000GP", "gotoref1"
dic.Add "1000MM", "gotoref2"
dic.Add "19FEST", "gotoref3"
dic.Add "20IEDU", "gotoref4"
dic.Add "20ONLC", "gotoref5"
dic.Add "20PART", "gotoref6"
dic.Add "20PRDV", "gotoref7"
dic.Add "20SPPR", "gotoref8"
dic.Add "22DANC", "gotoref9"
dic.Add "22LFLC", "gotoref10"
dic.Add "22MEDA", "gotoref11"
dic.Add "530CCH", "gotoref12"
dic.Add "60PUBL", "gotoref13"
dic.Add "74GA01", "gotoref14"
dic.Add "74GA17", "gotoref15"
dic.Add "74GA99", "gotoref16"
dic.Add "78REDV", "gotoref17"
Set getMacroDictionary = dic
End Function
ハードコーディングを回避する最善の方法は、配列を作成することだと思いました。最初のサブでは、コメントアウトされたコードのスニペットが表示されますが、それをやろうとしましたが、特定の値に関連付けられているため、さまざまなマクロを呼び出す方法がわかりません。
助けてくれてありがとう!
ワークブック自体の非表示シートに「0GP」、「0MM」、「FEST」などの値を入れて、それを使用してコードを駆動してみませんか?それぞれの隣に、参照コードを配置できます。あなたは、Excelがデータのための場所である、ハードコードデータにする必要はありません
—
ロブ・セジウィック
@RobSedgwick私はそれを持っています。「0GPのようにリストした各アカウントコードには、多くの潜在的な参照コードがあります。したがって、上記のハードコードした各コードには、多くの参照コードをリストする独自のシートがあります。参照コードはF列のセルに格納されます。目標は、F列のセルを赤に変えて、D列のアカウントコードに参照コードが必要であることを示し、F列のセルが赤になるとクリック可能になり、クリックするとマクロを呼び出して、その値に関連付けられているすべてのアカウントコードを示している非表示のシートへのユーザー。
—
anve
ワークシートコレクションをループして、すべてのシート名をハードコーディングするのではなく、sheet.Nameを確認できます。私があなたの2番目のサブを理解している限り、あなたはその名前のシートに行きたいだけなので、Worksheets(sheet).Activateのようなものがそれをするべきですか?
—
ロブセジウィック