Đổi tên Sheet nếu tìm được column có nội dung cần tìm

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
460
Được thích
19
Em chào mọi người ạ!

Em có file như đính kèm…. e muốn duyệt tất cả các Sheet để tìm xem Sheet nào mà dòng 2 có các cột với tên "code", "name", "quantity" thì sẽ đổi tên Sheet thành "Found".. Các cột liên tục thay đổi vị trí, nhưng tên cột thì fix ạ.

Vì lúc đầu không biết là Sheet "Found" có tồn tại chưa nên phải duyệt để tìm xem Sheet nào tên là "Found" thì đổi thành tên khác…. Sau đó duyệt lại để hiện như trên ạ.

Rất mong mọi người hỗ trợ ạ.

Em xin cảm ơn!
 

File đính kèm

  • Book1.xlsx
    9.2 KB · Đọc: 9
Bạn xem thử đúng ý bạn chưa nhé.
 

File đính kèm

  • Book1.xlsm
    21.4 KB · Đọc: 3
Upvote 0
Upvote 0
Tiếng Tây ba rọi trong trường hợp này là trật nghĩa hết trơn.

1609302380180.png
Điều kiện ở đây tới 3 columns lận, không phải một column.

... Các cột liên tục thay đổi vị trí, nhưng tên cột thì fix ạ.
Nếu muốn nói nghĩa "cố định", thì tiếng Tây là fixed chứ không phải fix.
Nếu dùng 'fix' thì ngầm ý là ở đâu đó hay ai đó xác định (sửa) nó.
 
Upvote 0
Em chào mọi người ạ!

Em có file như đính kèm…. e muốn duyệt tất cả các Sheet để tìm xem Sheet nào mà dòng 2 có các cột với tên "code", "name", "quantity" thì sẽ đổi tên Sheet thành "Found".. Các cột liên tục thay đổi vị trí, nhưng tên cột thì fix ạ.

Vì lúc đầu không biết là Sheet "Found" có tồn tại chưa nên phải duyệt để tìm xem Sheet nào tên là "Found" thì đổi thành tên khác…. Sau đó duyệt lại để hiện như trên ạ.

Rất mong mọi người hỗ trợ ạ.

Em xin cảm ơn!
Chạy code thử
Mã:
Sub ABC()
  Dim sh As Worksheet, cSh&, Newname$, eCol&, i&, j&
 
  cSh = Sheets.Count
  For i = 1 To cSh
    If Sheets(i).Name = "Found" Then
      For n = 1 To 1000
        Newname = "Found" & "_" & n
        For i2 = 1 To cSh
          If Sheets(i2).Name = Newname Then Exit For
        Next i2
        If i2 = cSh + 1 Then
          Sheets(i).Name = Newname
          Exit For
        End If
      Next n
      Exit For
    End If
  Next i
  For Each sh In Sheets
    eCol = sh.Cells(2, 16000).End(xlToLeft).Column
    If eCol > 2 Then
      For j = 1 To eCol
        If InStr(1, "|code|name|quantity|", "|" & sh.Cells(2, j).Value & "|", vbTextCompare) > 0 Then k = k + 1
        If k = 3 Then
          sh.Name = "Found"
          Exit Sub
        End If
      Next j
    End If
  Next sh
End Sub
 
Upvote 0
Theo tôi hiểu code thì không đúng.
Thứ nhất: code đổi tên tất cả 'Founds' trước khi duyệt điều kiện. Nếu điều kiện không hề có thì chả còn sheet nào tên Found cả.
Thứ hai: code chỉ đổi tên 'Found' một lần. Nếu có nhiều sheets thoả điều kiện thì phải chạy code nhiều lần.

Bài này chưa viết code được vì thớt còn nhiều điều chưa nêu rõ ra:
1. có nên làm như điều thứ nhất bên trên không? Tức là nếu không có sheet nào thoả điều kiện thì sẽ không còn sheet nào tên 'Found'
2. điều 2 bên trên (khi có nhiều sheets thoả điều kiện) sử lý thế nào?
 
Upvote 0
Theo tôi hiểu code thì không đúng.
Thứ nhất: code đổi tên tất cả 'Founds' trước khi duyệt điều kiện. Nếu điều kiện không hề có thì chả còn sheet nào tên Found cả.
Thứ hai: code chỉ đổi tên 'Found' một lần. Nếu có nhiều sheets thoả điều kiện thì phải chạy code nhiều lần.

Bài này chưa viết code được vì thớt còn nhiều điều chưa nêu rõ ra:
1. có nên làm như điều thứ nhất bên trên không? Tức là nếu không có sheet nào thoả điều kiện thì sẽ không còn sheet nào tên 'Found'
2. điều 2 bên trên (khi có nhiều sheets thoả điều kiện) sử lý thế nào?
Mình nghỉ thớt muốn nhận diện sheet thỏa điều kiện qua tên sheet "Found", vì vậy khi không có sheet nào thoả điều kiện thì không có sheet "Found"
Nếu nhiều sheet thỏa điều kiện chắc chắn chỉ có 1 sheet tên "Found", nếu chỉ nhận diện 1 sheet thì code ổn, nếu cần nhận diện nhiều sheet code cần viết lại :)
 
Upvote 0
Dạ em xin cảm ơn tất cả mọi người ạ.

Cả 2 anh @HieuCD và anh @VetMini đều đúng ạ.... nhưng việc xử lý các Sheet có data như nhau thì em đã làm được rồi ạ, nên trong bài toán này thì sẽ chỉ tồn tại 1 Sheet có dữ lieu đúng format em cần ạ.

Em xin cảm ơn và chúc sức khỏe tất cả mọi người!
 
Upvote 0
Web KT

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

Back
Top Bottom