我有以下表格:

左边的第一个是我手动将数据写入excel后得到的数据。右边的第二个是参考表。
基本上,我想要的是一个多假设函数,它能让我认识到我的训练计划的目标。
例如,我做了3组和10次重复,强度为66%,其余的时间为150秒。基于此,我想要一个快速的功能,告诉我这个程序是为力量,力量,耐力或肥大而设计的。
如果你在阅读右边的表格时有困难,这可以让你更好地理解如何阅读它:为了训练"Power Single“,你应该做2到6组,低于或等于6个代表,强度超过85%,休息120到300秒。
谢谢你的帮助
附言:我相信if函数是一个很好的解决方案,不管怎样,如果你有其他的东西,请随时告诉我。
发布于 2015-12-28 12:37:15
考虑一个SQL解决方案,其中您在两个范围之间运行一个cross join query,它将返回符合您需要的任何组合。Excel可以使用VBA ADO和Jet/ACE引擎在工作簿中运行SQL查询。
要执行下面的操作,请将一个表移到选项卡Workout中,将另一个表移到另一个选项卡TrainingAim中,然后运行宏。您需要将范围分解为min和max。如结果所示,多个匹配将堆叠在一起。但根据公布的数据,有一个训练是匹配的: Power Single。
解决方案
Sets Reps PctIRM Recovery
3 10 0.66 150
6 2 0.55 300
2 13 0.35 150
3 15 0.45 300
6 6 0.9 150
2 4 0.85 300
5 2 0.75 300
3 11 0.65 400
1 13 0.6 450
2 6 0.7 150TrainingAim
TrainingAim SetsMin SetsMax RepsMin RepsMax PctIRMmin PctIRMmax RestMin RestMax
Power Single 2 6 6 999 0.85 1 120 300
Power Multiple 3 5 1 2 0.8 0.9 120 300
Strength 3 5 3 5 0.75 0.85 120 300
Hypertrophy 3 6 6 12 0.67 0.85 30 90
Endurance 2 3 12 999 0.67 1 0 30VBA宏
Sub RunSQL()
On Error GoTo ErrHandle
Dim conn As Object
Dim rst As Object
Dim strConnection As String, strSQL As String
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
strConnection = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" _
& "DBQ=C:\Path\To\Workbook.xlsm;"
'strConnection = "DRIVER={Microsoft Excel Driver (*.xls)};" _
'& "DBQ=C:\Path\To\Workbook.xls;"
'strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
'& "Data Source='C:\Path\To\Workbook.xlsm';" _
'& "Extended Properties=""Excel 8.0;HDR=YES;"";"
'strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
'& "Data Source='C:\Path\To\Workbook.xls';" _
'& "Extended Properties=""Excel 8.0;HDR=YES;"";"
strSQL = " SELECT [Workout$].*, [TrainingAim$].*" _
& " FROM [Workout$], [TrainingAim$]" _
& " WHERE [Workout$].Sets BETWEEN [TrainingAim$].SetsMin AND [TrainingAim$].SetsMax" _
& " AND [Workout$].Reps BETWEEN [TrainingAim$].RepsMin AND [TrainingAim$].RepsMax" _
& " AND [Workout$].PctIRM BETWEEN [TrainingAim$].PctIRMmin AND [TrainingAim$].PctIRMmax" _
& " AND [Workout$].Recovery BETWEEN [TrainingAim$].RestMin AND [TrainingAim$].RestMax;"
' OPEN THE CONNECTION
conn.Open strConnection
rst.Open strSQL, conn
' OUTPUT SQL RESULTS IN RESULTS TAB
Worksheets("Results").Range("A2").CopyFromRecordset rst
rst.Close
conn.Close
' CLOSE THE CONNECTION
MsgBox "Successfully ran SQL query!", vbInformation
Exit Sub
ErrHandle:
MsgBox Err.Number & " = " & Err.Description, vbCritical
Exit Sub
End Sub结果
Sets Reps PctIRM Recovery TrainingAim SetsMin SetsMax RepsMin RepsMax PctIRMmin PctIRMmax RestMin RestMax
6 6 0.9 150 Power Single 2 6 6 999 0.85 1 120 300https://stackoverflow.com/questions/34481381
复制相似问题