首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >If函数有8个条件

If函数有8个条件
EN

Stack Overflow用户
提问于 2015-12-27 22:28:47
回答 1查看 276关注 0票数 0

我有以下表格:

左边的第一个是我手动将数据写入excel后得到的数据。右边的第二个是参考表。

基本上,我想要的是一个多假设函数,它能让我认识到我的训练计划的目标。

例如,我做了3组和10次重复,强度为66%,其余的时间为150秒。基于此,我想要一个快速的功能,告诉我这个程序是为力量,力量,耐力或肥大而设计的。

如果你在阅读右边的表格时有困难,这可以让你更好地理解如何阅读它:为了训练"Power Single“,你应该做2到6组,低于或等于6个代表,强度超过85%,休息120到300秒。

谢谢你的帮助

附言:我相信if函数是一个很好的解决方案,不管怎样,如果你有其他的东西,请随时告诉我。

EN

回答 1

Stack Overflow用户

发布于 2015-12-28 12:37:15

考虑一个SQL解决方案,其中您在两个范围之间运行一个cross join query,它将返回符合您需要的任何组合。Excel可以使用VBA ADO和Jet/ACE引擎在工作簿中运行SQL查询。

要执行下面的操作,请将一个表移到选项卡Workout中,将另一个表移到另一个选项卡TrainingAim中,然后运行宏。您需要将范围分解为min和max。如结果所示,多个匹配将堆叠在一起。但根据公布的数据,有一个训练是匹配的: Power Single。

解决方案

代码语言:javascript
复制
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         150

TrainingAim

代码语言:javascript
复制
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     30

VBA宏

代码语言:javascript
复制
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

结果

代码语言:javascript
复制
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      300
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34481381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档