我有一個帶有計數器的宏,用于滿足特定條件的唯一值。正如您在影像上看到的,我在 F 列中有唯一值串列。宏檢查值是否列在 AE 列中(可以包含重復的行)并檢查 AH 列中是否沒有“OB”。然后回傳它在單元格 K2 中找到的值。但是我需要這個計數器來在 AD 列中列出這些值,但我正在努力實作它。我檢查了許多論壇并設法使 Excel 崩潰了兩次。任何想法如何實作它?

Dim myTbl As range, mStr As String, Miss As Long, xCol As Variant
Set myTbl = Sheets("OB").range("AE2") '
xCol = "AH"
mStr = ""
Set myTbl = range(myTbl, myTbl.End(xlDown).Offset(0, 1))
xCol = Cells(1, xCol).Column - myTbl.Cells(1, 1).Column 1
For i = 1 To myTbl.Rows.count
If myTbl.Cells(i, 1) <> "" Then
If myTbl.Cells(i, xCol) <> "OB" And InStr(1, mStr, "##" & myTbl.Cells(i, 1), vbTextCompare) = 0 Then
mStr = mStr & "##" & myTbl.Cells(i, 1)
Miss = Miss 1
End If
End If
Next i
If Miss > 0 Then
range("K2") = Miss & " still active"
range("K2").Font.ColorIndex = 46
Else
range("K2") = "None"
range("K2").Font.ColorIndex = 10
End If
uj5u.com熱心網友回復:
請測驗下一個代碼。它還能夠回傳每個Value x已找到的出現次數(如果每個都存在多個):
Sub ExtractUniqueCondValues()
Dim sh As Worksheet, lastR As Long, arr, i As Long, dict As Object
Set sh = Sheets("OB")
lastR = sh.Range("AE" & sh.rows.count).End(xlUp).row
arr = sh.Range("AE2:AH" & lastR).Value
Set dict = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr)
If arr(i, 4) <> "OB" Then dict(arr(i, 1)) = dict(arr(i, 1)) 1
Next i
sh.Range("K2").Value = dict.count
sh.Range("AD2").Resize(dict.count, 1).Value = Application.Transpose(dict.Keys)
End Sub
關于每個“值 x”元素的出現次數,它可以在相鄰列“值 2| 1 and值 4”中回傳 | 2,對于您的圖片案例...當然,如果它可能與您的目的相關。字典已經保存了這些資料。
uj5u.com熱心網友回復:
也許使用公式是您的選擇?請參見 G 列,其中 G2 中的公式如下所示并向下復制。
=IF(COUNTIFS(AE:AE,F2,AH:AH,"<>OB")>0,F2,"")
使用CountorCountifs可能是替代 VBA 的選項。

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521979.html
標籤:擅长vba
上一篇:使用VBA添加到不規則單元格選擇
