Hỏi về cách liên kết nội dung trong Code với 1 ô trong bảng tính (2 người xem)

  • Thread starter Thread starter khamha
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
846
Nghề nghiệp
CNVC Laos
Chào các bạn,Các bạn cho hỏi là:mình muốn liên kết một phần nội dung trong Code với một ô trong bảng tính thì phải sửa lại Code như thế nào.
Code:
Sub Macro1()
ActiveSheet.Range("$A$1:$K$6004").AutoFilter Field:=1, Criteria1:=Array("1", _
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), Operator:=xlFilterValues
End Sub

Mình muốn:
Trong "1" sẽ liên kết với ô A2 trong Sheet 2 ,Khi ta thay đổi nội dung trong A2 là: 2 thì nội dung trong dấu nháy sẽ là: "2".
Trong "2" sẽ liên kết với ô B2 trong Sheet 2 ,Khi ta thay đổi nội dung trong B2 là: 5 thì nội dung trong dấu nháy sẽ là: "5".
...
Trong "12" sẽ liên kết với ô L12 trong Sheet 2 ,Khi ta thay đổi nội dung trong L12 là: 8 thì nội dung trong dấu nháy sẽ là: "8".
Các bạn xem File đính kèm,Cảm ơn.
 

File đính kèm

Mã:
Sub Macro1()
ActiveSheet.Range("$A$1:$K$6004").AutoFilter Field:=1, Criteria1:=Array([B][COLOR=#0000cd]Sheet2.[A2][/COLOR][/B][COLOR=#ff0000][/COLOR], _
        "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), Operator:=xlFilterValues
End Sub

Lâu quá mới lại đăng đàn, chúc khoẻ nha
 
Upvote 0
Mã:
Sub Macro1()
ActiveSheet.Range("$A$1:$K$6004").AutoFilter Field:=1, Criteria1:=Array([B][COLOR=#0000cd]Sheet2.[A2][/COLOR][/B], _
        "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), Operator:=xlFilterValues
End Sub

Lâu quá mới lại đăng đàn, chúc khoẻ nha
Cảm ơn bạn.Mình thử rồi nhưng nó không hoạt động,bạn xem lại cho mình với.
 
Upvote 0
Bạn thử cách này xem:
Sub Macro1()
ActiveSheet.Range("$A$1:$K$6004").AutoFilter Field:=1, Criteria1:=Array(Range("A2"), _
Range("B2"), Range("C2"), Range("D2"), Range("E2"), Range("F2"), Range("G2"), Range("H2"), Range("I2"), Range("J2"), Range("K2"), Range("L2")), Operator:=xlFilterValues
End Sub
 
Upvote 0
bạn bỏ Operator:=xlFilterValues là được
 
Upvote 0
Do mình không mở file được nên không test được. Mình chỉ xem sao cho hợp lý hàm array thôi. Còn câu lệnh cua Khamha đúng là không ổn:

-Criteria của AutoFilter là 1 String chứ không thể là 1 array được.
-Điều kiện tối đa 2 đièu kiện.

Để thực hiện được được lọc nhiều điều kiện thì ta nối tất cả thành chuỗi rồi dùng hàm Instr hay toán tử Like để kiểm tra rồi quyết định cho ẩn hay hiện dòng đó.
Đừng cố làm theo phương án đó nữa , xin lỗi bạn đã không xem kỹ toàn code
 
Upvote 0
Chà,Làm mãi mã không được,hay là bạn làm mẫu cho mình được không.
Vầy được không:
PHP:
Sub Macro1()
  ActiveSheet.Range("$A$1:$K$6004").AutoFilter 1, Array(CStr(Sheet2.[A2]), _
              "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), 7
End Sub
-------------------------------------------
-Criteria của AutoFilter là 1 String chứ không thể là 1 array được.
-Điều kiện tối đa 2 đièu kiện.
Code dạng này thuộc Excel 2007 đấy anh à!
 
Upvote 0
Vầy được không:
PHP:
Sub Macro1()
  ActiveSheet.Range("$A$1:$K$6004").AutoFilter 1, Array(CStr(Sheet2.[A2]), _
              "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), 7
End Sub
-------------------------------------------

Code dạng này thuộc Excel 2007 đấy anh à!
Sử dụng được rồi,Cảm ơn các bạn đã giúp,̣đúng như bạn ndu nói,cái này mình sử dụng trên Excel 2007.
Code:
Sub Macro1()
ActiveSheet.Range("$A$1:$K$6004").AutoFilter 1, Array(CStr(Sheet2.[A2]), _
CStr(Sheet2.[B2]), CStr(Sheet2.[C2]), CStr(Sheet2.[D2]), CStr(Sheet2.[E2]), CStr(Sheet2.[F2]), CStr(Sheet2.[G2]), CStr(Sheet2.[H2]), CStr(Sheet2.[I2]), CStr(Sheet2.[J2]), CStr(Sheet2.[K2]), CStr(Sheet2.[L2])), 7
End Sub
 
Upvote 0
Sử dụng được rồi,Cảm ơn các bạn đã giúp,̣đúng như bạn ndu nói,cái này mình sử dụng trên Excel 2007.
Code:
Sub Macro1()
ActiveSheet.Range("$A$1:$K$6004").AutoFilter 1, Array(CStr(Sheet2.[A2]), _
CStr(Sheet2.[B2]), CStr(Sheet2.[C2]), CStr(Sheet2.[D2]), CStr(Sheet2.[E2]), CStr(Sheet2.[F2]), CStr(Sheet2.[G2]), CStr(Sheet2.[H2]), CStr(Sheet2.[I2]), CStr(Sheet2.[J2]), CStr(Sheet2.[K2]), CStr(Sheet2.[L2])), 7
End Sub
Viết chi cho dài vậy?
Tôi có cách này:
PHP:
Sub Macro1()
  Dim Arr
  Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))
  Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7
End Sub
 
Upvote 0
Viết chi cho dài vậy?Tôi có cách này:
PHP:
Sub Macro1()  Dim Arr  Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))  Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7End Sub
đúng là ngắn gọn thật,cảm ơn bạn.còn một việc nữa nhờ bạn giúp là:sau khi filter xong thì sẽ tự động copy dữ liệu đã filter sang sheet3,một lần nữa cảm ơn bạn.
 
Upvote 0
đúng là ngắn gọn thật,cảm ơn bạn.còn một việc nữa nhờ bạn giúp là:sau khi filter xong thì sẽ tự động copy dữ liệu đã filter sang sheet3,một lần nữa cảm ơn bạn.
Thì bạn cứ copy bình thường thôi (dùng SpecialCells(12) để lấy dữ liệu không ẩn) ---> Record macro để biết code viết thế nào
Nếu bạn làm chưa được, hãy đưa dữ liệu đầy đủ lên đây!
Nói trước: Với dữ liệu lớn thì AutoFilter không phải là phương pháp tốt đâu!
 
Upvote 0
Thì bạn cứ copy bình thường thôi (dùng SpecialCells(12) để lấy dữ liệu không ẩn) ---> Record macro để biết code viết thế nàoNếu bạn làm chưa được, hãy đưa dữ liệu đầy đủ lên đây!Nói trước: Với dữ liệu lớn thì AutoFilter không phải là phương pháp tốt đâu!
khi filter dữ liệu là:65.536 dòng hoặc hơn(excel 2007),nhưng khi copy thì nhiều nhất là:6.000 dòng và 70 cột.theo bạn thì có khả thi không.cảm ơn.
 
Upvote 0
khi filter dữ liệu là:65.536 dòng hoặc hơn(excel 2007),nhưng khi copy thì nhiều nhất là:6.000 dòng và 70 cột.theo bạn thì có khả thi không.cảm ơn.
Filter với dữ liệu ít thì không có vấn đề (2000 dòng trở lại).. còn nếu nhiều hơn thì khó nói lắm --> Lỗi có thể xuất hiện bất cứ lúc nào, khi ấy lệnh copy sẽ copy toàn bộ kể cả dòng ẩn đấy bạn à
Vì vậy, với dữ liệu lớn, lời khuyên là dùng mảng. Phức tạp hơn nhưng sẽ không có bất cứ lỗi nào, đồng thời code dùng mảng sẽ cho tốc độ cực nhanh
 
Upvote 0
Filter với dữ liệu ít thì không có vấn đề (2000 dòng trở lại).. còn nếu nhiều hơn thì khó nói lắm --> Lỗi có thể xuất hiện bất cứ lúc nào, khi ấy lệnh copy sẽ copy toàn bộ kể cả dòng ẩn đấy bạn à
Vì vậy, với dữ liệu lớn, lời khuyên là dùng mảng. Phức tạp hơn nhưng sẽ không có bất cứ lỗi nào, đồng thời code dùng mảng sẽ cho tốc độ cực nhanh
Bạn có thể cho mình ví dụ về dùng mảng được không?Cảm ơn bạṇ (Bạn làm ví dụ trong File mình gửi lên chắc sẽ dễ hiểu)
 
Upvote 0
Hình như cái Code này của bạn ndu cũng là mảng.
Code:
Sub Macro1()
Dim Arr
Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))
Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7
End Sub
 
