本帖最後由 starry1314 於 2018-9-5 09:54 編輯
請教範例.rar (19.2 KB)
Q:目前程式碼INSTR會重複統計包含的值例(AK,K)
故想套用此公式取出所要的代號後再進行判斷
因在使用VBA呼叫內建函數會執行失敗( 不能用陣列?)
If Application.WorksheetFunction.Mid(A, 3,Match(, 0 * Mid(A, {4, 5, 6, 7, 8, 9}, 1), 1)) = arr(1, J) Then Jm = J:Exit For
請問可怎樣改寫呢??
- Sub 統計不屬於右側代號之數量()
- Dim A, xD, arr, Brr, J&, Jm&, k%
- Set xD = CreateObject("Scripting.Dictionary")
- arr = [工作表1!H1:X1]
- ReDim Brr(1 To 2, 1 To UBound(arr, 2))
- For Each A In Range([工作表1!A2], [工作表1!A1].Cells(Rows.Count, 1).End(xlUp)(3)).Value
- If A = "0" Or xD(A) = 1 Then GoTo 101
- Jm = 1
- For J = 1 To UBound(arr, 2) ' Step 2
- If InStr(A, arr(1, J)) Then Jm = J: Exit For
- Next J
- If InStr(A, "V") Then k = 2 Else k = 1
- Brr(k, Jm) = Brr(k, Jm) + 1
- xD(A) = 1
- 101: Next
- With Sheets("工作表1")
- .Range("G3:G4") = Brr
- End With
- End Sub
複製代碼
- Sub 統計右側代號之數量()
- Dim i
- For i = 8 To 25 'Cells(3, ActiveSheet.Columns.Count).End(xlToLeft).Column '18 '????
- 'Cells(5, ActiveSheet.Columns.Count).End(xlToLeft).Column 1
- Dim A, xD, t$(1), n&(1), 字數
- Set xD = CreateObject("Scripting.Dictionary")
- ?r?? = LenB(StrConv(Sheets("工作表1").Cells(2, i), vbFromUnicode))
- t(0) = Mid(Sheets("工作表1").Cells(2, i), 1, 字數 - 1)
- t(1) = Mid(Sheets("工作表1").Cells(2, i), 字數, 1)
- For Each A In Range([工作表1!A2], [工作表1!A1].Cells(Rows.Count, 1).End(xlUp)(3)).Value
- If A = "0" Or xD(A) = 1 Then GoTo 101
- If InStr(A, t(0)) Then
- If InStr(A, t(1)) Then n(1) = n(1) + 1 Else n(0) = n(0) + 1
- End If
- xD(A) = 1
- 101: Next
- Sheets("工作表1").Cells(3, i) = n(0)
- Sheets("工作表1").Cells(4, i) = n(1)
- xD.RemoveAll
- Erase t
- Erase n
- A = ""
- Next
複製代碼 |