Excel VBA:如果A2 =“a”,“b”,“c”等等,那么B2 =“aa”?

我正在尝试取A列的每个单元格中的文本,并根据A列中的文本为列B中的每个单元格赋值。例如,我有一个由四个字母的缩写所有这些版本都被区域分配到不同的工厂进行生产。 假设我有一个“AUST”,“DAFW”,“HOUS”,以及更多的版本都被分配到了“ARLINGTON”的位置。 一旦插入了所有版本,我将如何最简洁地使用VBA来实现自动化? 就像是

If A2="AUST" Then B2="ARLINGTON" ElseIf A2="DAFW" Then B2="ARLINGTON" 

我想这样的事情会起作用,但我不能相信没有一个更快,更简洁的方法。 这有意义吗? 我一直在拉我的头发大概一个星期,现在试图找出这个…感谢您的任何帮助!

这也可以用Excel公式来完成,尽pipe我总是喜欢使用VBA。 这应该按照你想要的方式工作:

 Sub yourFunk() Set wb = ThisWorkbook Set ws = wb.Sheets(1) arlington = Array("AUST", "DAFW", "HOUS") otherLocation = Array("XXXX", "YYYY", "ZZZZ") lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row For x = 2 To lastRow If stringIsInArray(ws.Cells(x, 1), arlington) Then ws.Cells(x, 2) = "ARLINGTON" ElseIf stringIsInArray(ws.Cells(x, 1), otherLocation) Then ws.Cells(x, 2) = "OTHER LOCATION" End If Next x End Sub Function stringIsInArray(stringToBeFound As String, arr As Variant) As Boolean stringIsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

如果你需要我解释代码,请让我知道:)

使用OR有点简单:

 If A2="AUST" OR A2="DAFW" Then B2="ARLINGTON" ElseIf A2 = "ABCD" OR A2 = "WZYZ" Then B2="SOMETHING" 'ETC... 

但是,如果您迭代列A,variables“A2”是奇怪的。 但是我不确定你是怎么做到的。 也许提供更多的代码,我们可以帮助你更多。

最快的方法是使用词典。

假设您的数据存在于以下范围内:

 A2 = "AUST" A3 = "DAFW" 

现在,检查这个代码:

 'Needs reference to Microsoft Scripting Runtime Sub Translate() Dim dic As Dictionary Dim i As Integer, sTmp As String Set dic = New Dictionary dic.Add "AUST", "ARLINGTON" dic.Add "DAFW", "ARLINGTON" For i = 2 To 3 sTmp = ThisWorkbook.Worksheets(1).Range("A" & i) Debug.Print sTmp, "-", dic(sTmp) Next Set dic = Nothing End Sub 

注意:这个代码只是一个例子!

有关更多信息,请参阅: https : //msdn.microsoft.com/en-us/library/office/gg251825.aspx