VBA使用Len公式中的值填充列

问题描述 投票:1回答:1

我的电子表格中有一个名为“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
excel vba excel-vba
1个回答
0
投票

我相信下面的内容会按照你的预期进行,下面的行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
© www.soinside.com 2019 - 2024. All rights reserved.