为什么Range.Value = Left(....)不起作用?

时间:2018-07-18 08:46:47

标签: vba excel-vba

我是VBA的新手,所以这可能是一个非常简单的答案!

我正在尝试使用Left函数在列中生成单元格的第一位字符串,但是由于我不理解的原因,当我使用Range.Value = Left(...)时不会将我从Left(...)获得的值放入单元格中。

代码运行完后,我在空白列A留下空白。

任何人都可以解释为什么会发生这种情况并建议如何解决。

我写的代码是:

Dim r As Integer
Dim var As Variant
r = Range("B1").CurrentRegion.Rows.Count

For var = 2 To r
    Range("A" & var).Value = Left(Cells(var, 1).Text, 1)
Next var

非常感谢。

2 个答案:

答案 0 :(得分:0)

很可能您没有完全声明某些内容-工作表或当前区域中的行。从这样简单的内容开始,以了解其工作原理:

Public Sub HereComesTheCode()

    Dim r As Long: r = 10
    Dim i As Long
    Dim wks As Worksheet: Set wks = Worksheets(1)

    For i = 2 To r
        With wks
            .Range("A" & i) = Left(.Cells(i, 1), 1)
        End With
    Next

End Sub

答案 1 :(得分:0)

这是另一种方法,扫描B中的单元格并将每个单元格的第一个字母写入其左侧的单元格中:

Dim c As Range
For Each c In Range("B1", "B" & Cells(Rows.Count, "B").End(xlUp).Row).Cells
    c.Offset(0, -1).Value = Left(c.Text, 1)
Next

注意:严格来说,最好通过以下方法来限定范围:

Dim c As Range
With Worksheets("YOUR_SHEET_NAME_HERE")
For Each c In .Range("B1", "B" & .Cells(.Rows.Count, "B").End(xlUp).Row).Cells
    c.Offset(0, -1).Value = Left(c.Text, 1)
Next
End With