本帖最后由 hasyh2008 于 2022-4-20 17:26 编辑
SHEET1中:
Private Sub Worksheet_Activate()
Dim Arr()
Dim X%, I%
Dim Rng As Range
On Error Resume Next
With Sheet1.Cells(2, 2).Validation
.Delete
Set Rng = Sheet2.Range("J4:V4")
X = Rng.Columns.Count
ReDim Arr(1 To X)
For I = 1 To X
Arr(I) = Rng.Cells(1, I)
Next
.Add Type:=3, AlertStyle:=1, Operator:=1, Formula1:=VBA.Join(Arr, ",") '来自一维数组
.ErrorMessage = "输入的数值有误,请重新输入!"
End With
Set Rng = Nothing
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Arr(), Brr(1 To 10000, 1 To 9)
Dim Str$
Dim X%, Y%, I%, K%
On Error Resume Next
If Target.Address = Range("B2").Address Then
Str = Sheet1.Range("B2").Text
Arr = Sheet2.Range("A1").CurrentRegion
Sheet3.Name = Str
Sheet3.Range("A2:I10000").ClearContents
K = 1
For Y = 10 To 22
For X = 6 To UBound(Arr)
If Arr(4, Y) = Str And Arr(X, Y) > 0 Then
Brr(K, 1) = Str
For I = 2 To 8
Brr(K, I) = Arr(X, I)
Next I
Brr(K, 9) = Arr(X, Y)
K = K + 1
End If
Next X
Next Y
End If
Sheet3.Range("A2").Resize(K, 9) = Brr
End Sub