Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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,我有一个使用if函数的宏。它将结果(1或0)放置到指定的列中。但是,我想指定列名的名称。假设执行if函数并将值带到标题为“values”的列中。您可以在下面找到原始代码: Sub bbb() Dim FormulaCol As Long Dim LookupCol As Long Dim TotalRows As Long Dim TotalCols As Long Dim i As Long Sheets("Sheet1").Select TotalRows = ActiveSheet.Us

我有一个使用if函数的宏。它将结果(1或0)放置到指定的列中。但是,我想指定列名的名称。假设执行if函数并将值带到标题为“values”的列中。您可以在下面找到原始代码:

Sub bbb()
Dim FormulaCol As Long
Dim LookupCol As Long
Dim TotalRows As Long
Dim TotalCols As Long
Dim i As Long

Sheets("Sheet1").Select
TotalRows = ActiveSheet.UsedRange.Rows.Count
TotalCols = ActiveSheet.UsedRange.Columns.Count

For i = 1 To TotalCols
    If Cells(1, i).Value = "Values" Then FormulaCol = i
    If Cells(1, i).Value = "Test" Then LookupCol = i
Next

ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""United States"",1,0)"
Cells(2, FormulaCol).AutoFill Destination:=Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
With Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
    .Value = .Value
End With
End Sub
我知道这部分代码负责静态指定列:

ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""United States"",1,0)"
但我不知道我该如何改变它,使其工作如上所述。有人能帮我吗

编辑

这张图片显示了我想要实现的目标

现在,如果值列位于测试列的右侧,则此宏可以正常工作。如果值列位于远离测试列的位置,则它不会带来正确的值。我想使用宏来查找标题“value”,以确定value列的确切位置(对于某些文件,它将不是同一列)

编辑2: 这是我使用当前代码得到的结果。即使我将VALUE列移到TEST列旁边,它的行为也是一样的。使用我的代码时,值从C2向下填充到C9。正如您可以看到的,使用您的代码,它会带来D1中的值


我不太确定我是否理解了这个问题,但基于测试列更改一列中的值的子程序可能如下所示:

Sub bbb()
Dim FormulaCol As Long
Dim LookupCol As Long
Dim TotalRows As Long
Dim TotalCols As Long
Dim i As Long

Sheets("Sheet1").Select
TotalRows = ActiveSheet.UsedRange.Rows.Count
TotalCols = ActiveSheet.UsedRange.Columns.Count


For i = 1 To TotalCols
    If Cells(1, i).Value = "Test" Then
        LookupCol = i
        Exit For
    End If
Next

For i = 1 To TotalCols
    If Cells(1, i).Value = "Values" Then
        FormulaCol = i
        Range("A2").Activate
        Debug.Print "=IF(RC[" & CStr(FormulaCol - LookupCol - 1) & "]=""United States"",1,0)"
        ActiveCell.Offset(0, FormulaCol - 1).FormulaR1C1 = "=IF(RC[" & CStr(LookupCol - FormulaCol) & "]=""us"",1,0)"
        Cells(2, FormulaCol).AutoFill Destination:=Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
        With Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
        .Value = .Value
        End With
    End If
Next
End Sub

请看我上面的帖子,我添加了图片和其他信息,我相信这些信息可以澄清我试图实现的目标。它为我带来了0个G1列,带有此函数:=IF(K1=“United States”,1,0)。看起来函数没有向下遍历值,但对吗?如果条件应该是什么样子?也许有一些抵消问题。请看一下我第一篇博文中的编辑2。最后,我不得不在家里打开Excel,grr。有些索引搞砸了。给我10分钟:]