kết nối cell với textbox (1 người xem)

Liên hệ QC

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

authority

Thành viên chính thức
Tham gia
25/5/09
Bài viết
80
Được thích
3
em chào các anh ạ
các anh giúp em vấn đề này với ạ
trong file em gửi đính kèm
1.khi nhấn data thì trong textbox sẽ là dữ liệu cell E4
2.khi nhấn sort thì những giá trị sắp xếp là C1,C2,C3,...C10,C11 chứ không phải là C1,C10,C11,...C2..
các anh giúp em với ạ
 

File đính kèm

em chào các anh ạ
các anh giúp em vấn đề này với ạ
trong file em gửi đính kèm
1.khi nhấn data thì trong textbox sẽ là dữ liệu cell E4
2.khi nhấn sort thì những giá trị sắp xếp là C1,C2,C3,...C10,C11 chứ không phải là C1,C10,C11,...C2..
các anh giúp em với ạ
1. Bạn sửa lại code trong Sheet1 như sau:
[GPECODE=vb]Private Sub CommandButton1_Click()
With UserForm1
.TextBox1 = [E4]
.Show
End With
End Sub[/GPECODE]
2. Bạn muốn sắp xếp đúng như vậy thì phải nhập C01, C02,..., C10, C11,... vì nếu so sánh chuỗi thì rõ ràng "C19" < "C2" nên "C19" xếp trước "C2" là đúng rồi. Ngoài cách thay đổi cách nhập, bạn cũng có thể sử dụng 1 vùng phụ để xử lý dữ liệu rồi sắp xếp theo vùng này, cuối cùng gán giá trị ngược lại vùng ban đầu. Hoặc là sử dụng mảng để xử lý (cái món này mình dở ẹc nên không dám bàn).
 
Upvote 0
Vấn đề này bạn Record Macro là có code thôi

Ghi macro không giải quyết được gì với dạng chuỗi kết hợp với số đâu nhé viehoai. Vì với dạng này nó tính theo LEN của chuỗi ký tự.

Cụ thể là như thế này, ta có 2 dạng chuỗi ký tự:

(1) C1, C10, C100 ...

(2) C001, C010, C100 ...

Thì nó chỉ sắp xếp đúng dạng dữ liệu (2) mà thôi.

Vấn đề viết code này cho dạng (1) rất đau đầu đây. Nghĩa cũng chưa có phương thức gì để giải quyết cho triệt để, có thể các cao thủ khác có nhiều cao kiến chăng?
 
Upvote 0
em chào các anh ạ
các anh giúp em vấn đề này với ạ
trong file em gửi đính kèm
1.khi nhấn data thì trong textbox sẽ là dữ liệu cell E4
2.khi nhấn sort thì những giá trị sắp xếp là C1,C2,C3,...C10,C11 chứ không phải là C1,C10,C11,...C2..
các anh giúp em với ạ

Kiểu này mình có thể gọi là "tùy cơ ứng biến" để sắp xếp nhé.

Ta tạo một mảng lấy từ dữ liệu, sau đó loại bỏ ký tự "C" để trở về dạng số, gán vào cột cạnh dữ liệu mình sắp xếp, sau đó sắp xếp bao luôn dữ liệu kể cả cột phụ này, rồi chọn cột phụ này làm cột sắp xếp, cuối cùng là xóa cột phụ.

Bạn thử xem code nhé:

[GPECODE=vb]Sub sapxep()
Dim Rng As Range, Arr As Variant, r As Long
Set Rng = Sheet1.Range("D4:D21")
Arr = Rng.Value
For r = 1 To UBound(Arr)
Arr(r, 1) = Replace(Arr(r, 1), "C", 1, 1)
Next
With Rng.Offset(, -1)
.Value = Arr
.Resize(, 2).Sort .Resize(1, 1), 1
.ClearContents
End With
Set Rng = Nothing: Erase Arr
End Sub
[/GPECODE]


===========================================================

Phần thêm:

Nếu bạn muốn bấm lần thứ 1 nút SORT (màu xanh của bạn) thành sort từ A > Z và bấm lần tiếp theo sẽ ngược lại thì bạn dùng thủ tục sau:

[GPECODE=vb]Sub sapxep()
Dim Rng As Range, Arr As Variant, r As Long
Set Rng = Sheet1.Range("D4:D21")
Arr = Rng.Value
For r = 1 To UBound(Arr)
Arr(r, 1) = Replace(Arr(r, 1), "C", 1, 1)
Next

With Sheet1.Shapes(Application.Caller)
.AlternativeText = IIf(.AlternativeText = "1", "2", "1")
r = .AlternativeText
End With

With Rng.Offset(, -1)
.Value = Arr
.Resize(, 2).Sort .Resize(1, 1), r
.ClearContents
End With
Set Rng = Nothing: Erase Arr
End Sub
[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
trong khi đợi cao thủ có giải pháp hay, mình gởi bạn file này thử, hơi bị cùi bắp nhưng chạy được, mình chép cột của bạn ra một cột kế bên rồi loại "C" ra rồi sort.
 

File đính kèm

Upvote 0
trong khi đợi cao thủ có giải pháp hay, mình gởi bạn file này thử, hơi bị cùi bắp nhưng chạy được, mình chép cột của bạn ra một cột kế bên rồi loại "C" ra rồi sort.

Tùy vào từng trường hợp mà dùng hàm loại chữ khỏi cụm ký tự vừa ký số vừa ký tự, trong trường hợp cụ thể nào đó như bài này thì còn xài được, chứ dữ liệu kiểu dưới đây thì xem ra không ổn:

A10
C2
D1

Nếu loại chữ chắc là đuối rồi nhỉ?

Nhưng nếu hàm Tách số thì tôi nghĩ dùng hàm này sẽ ngắn gọn hơn, ở diễn đàn đã nói nhiều rồi mà:

[GPECODE=vb]Function TachSo(ByVal Txt As Variant) As Double
Set Temp = CreateObject("VBScript.RegExp")
Temp.Global = True
Temp.Pattern = "[^0-9]"
TachSo = Temp.Replace(Txt, "")
Set Temp = Nothing
End Function
[/GPECODE]
 
Upvote 0
Tôi nghỉ là tùy mình khai báo vào trong Temp.Pattern hoặc Const NUMERIC_CHARS = "0123456789.,&/" (như trong function tôi sử dụng), sau khi nó tách số ra thì còn lại các kí tự này.
tôi mới dowload từ google xuống một sub sử dụng để lọc tương tự như yêu trên, mà không cần phải chép sang cột khác. tuy nhiên tôi chưa có thời gian để chỉnh lại cho đúng với yêu cầu của bài này. nhờ anh xem giúp xem có chỉnh nó lại theo yêu cầu của bài này được ko? (nó ở module3)
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom