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 VBA switch语句(或字典),用于根据第一个字符填充相邻单元格中的值_Excel_Vba - Fatal编程技术网

Excel VBA switch语句(或字典),用于根据第一个字符填充相邻单元格中的值

Excel VBA switch语句(或字典),用于根据第一个字符填充相邻单元格中的值,excel,vba,Excel,Vba,我一直试图拼凑出几个不同的建议来达到我想要的结果,但我总是得出不一致的结果 我正在创建的工作簿会自动将其他.xls文件中的特定值拉入B列。在excel示例中,它会拉入K221RTA11、K221RTA12、K221RTA13等。。。B列根据导入使用的文件而变化,但共同因素是B12到B60范围内的值将以“L”、“B”、“Y”、“Z”、“E”、“T”或“A”开头。在导入值旁边的A12-A60范围中,我希望单元格仅基于B列中相邻值的最开头字母自动填充特定字符串值 我曾尝试在公式栏中使用超长嵌套if语句

我一直试图拼凑出几个不同的建议来达到我想要的结果,但我总是得出不一致的结果

我正在创建的工作簿会自动将其他.xls文件中的特定值拉入B列。在excel示例中,它会拉入K221RTA11、K221RTA12、K221RTA13等。。。B列根据导入使用的文件而变化,但共同因素是B12到B60范围内的值将以“L”、“B”、“Y”、“Z”、“E”、“T”或“A”开头。在导入值旁边的A12-A60范围中,我希望单元格仅基于B列中相邻值的最开头字母自动填充特定字符串值

我曾尝试在公式栏中使用超长嵌套if语句,它在一定程度上可以工作,但不可扩展以供更广泛的使用,而且非常笨拙。我想让VBA听B列的赋值,并转换到A列

我已经将代码更新为使用VLOOKUP,但在A列中没有看到任何填充内容。可能是我用错了

Private Sub PopulateTech()

With ThisWorkbook.Worksheets("iNTP")

.Range("B12:B60").Value = WorksheetFunction.Transpose(Array("L", "Z", "B", "D", "F", "E", "T", "A"))
.Range("A12:A60").Value = WorksheetFunction.Transpose(Array("Phone", "Computer", "Keyboard", "Light", "Speaker", "Tablet", "Router", "Switch"))


End With

End Sub

Sub TechVLookup()
Dim tech As String
Set rg = shData.Range("B12:B60")

tech = Left(Application.VLookup("L", rg, 2, False), 1)

Debug.Print tech


End Sub

VBA应用程序。匹配
选项显式
亚技术匹配()
常量lChars As String=“L,Z,B,D,F,E,T,A”
常量LTECH作为字符串_
=“电话、计算机、键盘、灯、扬声器、平板电脑、路由器、交换机”
Dim Chars()作为字符串:Chars=Split(lChars,,“”)
Dim Techs()作为字符串:Techs=Split(lTechs,“,”)
作为变量的Dim数据
数据=shData.范围(“B12:B60”).值
暗cChar作为字符串
Dim cMatch作为变体
我想我会坚持多久
对于i=1到UBound(数据)
cChar=左(数据(i,1),1)
cMatch=应用程序.Match(cChar,字符,0)
如果是数字(cMatch),则
数据(i,1)=技术(cMatch-1)'-1,因为基于0。
其他的
数据(i,1)=空
如果结束
接下来我
shData.Range(“A12:A60”)。值=数据
端接头

使用公式方法实现了预期结果:


=索引(Sheet1!B2:$B$11,匹配(左(B12:$B$60,1),Sheet1!$A$2:$A$11,0))

老实说,使用查找表VLOOKUP和左,这将很容易实现。编辑我的代码以使用VLOOKUP。不要认为我使用的是正确的。我的评论是指仅仅使用一个公式并完全跳过VBA。是的。这绝对是比较容易的方法。最终使用索引匹配而不是VLOOKUP,但你让我明白了。谢谢我将尝试一下,但我能够实现同样的结果使用索引匹配左。感谢您的帮助。您没有锁定
B2
,也不需要
B60
Sheet1
。通过添加错误处理,您可以使用以下内容:
=IFERROR(索引(B$2:B$11,匹配(左(B12,1),A$2:A$11,0)),“”)