VBA使用Len公式中的值填充列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA使用Len公式中的值填充列相关的知识,希望对你有一定的参考价值。
我的电子表格中有一个名为“GRIDREF”的列,其中包含可变长度的字符串值。我想在同一个工作表中添加一个名为“Precision”的附加列,并使用值填充它,具体取决于为字符串GRID REF返回的值。我的VBA代码中的前两个潜艇似乎没问题。但不是最后一个,我想知道为什么?
宏之前的初始表示例:
ANIMAL GRIDREF
CAT NZ3344
RABBIT NZ5566
CHIMP NZ45
TURTLE NZ22345
期望的结果;
ANIMAL PRECISION GRIDREF
CAT 1 Km NZ3344
RABBIT 1 Km NZ5566
CHIMP Not 1 Km NZ45
TURTLE Not 1 Km NZ22345
实际结果
ANIMAL PRECISION GRIDREF
CAT NZ3344
RABBIT NZ5566
CHIMP NZ45
TURTLE NZ22345
我的代码如下:
'Insert Col
Sub InsertColumn()
Columns("B:B").Insert Shift:=xlToRight,
CopyOrigin:=xlFormatFromLeftOrAbove
Range("B1").Value = "Precision"
End Sub
Sub Definecolnames()
lastUsedColumn = Cells(1, Columns.Count).End(xlToLeft).Column
For col = 1 To lastUsedColumn
If Cells(1, col).Value = "GRIDREF" Then
GR = col
End If
If Cells(1, col).Value = "Precision" Then
Precision = col
End If
Next col
End Sub
Sub Populate()
last = Cells(Rows.Count, GR).End(xlUp).Row
For i = last To 1 Step -1
If Len(Cells(i, GR).Value) = 6 Then
Cells(i, Precision).Value = "1 km"
ElseIf Len(Cells(1, GR.Value) <> 6 Then
Cells(i, Precision).Value = "not 1km"
End If
Next i
End Sub
答案
我相信下面的内容会按照你的预期进行,下面的行ElseIf Len(Cells(1, GR.Value) <> 6 Then
上有一个拼写错误,我还重写了一些你的代码,所以我没有使用For循环来循环,而是使用.Find方法来找到相关栏目:
Sub InsertDefinePopulate()
Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B1").Value = "Precision"
Set GRFound = Range("1:1").Find(What:="GRIDREF", LookIn:=xlValues, LookAt:=xlWhole)
If Not GRFound Is Nothing Then GR = GRFound.Column
Set PrecisionFound = Range("1:1").Find(What:="Precision", LookIn:=xlValues, LookAt:=xlWhole)
If Not PrecisionFound Is Nothing Then Precision = PrecisionFound.Column
last = Cells(Rows.Count, GR).End(xlUp).Row
For i = last To 1 Step -1
If Len(Cells(i, GR).Value) = 6 Then
Cells(i, Precision).Value = "1 km"
ElseIf Len(Cells(i, GR)) <> 6 Then
Cells(i, Precision).Value = "not 1km"
End If
Next i
End Sub
以上是关于VBA使用Len公式中的值填充列的主要内容,如果未能解决你的问题,请参考以下文章
Excel vba将公式从一列自动填充到Excel中的最后一列