- Tham gia
- 23/3/16
- Bài viết
- 705
- Được thích
- 52
Sub Macro1()
Dim txtFind As Variant, lastRow As Long, i As Long
txtFind = Range("e3").Value
lastRow = Cells(Rows.Count, "b").End(xlUp).Row
For Each cell In Range("b3:b" & lastRow)
If UCase(cell.Value) = UCase(txtFind) Then
Range("h3").Offset(i).Value = cell.Row
i = i + 1
End If
Next cell
End Sub
Function LKDong(Rng As Range, KT As String)
Dim Arr()
Dim J As Long, W As Long
Arr() = Rng.Value
ReDim dArr(1 To UBound(Arr()), 1 To 1) As String
For J = 1 To UBound(Arr())
If UCase$(Arr(J, 1)) = UCase$(KT) Then
W = W + 1: dArr(W, 1) = CStr(J)
End If
Next J
LKDong = dArr()
End Function
Học VBA ngay đi bạn. Sao cứ dựa vào sự giúp đỡ. Nó Quá đơn giản. Sản Phẩm trí tuệ mà mình tự tạo ra mới gọi là ý nghĩa.Chào cả nhà GPE !.Đánh chử thì hơi lòng vòng em gửi hình mọi người xem sẽ hiểu ngay .( Lưu ý File đính kèm e demo cho mọi người hiểu chứ File thực tế dử liệu của em khoảng 30.000 dòng ) XIn chân thành cảm ơn !
View attachment 209024
Học thì lúc nào kiếm cơm?Học VBA ngay đi bạn. Sao cứ dựa vào sự giúp đỡ. Nó Quá đơn giản. Sản Phẩm trí tuệ mà mình tự tạo ra mới gọi là ý nghĩa.
2./ Nếu nhiều cỡ dưới vạn thì nên đưa vô mảng vùng dữ liệu nguồn & duyệt1./ Nếu dữ liệu không quá nhiều, bạn thử code này ạ:
PHP:Sub Macro1() ' . . . . . ' End Sub
Thầy cứ nói "thời gian đâu mà học". Có khi người ta lại có nhiều thời gian ăn chơi.Học thì lúc nào kiếm cơm?
Người ta viết phần mềm bán, thời gian 24 tiếng chỉ đủ để lắp ghép những cái mình làm được và những cái đi nhờ, sao cho chúng đồng bộ. Rồi còn test trước khi giao hàng nữa. Đơn hàng thì nhiều. Thế thời gian đâu để học VBA?
Vấn đề không phải là khó hay dễ mà là thời gian không có. Và năng suất. Bạn nhận 1 đơn đặt hàng. Nếu bạn biết và tự làm hết mất 7 ngày. Thế nếu bạn tự làm 4/7 công việc còn 3/7 nhờ GPE thì sao? Thì bạn mất 4 ngày, và trong 4 ngày đó GPE cũng hoàn thành 3/7 còn lại. Như vậy bạn chỉ mất 4 ngày. Có thể sau 4 ngày nhận tiếp đơn hàng mới, và nói với khách cũ chi thêm tiền bồi dưỡng vì đơn hàng được làm với ưu tiên về thời gian.
Cảm ơn bác @SA_DQ đã chỉ dẫn thêm cho cháu cách sử dụng mảng.2./ Nếu nhiều cỡ dưới vạn thì nên đưa vô mảng vùng dữ liệu nguồn & duyệt
3./ Nếu trên vạn thì kết quả trong quá trình duyệt bỡi (2) nên đưa vô mảng khác (làm mảng thành tựu)
Nam mô a di Đà Lạt!
Sub LKDong2()
Dim Arr()
Dim J As Long, W As Long
Dim lastRow As Long, txtFind As Variant
lastRow = Cells(Rows.Count, "b").End(xlUp).Row
Arr() = Range("b3:b" & lastRow).Value
txtFind = Range("e3").Value
ReDim dArr(1 To UBound(Arr()), 1 To 1) As Variant
For J = 1 To UBound(Arr())
If UCase$(Arr(J, 1)) = UCase$(txtFind) Then
W = W + 1
dArr(W, 1) = CStr(J) + 2 'Xuất phát từ dòng 3 nên +2
End If
Next J
Range("h3").Resize(UBound(dArr())) = dArr()
End Sub
Học thì lúc nào kiếm cơm?
Người ta viết phần mềm bán, thời gian 24 tiếng chỉ đủ để lắp ghép những cái mình làm được và những cái đi nhờ, sao cho chúng đồng bộ. Rồi còn test trước khi giao hàng nữa. Đơn hàng thì nhiều. Thế thời gian đâu để học VBA?
Vấn đề không phải là khó hay dễ mà là thời gian không có. Và năng suất. Bạn nhận 1 đơn đặt hàng. Nếu bạn biết và tự làm hết mất 7 ngày. Thế nếu bạn tự làm 4/7 công việc còn 3/7 nhờ GPE thì sao? Thì bạn mất 4 ngày, và trong 4 ngày đó GPE cũng hoàn thành 3/7 còn lại. Như vậy bạn chỉ mất 4 ngày. Có thể sau 4 ngày nhận tiếp đơn hàng mới, và nói với khách cũ chi thêm tiền bồi dưỡng vì đơn hàng được làm với ưu tiên về thời gian.
-> @minhtuan55
Nếu đổi :
a thành Tài / Chẵn
b thành Xỉu / Lẻ
Dữ liệu hàng ngàn thì chỉ có thể là dữ liệu kết quả xổ của một trò chơi ( Không dám đoán trờ chơi gì )
Và bạn cần tính tần xuất xuất hiện của nó.
Nếu là một trờ chơi Ăn thua thì lời khuyên của tôi là nên từ bỏ
Nếu tôi có đoán sai thì cho tôi xin lỗi nhé.
Thầy cứ nói "thời gian đâu mà học". Có khi người ta lại có nhiều thời gian ăn chơi.
Nếu là không học thì lần hỏi nào may mắn mới gặp được người đưa ra bài giải tối ưu nhất.
Mỗi lần hỏi thì cơ hội có được bài giải tối ưu là quá ít. Thì người hỏi sẽ nằm ở thế trong trờ "đào được vàng" bằng tay ( không học ).
Nếu có học thì vừa tích lũy được kinh nghiệm về tốc độ , cách giải, độ phức tạp, thuật toán ,.. của một bài toán. Kết hợp việc học và việc hỏi
thì sẽ là dùng cổ máy để "đào vàng".
"Học thì lúc nào kiếm cơm?"
Em thấy vừa đúng mà vừa không đúng.
Cho rằng bây giờ học là đã muộn. Nhưng Học thì làm "Quan" <> "Nông dân"
Chúc mừng bạn,chúc những người đi xe máy sẽ sớm có ôtô để đi.Nếu ai đang đi xe máy thì sẽ có 1 ngày lên cơn Mada 6 như Mình
UCase$ Cách viết này thật là khó ưa.Cảm ơn bác @SA_DQ đã chỉ dẫn thêm cho cháu cách sử dụng mảng.
Dạ vâng, nếu dữ liệu nhiều thì chuyển function của bác thành sub ạ:
Mã:Sub LKDong2() Dim Arr() Dim J As Long, W As Long Dim lastRow As Long, txtFind As Variant lastRow = Cells(Rows.Count, "b").End(xlUp).Row Arr() = Range("b3:b" & lastRow).Value txtFind = Range("e3").Value ReDim dArr(1 To UBound(Arr()), 1 To 1) As Variant For J = 1 To UBound(Arr()) If UCase$(Arr(J, 1)) = UCase$(txtFind) Then W = W + 1 dArr(W, 1) = CStr(J) + 2 'Xuất phát từ dòng 3 nên +2 End If Next J Range("h3").Resize(UBound(dArr())) = dArr() End Sub
Hi @HeSanbi,UCase$ Cách viết này thật là khó ưa.
UCase là xử lý chuỗi rồi. Sao phải "làm giàu cho nó vậy" . Có gì lợi hại chăng @Nguyễn Hoàng Oanh Thơ
Có thể nó có ảnh hưởng gì đó về tốc độ: UCase$ nhanh hơn UCase.UCase() and UCase$()
The UCase() function returns its string argument in all uppercase letters and returns a variant. It takes a variant and returns the same thereby slowing VB. It is okay to use when you are dealing with variants only. Mainly when you work in databases, where you use many null values, UCase() is good to use.
The UCase$() on the other hand returns the value in string and eliminates the condition of slowing down in VB. This is just the way VB handles its strings.
Hi @HeSanbi,
OT cũng chưa tìm hiểu về sự khác nhau này nên OT cũng chưa biết nữa. Ở bài #2 OT chỉ dùng UCase. OT thấy các bậc cao thủ tiền bối sử dụng nên nghĩ rằng có thể nó có cái gì đó khác và tối ưu hơn nên OT dùng theo ạ.
HeSanbi có thể chỉ dẫn giúp OT 2 cách viết này có gì khác nhau được không ạ?
$ : String
% : Integer (Int16)
& : Long (Int32)
! : Single
# : Double
@ : Decimal
&H : Hex
&O : Octal
UCase$ ra đời sau được cải tiến, điều đó là hiển nhiênOanh Thơ google thì mấy bạn Tây cho biết thế này ạ:
Có thể nó có ảnh hưởng gì đó về tốc độ: UCase$ nhanh hơn UCase.
PHP:$ : String % : Integer (Int16) & : Long (Int32) ! : Single # : Double @ : Decimal &H : Hex &O : Octal
Nếu là UCase mình sẽ hỏi nó trả về cái gì vậy
Nếu là UCase$, UCase$ là một function VBA, khi viết như vậy thì mình biết chắc chắn giá trị trả về là chuỗi.
Ví dụ:
Dim a As String
Xuống Dòng 500
a = 1 ( Đố bạn biết tui trả về cái gì )
a$ = 1 ( Tui là đại diện String nè )
Dim i& , str$ , ... Đây là cách viết ngắn gọn cho một biến