从单元格连接第一个字母与第三个单元格中的另一个单元格粘贴,然后是下一行

时间:2013-05-20 03:48:23

标签: excel excel-vba vba

我需要从单元格B2中提取第一个字母并将单元格C2粘贴到单元格A2中, 然后移到下一行并重复到最后一行数据。

我有以下部分工作,但只适用于第一行A2,然后将这一个字符串填满所有行直到最后一个数据行。

Sub UserName()

Dim rng As range
Dim lastRow As Long

With Sheets("sheet1")
    lastRow = .range("E" & .Rows.Count).End(xlUp).Row
End With

For Each rng In Sheets("Sheet1").range("A2:A" & lastRow)
    rng.Value = fUserName(rng.Value)
Next
End Sub

功能

Function fUserName(ByVal strUserName As String) As String

Dim r As String

r = range("B2").Select
strUserName = Left(Trim(r), 1) & " " & range("C2")

fUserName = strUserName
End Function

6 个答案:

答案 0 :(得分:3)

恕我直言,你不需要VBA。只需在A2

中使用公式即可
=CONCATENATE(LEFT(B2, 1),C2)

然后只为包含数据的所有单元格复制它。

答案 1 :(得分:2)

尝试以下代码。我把你的程序结合起来了。 无需使用功能,无需每个循环

Sub UserName()

    Dim lastRow As Long

    With Sheets("sheet1")
        lastRow = .Range("C" & .Rows.Count).End(xlUp).Row
    End With

    Range("A1:A" & lastRow).FormulaR1C1 = "= left(RC[1],1) & RC[2]"

End Sub

答案 2 :(得分:1)

你的函数是错误的,你正在将strUserName传递给函数但是然后在函数中设置相同的变量,但问题的真正来源是你在函数中使用静态引用,所以你的哪个单元格无关紧要子例程处理函数看起来是一个单元格B2和C2。

我会一起摆脱这个功能,只需更换一行

rng.Value = fUserName(rng.Value)

使用

rng.Value = Left(Trim(rng.offset(0,1)), 1) & " " & rng.offset(0,2)

如果你真的想使用一个函数,你需要将范围传递给函数,而不是活动单元格的值,因为它与周围其他单元格的值无关。

答案 3 :(得分:1)

您需要将范围传递给函数:

Sub UserName()

Dim rng As range
Dim lastRow As Long

With Sheets("sheet1")
    lastRow = .range("E" & .Rows.Count).End(xlUp).Row
End With

For Each rng In Sheets("Sheet1").range("A2:A" & lastRow)
    rng.Value = fUserName(rng)
Next

End Sub

Function fUserName(rn as Range) As String  
    fUserName = Left(Trim(rn(1,2).value), 1) & " " & rn(1,3).value
End Function

答案 4 :(得分:0)

很明显B2和C2是硬编码值,所以它们不会改变。例如,您需要使用范围对象进行更改。这是我要做的伪代码。我让你做出必要的调整以使其有效(因为我在你的问题中没有看到太多的努力)。

Function fUserName(rng as Range) as String
    fUserName = Left(Trim(rng.Offset(0, 1).value), 1) & " " & rng.Offset(0, 2).value
End Function

不要使用fUserName()调用rng.value,而只需输入rng。这将使用range对象来获取B和C的正确行。

答案 5 :(得分:-1)

以下代码选择第一个空白行

Sub SelFrstBlankRow()
Dim r1 As Range, r2 As Range, r3 As Range
Set r1 = Sheets("Sheet1").Range("a20")
Set r2 = Sheets("Sheet1").Range("u20")
Set r3 = Range(r1.End(xlUp), r2.End(xlUp)) 'r3 is the 1st blank row
r3.Select

End Sub