通常モジュールでは、リストに対してチェックサブルーチン:
Sub ListToCheck(rng As Range)
Dim cl As Range
Dim i As Integer
Dim bMatch As Boolean
Dim sListName As String
sListName = "sheet2!MyList" 'change this accrording to your needs
bMatch = False
For Each cl In rng.Cells
With WorksheetFunction
For i = 1 To .CountA(Range("MyList"))
If cl.Value = .Index(Range(sListName), i) Then bMatch = True
Next i
End With
With cl.Interior
If bMatch Then
.ColorIndex = 0
Else
.Color = vbYellow
End If
End With
bMatch = False
Next cl
End Sub
及び値は、2つのlong値の間に挿入された場合、確認のためにもう一つ:そして
Sub ValueToCheck(rng As Range, minV As Long, maxV As Long)
Dim cl As Range
Dim bOk As Boolean
For Each cl In rng.Cells
With cl
If IsNumeric(.Value) Then
If .Value < minV Or .Value > maxV Then
.Interior.Color = vbYellow
Else
.Interior.ColorIndex = 0
End If
Else
.Interior.Color = vbYellow
End If
End With
Next cl
End Sub
、内の1つの小さなマクロシートを使用する場合:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim col As Range
Dim colAdr As String
For Each col In Target.Columns
colAdr = col.Address(ReferenceStyle:=xlR1C1)
Select Case Right(colAdr, Len(colAdr) - InStrRev(colAdr, "C"))
Case Is = 1
ListToCheck col
Case Is = 2
ValueToCheck col, 1000000, 9999999
End Select
Next col
End Sub
私は最初の列がいくつかのリストに対してチェックされ、2番目のリストは1000000〜9999999になります。しかしそれに応じてそれを変更することができます。ご覧のように、私はExcelのバリデーションを使用していません。貼り付ける際に誤って上書きされる可能性があります。私は、有効でない細胞を黄色で塗りつぶすようにマクロを作ったが、何か他のことをするように命令することができる。誰かが1 000個以上の値を貼り付けようとしていると思われる場合は、msgboxをおすすめしません。
ルールを上書きする場合のメッセージの表示例はこちらhttps://stackoverflow.com/questions/29386971/force-pasted-values-to-obey-data-validation-rules – QHarr