Upvote 0
Hình như cái Code này của bạn ndu cũng là mảng.
Code:
Sub Macro1()
Dim Arr
Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))
Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7
End Sub
Nếu Code trên là mảng,Thì nhờ bạn ndu và các bạn sửa lại cái Code Copy dữ liệu sau khi Filter này cho nó hoạt động theo mảng với,Cảm ơn các bạn.
Code:
Sub CopyAFilter()
Dim Rng As Range
With Sheet1
If Not .FilterMode Then
MsgBox "AutoFilter?": Exit Sub
End If
Set Rng = .AutoFilter.Range.Offset(1, 0).Resize(.AutoFilter.Range.Rows. _
Count - 1).SpecialCells(xlCellTypeVisible)
'set a range = to visible cells (excluding the header)
Rng.Copy Destination:=Sheet4.Range("A1")
End With
End Sub
( Code này mình tìm thấy trong bài của bạn:SA_DQ / http://www.giaiphapexcel.com/forum/showthread.php?1278-(-hững-ghi-chép-về-phương-thức-SpecialCells)
* Nhân đây cũng gửi lời xin phép đến bạn: SA_DQ.
 
Lần chỉnh sửa cuối:
Upvote 0
Viết chi cho dài vậy?
Tôi có cách này:
PHP:
Sub Macro1()
  Dim Arr
  Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))
  Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7
