Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 搜索特定标题,然后输入公式并自动检测要扩展到的行数_Excel_Vba - Fatal编程技术网

Excel 搜索特定标题,然后输入公式并自动检测要扩展到的行数

Excel 搜索特定标题,然后输入公式并自动检测要扩展到的行数,excel,vba,Excel,Vba,我知道这个问题已经得到了部分回答,但到目前为止,我没有成功地将这些答案应用到我的问题中: 我制作了一个宏,可以在月报上运行,但结果表明,每个报表的列数和位置以及行数都不同 我在宏中包含了如下代码: Range("F2").Select ActiveCell.FormulaR1C1 = _ "=Blablabla" Range("F2").Select Dim N As Long N = Cells(Rows.Count, 1).End(xlUp).Row Selecti

我知道这个问题已经得到了部分回答,但到目前为止,我没有成功地将这些答案应用到我的问题中:

我制作了一个宏,可以在月报上运行,但结果表明,每个报表的列数和位置以及行数都不同

我在宏中包含了如下代码:

Range("F2").Select  
ActiveCell.FormulaR1C1 = _   
"=Blablabla"  
Range("F2").Select  
Dim N As Long  
N = Cells(Rows.Count, 1).End(xlUp).Row  
Selection.AutoFill Destination:=Range("F2:F" & N), Type:=xlFillDefault  
这使我能够成功地在F2中键入公式,并将其扩展到电子表格中的填充行数

现在,我想把它与列查找器结合起来。因此,我不想告诉宏选择F2,键入公式并向下扩展它,而是想告诉宏为标题为Location的列添加fin,选择标题下方的第二行,键入公式并将其扩展到最后填充的行

这种事情的代码是什么样子的?您知道这是否会使宏的运行时间显著延长吗?在运行宏之前,电子表格通常有大约60列,所有列都有不同的标题

编辑: 我有另一个问题,我相信同样的代码: 在我运行宏的报告中,有一个栏目是“学位”,然后是几个栏目“专业”、“院校”等,最后是一个栏目“毕业日期”

现在,我需要根据学位更改毕业日期,以反映虚拟学士学位毕业日期。因此,如果第5行的“学位”列表示“副学位”,我需要在第5行的“毕业日期”列中的毕业日期加上两年

我想用与表的其余部分相同的头检测来实现这一点,因为对于这一点,列也可以移动。所以我想我需要一些代码来说明: 1查找列“毕业日期”,并在其旁边插入一列 2将新列命名为B.S.毕业日期,并将其放入公式中,直到最后一行填写完毕。 多亏了tigeravatar的代码,我可以完成这两个步骤

我需要帮助的是IF公式,如果第5列的Degree表示Associate,那么B.S.列的毕业日期必须显示第5行的日期+2年,不使用列的坐标,而是使用title finder

请让我知道这是否合理,是否可行


谢谢

像这样的东西应该适合你:

Sub tgr()

    Dim ws As Worksheet
    Dim rngLocation As Range
    Dim lRow As Long

    Set ws = ActiveSheet    'To set this to a specific sheetname, use Set ws = Sheets("Sheetname")
    Set rngLocation = ws.Rows(1).Find("Location")
    If rngLocation Is Nothing Then Exit Sub 'No column with header "Location" found

    lRow = ws.Cells.Find("*", ws.Range("A1"), SearchDirection:=xlPrevious).Row - 1
    With rngLocation.Offset(1).Resize(lRow)
        .Formula = "YourFormula"    'This will automatically autofill
    End With

End Sub
编辑:根据注释,更新的代码如下所示:

Sub tgr()

    Dim ws As Worksheet
    Dim rngLocation As Range
    Dim rngNewCol As Range
    Dim lRow As Long

    Set ws = ActiveSheet    'To set this to a specific sheetname, use Set ws = Sheets("Sheetname")
    Set rngLocation = ws.Rows(1).Find("Location")
    If rngLocation Is Nothing Then Exit Sub 'No column with header "Location" found

    'Insert a new column to the right of rngLocation
    rngLocation.Offset(, 1).EntireColumn.Insert
    Set rngNewCol = rngLocation.Offset(, 1)

    'Find last used row in the sheet (subtract one because we won't be including the header row)
    lRow = ws.Cells.Find("*", ws.Range("A1"), SearchDirection:=xlPrevious).Row - 1

    'Populate the new column
    rngNewCol.Value = "Geographic Area"
    With rngNewCol.Offset(1).Resize(lRow)
        .NumberFormat = "General"   'Set column to General format
        .Formula = "YourFormula"    'This will automatically autofill
    End With

End Sub

好的,为了让它清晰完整,我将发布适用于我的情况的完整代码,它是: 我想制作一个宏,它能够根据某列的名称自动查找该列,然后在该列旁边插入另一列,选择新列并用公式填充,同时根据行数自动检测何时停止。 我面临的挑战是找到一种在vba中指示多个方向的方法,而不使用A2或F67等坐标

非常感谢tigeravatar为解决该问题提供了非常宝贵的帮助! 下面是我将要使用的代码,当然,除非有人发现更简单的代码:

Sub Test_New_Macro()

Dim ws As Worksheet
Dim rngLocation As Range
Dim rngNewCol As Range
Dim lRow As Long
Set ws = ActiveSheet
Set rngLocation = ws.Rows(1).Find("Location - City")
If rngLocation Is Nothing Then Exit Sub
rngLocation.Offset(, 1).EntireColumn.Insert
Set rngNewCol = rngLocation.Offset(, 1)
lRow = ws.Cells.Find("*", ws.Range("A1"), SearchDirection:=xlPrevious).Row - 1
rngNewCol.Value = "Geographic Area"
With rngNewCol.Offset(1, 0).Resize(lRow)
    .NumberFormat = "General"
    .Formula = "Myformula"
End With
我对tigeravatar的代码做了一些修改: 第15行:

With rngNewCol.Offset(1, 0).Resize(lRow)
我变了,1到1,0。否则,宏将用公式填充列标题和下一列。 此外,我还添加了几行: 编辑:也谢谢tigeravatar

    .NumberFormat = "General"
在用公式填充列之前,因为否则公式将显示为文本,因为单元格从一开始就被格式化为文本。 我可能宣布胜利太早了,但经过几次测试,它似乎工作得很好

再次感谢tigeravatar,你帮了大忙


编辑:在我发布这个答案时,tigeravatar发布了一个更简单的方法,使数字格式更通用。我用他发布的代码编辑了我的答案。

非常感谢你的快速回答tigeravatar!使用此代码,您将如何以及在代码中的何处插入一些行以添加列?>>因此,宏的结果是:1找到标题为“位置”的列2在右侧旁边插入一个束3选择该新列,在新列中创建标题地理区域4,输入公式并延伸到最后一行。非常感谢你!我通常不需要保姆照顾到那个水平,但我必须承认,我现在已经脱离了Excel的舒适区。Anthony@FacheAnthony更新answer@FacheAnthony很好地抓住了这一点,这就是当我发布代码而不首先测试它时所发生的事情>Hello tigeravatar,在处理您给我的代码时,我注意到这一行如果rngLocation为Nothing,那么Exit Sub“有时可能会出现问题,因为它使宏在实际上不需要停止时停止。所以我想知道:有没有办法说如果rngLocation不算什么,那么跳过接下来的三行代码,在不退出sub的情况下显示一个消息框?谢谢