我需要从单元格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
答案 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