End Sub
Bạn ndu ơi,Có cách nào sửa lại Code cho nó hoạt động như sau:khi trong ô từ A2:L2 không có điều kiện lọc thì hệ thống sẽ không lọc gì cả,Thay vì bây giờ nếu ta
không điền dữ liệu vào trong ô từ A2:L2 thì hệ thống lại lọc những ô trống.Cảm ơn bạn.
Vì mình muốn lọc thêm một cột nữa:
Code:
Sub Macro1()
Dim Arr
Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))
Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7
Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!M2,""#""))"))
Sheet1.Range("A1:K6004").AutoFilter 2, Arr, 7
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn ndu ơi,Có cách nào sửa lại Code cho nó hoạt động như sau:khi trong ô từ A2:L2 không có điều kiện lọc thì hệ thống sẽ không lọc gì cả,Thay vì bây giờ nếu ta
không điền dữ liệu vào trong ô từ A2:L2 thì hệ thống lại lọc những ô trống.Cảm ơn bạn.
Vì mình muốn lọc thêm một cột nữa:
Code:
Sub Macro1()
Dim Arr
Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!A2:L2,""#""))"))
Sheet1.Range("A1:K6004").AutoFilter 1, Arr, 7
Arr = WorksheetFunction.Transpose(Evaluate("TRANSPOSE(TEXT(Sheet2!M2,""#""))"))
Sheet1.Range("A1:K6004").AutoFilter 2, Arr, 7
End Sub
Vì dữ liệu của bạn ít quá nên cũng không biết được bạn đang muốn làm điều gì
Vầy đi nha:
- Bạn đưa dữ liệu đầy đủ lên đây
- Mô ta ý định của bạn
Mọi người sẽ xem xét và viết code giúp bạn
(tôi cũng sẽ giúp trong khả năng hiểu biết của tôi)
 
Upvote 0
Web KT

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

Back
Top Bottom