Bài toán giàn không gian , giúp tôi

Liên hệ QC

minhnc

Nguyễn Công Minh
Tham gia
13/1/07
Bài viết
160
Được thích
489
Nghề nghiệp
Lang thang
tôi có bài toán thế này, anh em giúp đỡ:
Có 2 cột. Cột 1 là mặt cắt ứng với M1 và M2
Cột thứ 2 là giá trị tương ứng của 2 mặt cắt đó. Vấn đề là mình muốn tìm giá trị lớn nhất của những mặt cắt M1 or M2
 

File đính kèm

  • TIM MAX.xls
    13.5 KB · Đọc: 111
Lần chỉnh sửa cuối:
bạn có thể dùng cột phụ (như file tôi upload)

hoặc bạn viết hàm VBA
 

File đính kèm

  • TIM_MAX.xls
    15 KB · Đọc: 64
Một cách đơn giản hơn là bạn sử dụng hàm DMax và DMin.
P/S: Hãy sử dụng những hàm bắt đầu bằng chữ D (Database) để giải những bài toán có điều kiện.
 
Nếu dùng cột phụ, Dmax vẫn phải thêm 1 số thao tác nữa, dữ liệu của tôi up lên chỉ có tính chất minh hoạ, bài toán thực tế là bài toán về mặt cắt của dàn ko gian, quá nhiều mặt cắt, giá trị, cột hàng. Nếu thêm cột hay thêm điều kiện thì thật là rối. Tôi muốn dùng 1 công thức giải quyết được ngay. Có lẽ fỉa dùng VBA. bác nào có thể giúp tôi tiếp.
 
Bạn sử dụng code sau:
Mã:
Option Explicit
'
'Tim Max theo dieu kien
Public Function DMax_GPE(Database As Range, Field As Long, Criteria) As Double
Dim i As Long
Dim SubData As Range
Set SubData = Range(Cells(Database.Row, Database.Column), Cells(Database.Rows.Count + Database.Row - 1, Database.Column))
DMax_GPE = WorksheetFunction.Index(Database, WorksheetFunction.Match(Criteria, SubData, 0), Field)
For i = 1 To Database.Rows.Count
    If UCase(Database.Cells(i, 1)) = UCase(Criteria) And _
DMax_GPE < Database.Cells(i, Field) Then _
DMax_GPE = Database.Cells(i, Field)
Next i
End Function
'
'Tim Min theo dieu kien
Public Function DMin_GPE(Database As Range, Field As Long, Criteria) As Double
Dim i As Long
Dim SubData As Range
Set SubData = Range(Cells(Database.Row, Database.Column), Cells(Database.Rows.Count + Database.Row - 1, Database.Column))
DMin_GPE = WorksheetFunction.Index(Database, WorksheetFunction.Match(Criteria, SubData, 0), Field)
For i = 1 To Database.Rows.Count
    If UCase(Database.Cells(i, 1)) = UCase(Criteria) _
And DMin_GPE > Database.Cells(i, Field) Then _
DMin_GPE = Database.Cells(i, Field)
Next i
End Function
Cách sử dụng:
Database: vùng dữ liệu
Field: cột tính toán
Criteria: điều kiện
 

File đính kèm

  • TIM_MAX.xls
    24 KB · Đọc: 101
NVson Có thể up file lên và sử dụng luôn công thức trên được ko? tôi làm mà vẫn ko được như kết quả mong muốn. #value! đó là kết quả khi dùng hàm trên
 
Trước hết cảm ơn nvson đã giải quết xong bài toán, còn vấn đề nữa xin chỉ giáo.
Tìm được giá trị max cuả 1 mặt cắt nào đó rồi nhưng mặt cắt đó cũng có nhiều giá trị trùng với giá trị max đó, vấn đề là tôi muốn biết là có bao nhiêu giá trị của mặt cắt đó bằng giá trị với giá trị max vừa tìm
 
Còn vấn đề nữa xin chỉ giáo.
Tìm được giá trị max cuả 1 mặt cắt nào đó rồi nhưng mặt cắt đó cũng có nhiều giá trị trùng với giá trị max đó, vấn đề là tôi muốn biết là có bao nhiêu giá trị của mặt cắt đó bằng giá trị với giá trị max vừa tìm
Bạn tham khảo thử hàm mảng sau nha:
Mã:
Option Explicit
[b]Function DDmax(CSDL As Range, Field As Range, Criteria As Range)[/b]
[color="Blue"]'=DMAX(A1:B13,B1,F1:F2)[/color]
 Dim TMax, iJ As Integer, iDem As Integer
 ReDim MDLieu(1 To 9, 1 To 2)
 For iJ = 1 To 9
    MDLieu(iJ, 1) = "":         MDLieu(iJ, 2) = ""
 Next iJ
 TMax = WorksheetFunction.DMax(CSDL, Field, Criteria)
 Application.ScreenUpdating = 0:                iJ = 0
 Do
    iJ = 1 + iJ
    If Len(CSDL.Cells(iJ, 1)) < 1 Then Exit Do
    If CSDL.Cells(iJ, 2) = TMax Then
        iDem = iDem + 1
        MDLieu(iDem, 1) = CSDL.Cells(iJ, 1)
        MDLieu(iDem, 2) = CSDL.Cells(iJ, 2)
    
    End If
 Loop
 Application.ScreenUpdating = True
 DDmax = MDLieu
[b]End Function[/b]
 

File đính kèm

  • DMax.rar
    6.1 KB · Đọc: 88
SA_DQ xem lại xem. vẫn chưa giải quyết được vấn đề"Tìm được giá trị max cuả 1 mặt cắt nào đó rồi nhưng mặt cắt đó cũng có nhiều giá trị trùng với giá trị max đó, vấn đề là tôi muốn biết là có bao nhiêu giá trị của mặt cắt đó bằng giá trị với giá trị max vừa tìm "
 
Web KT
Back
Top Bottom