返回列表 上一主題 發帖

物品分類

物品分類

是否能依物品下去分類?

物品.rar (7.6 KB)

回復 1# sillykin

試試看
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
With Target
   If .Row = 1 And .Column = 9 Then
      Range([j2], [j2].End(4)).ClearContents
      If .Value <> "" Then
         Set a = Range([c1], [c1].End(2)).Find([I1], , , xlWhole)
         For Each b In Range(Range(a.Address), Range(a.Address).Resize(Range("a1").End(4).Row))
            If b = 1 Then d.Add b.Offset(, 2 - b.Column), ""
         Next
         [j2].Resize(d.Count) = WorksheetFunction.Transpose(d.keys)
         Set d = Nothing
      Else: Exit Sub
      End If
   End If
End With
End Sub

TOP

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

Sub TEST()
Dim Arr, R&, C&, T$, N&
[J2:J6000].ClearContents
T = [i1]: If T = "" Then Exit Sub
Arr = Range([F1], [B65536].End(xlUp))
For C = 2 To UBound(Arr, 2)
    If Arr(1, C) <> T Then GoTo c01
For R = 2 To UBound(Arr)
    If Val(Arr(R, C)) > 0 Then N = N + 1: Arr(N, 1) = Arr(R, 1)
Next R
c01: Next C
If N > 0 Then [j2].Resize(N) = Arr
End Sub


'=============================

TOP

回復 4# 准提部林
感謝大大的回覆...
但還有一個小問題,是否能幫解決,如果要出現二種,是否能依選擇種類,列出物品名稱

666.jpg (110.97 KB)

666.jpg

物品-109.8.31.rar (8.42 KB)

TOP

Sub TEST()
Dim Arr, R&, C&, T$, N&
[J2:J6000].ClearContents
T = [i1]: If T = "" Then Exit Sub
Arr = Range([F1], [B65536].End(xlUp))
For C = 2 To UBound(Arr, 2)
    If Arr(1, C) <> T Then GoTo c01
For R = 2 To UBound(Arr)
    If Val(Arr(R, C)) > 0 Then N = N + 1: Arr(N, 1) = Arr(R, 1)
Next R
c01: Next C
If N > 0 Then [j2].Resize(N) = Arr
End Sub
但試過做二個上述分別執行,方法可行,但是否能一次性執行或簡單方式呢?

TOP

回復 6# sillykin
Sub TEST()
Dim Arr, Brr, R&, Rn&, C&, Cn&, T$, N&
[J2:N6000].ClearContents
T = [i1]: If T = "" Then Exit Sub
Arr = Range([F1], [B65536].End(xlUp))
ReDim Brr(1 To UBound(Arr), 1 To UBound(Arr, 2))
For C = 2 To UBound(Arr, 2)
    If InStr("_" & T, Arr(1, C)) < 2 Then GoTo c01
    Cn = Cn + 1: Rn = 0
For R = 2 To UBound(Arr)
    If Val(Arr(R, C)) > 0 Then
       Rn = Rn + 1: Brr(Rn, Cn) = Arr(R, 1)
       If Rn > N Then N = Rn
    End If
Next R
c01: Next C
If N > 0 Then [j2].Resize(N, Cn) = Brr
End Sub


'=========================

TOP

謝謝大大的協助
但這句語法不太懂
For C = 2 To UBound(Arr, 2)
    If InStr("_" & T, Arr(1, C)) < 2 Then GoTo c01
    Cn = Cn + 1: Rn = 0

TOP

回復 8# sillykin

instr 及 公式的 find 用法類似

msgbox instr("ACFT", "A") '--- =1
msgbox instr("_ACFT", "A") '--- =2
msgbox instr("_BACT", "")  '--- = 1

加 "_", 避免空字符返回1的誤判

TOP

回復 9# 准提部林


  感謝大大的回覆...
原來還有這的用法

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題