Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
在标题中搜索Word,并在Excel VBA中设置用于计算的列_Vba_Excel - Fatal编程技术网

在标题中搜索Word,并在Excel VBA中设置用于计算的列

在标题中搜索Word,并在Excel VBA中设置用于计算的列,vba,excel,Vba,Excel,我正在尝试对Excel电子表格中的列进行计算。列名为:LowLimit、HighLimit和MeasValue “我现在只能‘硬编码’列编号以执行计算(如下面的代码所示)。如果列的位置保持不变,则代码非常有效。但是,在整个工作簿中,列的位置会发生变化,但它们的顺序始终相同。例如,在第一页上,标题LowLimit、HighLimit和MeasValue将分别位于位置J、K和L。在第25页上,它们的位置将分别更改为G、H和I客观地说 如何搜索页眉位置,然后在计算中使用它们,而不是像我下面所做的那样将

我正在尝试对Excel电子表格中的列进行计算。列名为:LowLimit、HighLimit和MeasValue “我现在只能‘硬编码’列编号以执行计算(如下面的代码所示)。如果列的位置保持不变,则代码非常有效。但是,在整个工作簿中,列的位置会发生变化,但它们的顺序始终相同。例如,在第一页上,标题LowLimit、HighLimit和MeasValue将分别位于位置J、K和L。在第25页上,它们的位置将分别更改为G、H和I客观地说

如何搜索页眉位置,然后在计算中使用它们,而不是像我下面所做的那样将它们硬编码

以下是我到目前为止所做的工作(代码编辑得非常出色):

子搜索文件夹()
'UpdatebySUPERtoolsforExcel2016
将xOut设置为工作表
Dim xWb作为工作簿
将xWks设置为工作表
将范围变暗为范围
Dim lowLimCol为整数
作为整数的Dim-hiLimCol
Dim measCol作为整数
Application.ScreenUpdating=False
设置xWb=ActiveWorkbook
对于xWb.表中的每个xWks
xRow=1
用xWks
.单元格(X行,16)=“表示低”
.单元格(X行,17)=“表示高”
.单元格(X行,18)=“最小值”
.单元格(第19行)=“边缘”
LastRow=.UsedRange.Rows.Count
lowLimCol=Application.WorksheetFunction.Match(“LowLimit”,xWks.Range(“1:1”),0)
hiLimCol=Application.WorksheetFunction.Match(“上限”,xWks.Range(“1:1”),0)
measLimCol=Application.WorksheetFunction.Match(“MeasValue”,xWks.Range(“1:1”),0)
.范围(“P2”).公式=“=L2-J2”
.Range(“P2”)。自动填充目标:=.Range(“P2:P”和LastRow)
.范围(“Q2”).公式=“=K2-L2”
.Range(“Q2”)。自动填充目标:=.Range(“Q2:Q”和LastRow)
.范围(“R2”).公式=“=min(P2,Q2)”
.Range(“R2”)。自动填充目标:=.Range(“R2:R”和LastRow)

.Range(“S2”).Formula=“=IF(AND(R2>=-3,R2设置三列标题的整数变量(例如LowLimCol)

可通过以下方式查找:

lowLimCol=Application.Worksheetfunction.Match(“LowLimit”,ws.Range(“1:1”),0)

然后,您可以通过使用
单元格定义范围来使用这些变量,例如

范围(“A1:A5”)

可以重写为

范围(单元格(1,LowLimCol).地址,单元格(5,LowLimCol).地址)

编辑:评论后的第二部分-

如果您不需要填写公式,您可以将总和的实际值放在单元格中:

.Range("P2").Value = .Cells(2, measLimCol).Value - .Cells(2, lowLimCol).Value
但是,由于要将该公式向下填充到最后一行,因此可以使用串联在公式字符串“=”和“-”与VBA编码的单元格地址之间进行交换,例如:

.Range("P2").Formula = "=" & Cells(2, measLimCol).Address & "-" & Cells(2, lowLimCol).Address
单元格“P2”中的绝对引用将显示为“=$L$2-$J$2”,因此为了能够满负荷填充,您需要通过在
单元格(x,y)之后指定
FALSE
来去除$$$。地址
部分,例如
单元格(x,y)。地址(FALSE,FALSE)

这意味着线路将是:

.Range("P2").Formula = "=" & Cells(2, measLimCol).Address(false, false) & "-" & Cells(2, lowLimCol).Address (false, false)
希望有帮助!您也可以一次完成整个范围,因此两行

.Range("P2").Formula = "=L2-J2"
.Range("P2").AutoFill Destination:=.Range("P2:P" & LastRow)
可能成为:

.Range("P2:P" & LastRow).Formula = "=" & Cells(2, measLimCol).Address (False, False) & "-" & Cells(2, lowLimCol).Address (False, False)

感谢您的解决方案。我已根据您的建议部分更新了代码。如何将找到的单元格编号放入公式中?请参阅更新的代码。例如,如何将
.Range(“P2”).Formula=“=L2-J2”
替换为
.Range(“P2”).Formula=“=measLimCol-lowLimCol”
?谢谢!它可能会有点笨重,为了便于查看,我只需编辑我的答案,而不是在这里发表评论。。。
.Range("P2:P" & LastRow).Formula = "=" & Cells(2, measLimCol).Address (False, False) & "-" & Cells(2, lowLimCol).Address (False, False)