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中的最后一列

Excel VBA:自动填充公式的代码,无论左侧列的长度是多少(因此不需要指定范围)

使用 Excel 公式填充列

Excel 自动填充和调整公式

VBA从第一个空行到数据结束复制公式

VBA 代码填充 7 个相邻单元格中的索引匹配函数