使用数组函数根据当前值改变单元格值?

时间:2015-05-22 20:44:58

标签: arrays excel vba excel-vba

几个星期前我问了一个(similar question) 我尝试使用它来导航我的新问题的答案,但是我无法做到。基本上我想要做的就是这个:我从一个工作簿中复制数据并粘贴到模板工作簿的A列中。之后,我想根据粘贴它时单元格中的内容更改刚刚粘贴的单元格的内容。例如,一个单元格将被粘贴,它会说" ALBY Total"我想自动(使用VBA)更改单元格以说“" ALBY。”#34;我试着自己编写代码但是无法让它发挥作用。我没有得到错误,但没有任何反应。这是我的代码的一个例子(有很多阵列,所以我不会给你们所有人):

Sub TSA_Template_Creation_Macro()

Workbooks("TSA Template.xlsm").Activate

Set wb = ThisWorkbook
Set ws = wb.Sheets(1)

alby = Array("ALBY Total")
anch = Array("ANCH Total")
atlc = Array("ATLC Total")

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

For x = 1 To lastRow

    If stringIsInArray(ws.Cells(x, 1), alby) Then
        ws.Cells(x, 1) = "ALBY"
    ElseIf stringIsInArray(ws.Cells(x, 1), anch) Then
        ws.Cells(x, 1) = "ANCH (+office)"
    ElseIf stringIsInArray(ws.Cells(x, 1), atlc) Then
        ws.Cells(x, 1) = "ATLC"

 End If

Next x

End Sub

Function stringIsInArray(stringToBeFound As String, arr As Variant) As Boolean
stringIsInArray = (UBound(Filter(arr, stringToBeFound)) > 0)
End Function

我对VBA世界相当新,所以它很可能是一个简单的解决方案。我已经摆弄它,但我不知道如何使它工作。

1 个答案:

答案 0 :(得分:1)

这听起来像是手动粘贴值。如果是这种情况,则从包含值的模板工作簿运行时,以下内容应该起作用:

Sub TSA_Template_Creation_Macro()

lastRow = Cells(Rows.Count,1).End(xlUp).Row

对于x = 1到lastRow

If InStr(1, Cells(x, 1), "ALBY") Then
    Cells(x, 1) = "ALBY"
ElseIf InStr(1, Cells(x, 1), "ANCH") Then
    Cells(x, 1) = "ANCH (+office)"
ElseIf InStr(1, Cells(x, 1), "ATLC") Then
    Cells(x, 1) = "ATLC"

结束如果

下一个x

End Sub