Đoạn này:Em ko thể nào làm cho dữ liệu được lọc 1 cách tự động được? mong các bác chỉ giáo vì khi lọc có nhiều điều kiện để có thể lấy giá trị cần tìm? Em xin chân thành cảm ơn!
If Abs(Sheets(1).Cells(3 + i + k, 4)) > Abs(Pmax) Then
Pmax = Sheets(1).Cells(3 + i + k, 4)
End If
If Abs(Sheets(1).Cells(3 + i + k, 4)) > Abs(Pmax) Then
Pmax = Sheets(1).Cells(3 + i + k, 4)
V2tu = Sheets(1).Cells(3 + i + k, 5)
M3tu = Sheets(1).Cells(3 + i + k, 6)
End If
Loop
Sheets(1).Cells(3 + i, 7) = Pmax
i = i + k
Loop
Loop
Sheets(1).Cells(3 + i, 7) = Pmax
Sheets(1).Cells(3 + i, 8) = V2tu
Sheets(1).Cells(3 + i, 9) = M3tu
i = i + k
Loop
Em cám ơn bác rất nhiều! Nếu bác nào có cao kiến hay hơn thì cải tiến giúp em! ThankĐoạn này:
bạn thay bằng:PHP:If Abs(Sheets(1).Cells(3 + i + k, 4)) > Abs(Pmax) Then Pmax = Sheets(1).Cells(3 + i + k, 4) End If
và đoạn này:PHP:If Abs(Sheets(1).Cells(3 + i + k, 4)) > Abs(Pmax) Then Pmax = Sheets(1).Cells(3 + i + k, 4) V2tu = Sheets(1).Cells(3 + i + k, 5) M3tu = Sheets(1).Cells(3 + i + k, 6) End If
Bạn thay bằng:PHP:Loop Sheets(1).Cells(3 + i, 7) = Pmax i = i + k Loop
Tuy nhiên tôi vẫn cảm thấy code trên cần phải cải tiến thêm ---> Chỉ có mổi việc tìm MAX mà dài dòng quáPHP:Loop Sheets(1).Cells(3 + i, 7) = Pmax Sheets(1).Cells(3 + i, 8) = V2tu Sheets(1).Cells(3 + i, 9) = M3tu i = i + k Loop
Option Explicit
Sub SubMax()
Dim Text, Rng As Range, Rng0 As Range
Dim Pmax As Double, Rw As Long, VTr As Long
Rw = 4
Do Until Cells(Rw, 1).Value = ""
1 If Text <> Cells(Rw, 1).Value Then
If VTr > 0 Then
Pmax = WorksheetFunction.Min(Rng)
Cells(VTr, "G").Resize(, 3).Value = Rng.Find(Pmax, , _
xlFormulas, xlWhole).Resize(, 3).Value
End If
Set Rng = Cells(Rw, 1).Offset(, 3)
VTr = Cells(Rw, 1).Row: Text = Cells(Rw, 1).Value
Else
Set Rng = Union(Rng, Cells(Rw, 4))
End If
2 If Cells(Rw, 2).Value = 0 Then
If Rng0 Is Nothing Then
Set Rng0 = Cells(Rw, 1).Offset(, 3)
Else
Set Rng0 = Union(Rng0, Cells(Rw, 1).Offset(, 3))
End If
End If
Rw = 1 + Rw
Loop
10
Pmax = WorksheetFunction.Min(Rng)
Cells(VTr, "G").Resize(, 3).Value = Rng.Find(Pmax).Resize(, 3).Value
20
Pmax = WorksheetFunction.Min(Rng0)
Rng0.Find(Pmax).Resize(, 3).Interior.ColorIndex = 34 + (Second(Time) Mod 6)
End Sub
Nếu được thì các bác giúp em tìm Pmax tại vị trí 0 lúc này V2 và M3 sẽ xuất hiện tương ứng
Option Explicit
Function MinIf(LookUpRange As Range, LookUpValue As Range, Col As Byte)
Dim Clls As Range, Rng As Range
For Each Clls In LookUpRange.Cells(1, 1).Resize(LookUpRange.Rows.Count)
If Clls.Value = LookUpValue.Value Then
If Rng Is Nothing Then
Set Rng = Clls.Offset(, Col)
Else
Set Rng = Union(Rng, Clls.Offset(, Col))
End If
End If
Next Clls
MinIf = WorksheetFunction.Min(Rng)
MinIf = Rng.Find(MinIf, , xlFormulas, xlWhole).Resize(, 3)
End Function
Tôi chỉ thắc mắc có 1 chuyện: Cột D toàn số âm, vậy sao bạn không tìm MIN mà phải MAX(ABS(...))Em cám ơn bác rất nhiều! Nếu bác nào có cao kiến hay hơn thì cải tiến giúp em! Thank
Sư phụ ơi, em không biết cái này:.PHP:Option Explicit Function MinIf(LookUpRange As Range, LookUpValue As Range, Col As Byte) Dim Clls As Range, Rng As Range For Each Clls In LookUpRange.Cells(1, 1).Resize(LookUpRange.Rows.Count) ..................
Không hiểu! Vị trí 0 là vị trí nào? Nói rõ chút điCác bác ơi! Khi có nhiều vị trí khác vị trí 0 và giá trị đó lại lớn hơn tất cả các giá trị ở vị trí 0 thì kết quả ko đúng. Bây giờ em nghĩ là nên viết vba trứoc hết là tìm những giá trị trong bảng có vị trí 0 rồi lập thành 1 bảng sau đó áp dụng mã của các các bác! Giúp em phần viết mã tạo bảng và tìm vị trí 0.
(1) Không hiểu! Vị trí 0 là vị trí nào? Nói rõ chút đi
(2) Sư phụ ơi, em không biết cái này:
LookUpRange.Cells(1, 1).Resize(LookUpRange.Rows.Count)
Có tương đương với: LookUpRange.Resize(,1)
Không ta?
Nhưng mình đang tìm MAX ở cột D, dựa vào điều kiện tại cột A ---> Liên quan gì đến cột B nhỉ(1) Ở cột 'B' đó! Suy ra í mà!![]()
Vị trí là ở cột B đó anh, ở đó là vị trí của mỗi phần tử. Em cám ơn!Không hiểu! Vị trí 0 là vị trí nào? Nói rõ chút đi
Có phải bạn muốn lọc tất cả dử liệu với điều kiện cột B = 0 ?Vị trí là ở cột B đó anh, ở đó là vị trí của mỗi phần tử. Em cám ơn!
Chính vì vậy mà nhờ mấy bác lọc ra thành bảng tại vị trí 0
Sub Pmax()
[G:I].ClearContents
Dim Frame As String
Dim P As Long, R As Long
Frame = "": P = 4: R = 4
For Each Rng In Range([A4], [A65536].End(xlUp))
If Rng <> Rng.Offset(1) Then
Cells(R, 7).Resize(, 3).Value = Cells(P, 4).Resize(, 3).Value
P = Rng.Row + 1
R = Rng.Row + 1
ElseIf Rng = Frame And Rng.Offset(, 1) = 0 And Rng.Offset(, 3) < Cells(P, 4).Value Then
P = Rng.Row
End If
Frame = Rng.Value
Next
End Sub
Bạn muốn hỏi chỗ nào? Code hay công thức?Cám ơn bác rất nhiều! Bây giờ em muốn tìm giá trị nhỏ nhất ở vị trí 0 thì thay dấu "<" bằng dấu ">" phải ko các bác?
mình hỏi mã, công thức ko tiện bằng mã. Mong bác giúp đỡ!Bạn muốn hỏi chỗ nào? Code hay công thức?
Không thể hiểu đơn giản như bạn được đâu. Để sửa code hoặc công thức cho một mục đích khác bạn phải hiểu rõ về code hoặc công thức đó.