Tạo đường dẫn theo cây thư mục

Liên hệ QC

theducw87

Thành viên chính thức
Tham gia
18/3/11
Bài viết
73
Được thích
1
Chào các bác.
Hiện tại em đang phải làm đường dẫn theo cây thư mục có sẵn. Tuy nhiên việc làm thủ công rất dễ nhầm và mất nhiều thời gian. Các bác có thể giúp em viết một hàm để làm công việc này nhanh và chính xác không ạ.
Xin cảm ơn các bác.

Untitled.jpg
 

File đính kèm

  • PROJECT'S.xlsx
    17.7 KB · Đọc: 31
Bạn có thể tham khảo sử dụng hàm UDF tree2Path dưới đây:
Gõ tại ô J3 =tree2Path($A$3,$A$3:G3)
Nhấn sao chép, chọn vùng ô nhấn chuột phải và chọn dán FX.

JavaScript:
Function tree2Path(MainKey As Range, tree As Range, Optional separator$ = "\") As String
  If (tree.Row + tree.Rows.Count - 1) = MainKey.Row Then tree2Path = MainKey: Exit Function
  Dim a, r, c%, lc%, s$, ir&, ic%
  a = tree.value: lc = tree.Columns.Count: ir = tree.Rows.Count
  For c = lc To 1 Step -1
    If a(ir, c) <> Empty Then s = a(ir, c): c = c - 1: Exit For
  Next
  If c > 0 Then
    For r = ir - 1 To 1 Step -1
      If a(r, c) <> Empty Then
        s = a(r, c) & separator & s: c = c - 1: If c = 0 Then Exit For
      Else
        For ic = c - 1 To 1 Step -1
          If a(r, ic) <> Empty Then Exit Function
        Next
      End If
    Next
  End If
  tree2Path = IIf(s <> Empty, MainKey & separator, "") & s
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể tham khảo sử dụng hàm UDF tree2Path dưới đây:
Gõ tại ô J3 =tree2Path($A$3,$A3,$A$3:G3)

JavaScript:
Function tree2Path(MainKey As Range, value As Range, tree As Range, Optional separator$ = "\") As String
  If value.Row = MainKey.Row Then tree2Path = MainKey: Exit Function
  Dim a, r, c%, lc%, s$, ir&
  a = tree: lc = tree.Columns.Count: ir = value.Row - tree.Row + 1
  For c = lc To 1 Step -1
    If a(ir, c) <> Empty Then s = a(ir, c): c = c - 1: Exit For
  Next
  If c > 0 Then
    For r = ir To 1 Step -1
      If a(r, c) <> Empty Then s = a(r, c) & separator & s: c = c - 1: If c = 0 Then Exit For
    Next
  End If
  tree2Path = IIf(s <> Empty, MainKey & separator, "") & s
End Function
Hay quá, tớ mò hàm mà không nối được. :D :D :D
 
Upvote 0
Bạn có thể tham khảo sử dụng hàm UDF tree2Path dưới đây:
Gõ tại ô J3 =tree2Path($A$3,$A3,$A$3:G3)

JavaScript:
Function tree2Path(MainKey As Range, value As Range, tree As Range, Optional separator$ = "\") As String
  If value.Row = MainKey.Row Then tree2Path = MainKey: Exit Function
  Dim a, r, c%, lc%, s$, ir&, ic%
  a = tree: lc = tree.Columns.Count: ir = value.Row - tree.Row + 1
  For c = lc To 1 Step -1
    If a(ir, c) <> Empty Then s = a(ir, c): c = c - 1: Exit For
  Next
  If c > 0 Then
    For r = ir To 1 Step -1
      If a(r, c) <> Empty Then
        s = a(r, c) & separator & s: c = c - 1: If c = 0 Then Exit For
      Else
        For ic = lc To 1 Step -1
          If a(r, ic) <> Empty Then Exit Function
        Next
      End If
    Next
  End If
  tree2Path = IIf(s <> Empty, MainKey & separator, "") & s
End Function
Cảm ơn bác, em có làm theo hướng dẫn của bác nhưng lúc em copy hàm xuống dưới thì từ dòng 5 đổ đi trả về kết quả trắng bác ạ.
1681952618523.png
 
Upvote 0
Upvote 0
Sai thì nhận sai. Việc gì phải chối. --=0
Mã:
J4=IFERROR(LOOKUP(2,1/LEN(OFFSET(A$3:A3,,MATCH("*",A4:G4,)-2)),J$3:J3),$J$3)&"\"&HLOOKUP("?*",A4:G4,1,)
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom