Tổng hợp theo điều kiện theo tiêu chí các mã số trong ngoặc

Liên hệ QC

nguyenmanhnam

Thành viên tiêu biểu
Tham gia
24/7/10
Bài viết
434
Được thích
266
Em xin nhờ mọi người giúp em bài toán tổng hợp theo điều kiện là các mã số trong dấu ngoặc (các mã số thay đổi).

Tonghop.jpg






Vì trình độ có hạn, em chưa giải quyết được đều phải làm thủ công, rất mong mọi người giúp đỡ
 

File đính kèm

Xin thày cho hỏi nếu lọc Text thì ^0-9,, nó sẽ được thay là gì? Tức em muốn hỏi một số đối tượng hay dùng nằm trong cái ngoặc [ ]ý mà.
Nói chung là nên học để biết từ cơ bản... Mấy cái "trò" này là VBScript ---> Tặng bạn file này về tự nghiên cứu nhé
Còn riêng phần thắc mắc ở trên (^0-9) bạn có thể mở file đính kèm, chuyển sang tab Search, gõ từ khóa Pattern vào sẽ có câu trả lời
-------------------
Ứng dụng của nó là topic này:
http://www.giaiphapexcel.com/forum/showthread.php?16983-Tách-số-không-dùng-vòng-lặp
 

File đính kèm

Upvote 0
Thưa thày, trong công thức =SUMPRODUCT((COUNTIF(D3,"*"&$A$3:$A$13&"*")*$B$3:$B$13)) có dấu * có phải để "dẹp bỏ" toàn bộ các chữ trong các ô A1:A3 vì khi có hai dấu * chặn đầu và cuối thì nó thay thế cho mọi ký tự chữ, chỉ quan tâm đến số thôi?

Hình như cũng chưa hẳn đúng, vì:


VD: tại sao tìm 121 mà dãy $A$3:$A$13 có 12 thôi nhưng Countif nó cũng ra kết quả là 1 được nhỉ?


(>>Ký tự * thay thế cho một chuỗi các ký tự ?)
 
Lần chỉnh sửa cuối:
Upvote 0
Global,Pattern là thuộc tính gì hả thày?

còn cái Dấu mũ (^) nữa, (lũy thừa chăng?) chắc là không phải).

Các thày giải thích giúp em với.

Tôi mới học như bạn thôi, tôi hiểu đến đâu nói đến đó nhé, nếu sai nhờ các thày chỉ thêm:

1. Global = True tức nếu tìm thấy thì lọc ra.

2. Theo như tôi hiểu Pattern nó có các sự lựa chọn tựa như chức năng AutoFilter trong Excel , ví dụ như:
\W: Lọc riêng tất cả các ký tự là chữ thông thường (lọc tất cả các ký tự thông thường hay gõ văn bản ra)
\w: Lọc ra tất cả ký tự đặc biệt.
[0-9] <=> \d: lọc ra tất cả những kí tự không phải là số
[^0-9]: Chỉ lọc ra các con số.
[a-z] lọc ra những ký tự không phải là chữ (số, kí tự đặc biệt khác...)
[^a-z] ngược lại chỉ lọc ra chữ thôi (có ^ nghĩa là ngược lại).

…..
Các ký tự bình thường khác bạn chỉ muốn lọc ra riêng lẻ theo ý muốn thì thêm ký tự đó vào "\..." hoặc "[^...]", nếu có nhiều ký tự cần lọc thì các ký tự cách nhau dấu phảy (,). Ví dụ .Pattern= "\a" tức là chỉ lọc riêng a thôi (Cái này thì tôi không chắc lắm vì tôi thí nghiệm thấy đúng trong 1 số trường hợp thử).
 
Lần chỉnh sửa cuối:
Upvote 0
Em thấy VBScript.RegExp rât tuyệt vời trong việc tách, em chưa có nhiều kinh nghiệm lắm nhưng không biết nó có thể áp dụng trong một số trường hợp khác không?

Ví dụ:

ô A1 có nội dung là Bê tông dầm D3: 2*(1+6) làm sao mà nó chỉ tính các số sau dấu : có được không ah, hay là phải quay về vòng lặp?

Kết quả: Tức B1=Tach(A1)=14
 
Upvote 0
Em thấy VBScript.RegExp rât tuyệt vời trong việc tách, em chưa có nhiều kinh nghiệm lắm nhưng không biết nó có thể áp dụng trong một số trường hợp khác không?

Ví dụ:

ô A1 có nội dung là Bê tông dầm D3: 2*(1+6) làm sao mà nó chỉ tính các số sau dấu : có được không ah, hay là phải quay về vòng lặp?

Kết quả: Tức B1=Tach(A1)=14

Thì bạn tách lấy từ sau dấu 2 chấm, ra được kết quả thì cho vào xử lý thôi
Ví dụ:
PHP:
Function ValExp(ByVal Exp As String) As Double
  Dim tmp As String
  On Error Resume Next
  tmp = Mid(Exp, InStr(Exp, ":") + 1, Len(Exp))
  With CreateObject("VBScript.RegExp")
    .Global = True: .Pattern = "[^0-9 + - * / . ( )]"
    ValExp = Evaluate(.Replace(tmp, ""))
  End With
End Function
 
Upvote 0
Em thấy VBScript.RegExp rât tuyệt vời trong việc tách, em chưa có nhiều kinh nghiệm lắm nhưng không biết nó có thể áp dụng trong một số trường hợp khác không?

Ví dụ:

ô A1 có nội dung là Bê tông dầm D3: 2*(1+6) làm sao mà nó chỉ tính các số sau dấu : có được không ah, hay là phải quay về vòng lặp?

Kết quả: Tức B1=Tach(A1)=14
Mình có thể dùng cách này mình chưa viết Function, bạn có thể dựa vào mà viết Function
Với A1 là dữ liệu của bạn
PHP:
Sub test()
With CreateObject("VBScript.RegExp")
    .Global = True:    .Pattern = "(.*):"
Range("b1").Value = Evaluate(.Replace(Range("a1").Value, ""))
End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom