我是VBA和stackoverflow的新手。所以请耐心等待;)。
我搜索了一个解决方案但找不到它。 我的问题如下:
我有一个带有名称的列(A),然后是一个列(B),其中一些单元格包含一个" X"和其他人没有。我想知道哪些名字有" X"除了他们。
我现在想要一个字符串作为结果,在一个单元格中。 在这个例子中:
Noah;Jacob;Elijah;Jayden
我不是很远。
For r = 1 To 20
If Cells(r, 2) = "X" Then A = Cells(r, 1) Else
Next
然后" A"是" Noah"我可以把它写在一个单元格中,但是我想让它找到所有的值,然后将它们组合起来,最好分开;在一个牢房里。
有没有人有任何想法?
答案 0 :(得分:4)
创建一个字符串变量,然后根据列B中的“X”将结果附加到该变量。以下是如何执行此操作的示例:
Sub Foo()
Dim i As Integer
Dim result As String
For i = 1 To 20
If UCase(Cells(i, 2).Value) = "X" Then
result = result & Cells(i, 1).Value & ";"
End If
Next
'// output the result to C1
Range("C1").Value = Left$(result, Len(result) - 1)
End Sub
答案 1 :(得分:2)
Excel的本机工作表公式不会处理将未知数量的字符串连接在一起,并且补偿可能的最大数量可能会变得混乱。用户定义函数¹(又名UDF)利用VBA处理大量行循环的能力,同时“即时”进行数字或字符串比较。
<强> build_List UDF 强>
Function build_List(rNAMs As Range, rEXs As Range, vEX As Variant, _
Optional delim As String = ";", _
Optional bCS As Boolean = False)
Dim str As String, rw As Long, cl As Long
With rNAMs.Parent
Set rNAMs = Intersect(.UsedRange, rNAMs)
Set rEXs = .Cells(rEXs.Rows(1).Row, rEXs.Columns(1).Column). _
Resize(rNAMs.Rows.Count, rNAMs.Columns.Count)
End With
With rNAMs
For rw = .Rows(1).Row To .Rows(.Rows.Count).Row
For cl = .Columns(1).Row To .Columns(.Columns.Count).Row
If (.Cells(rw, cl).Offset(0, rEXs.Column + (cl - 1) - cl) = vEX And bCS) Or _
(LCase(.Cells(rw, cl).Offset(0, rEXs.Column + (cl - 1) - cl)) = LCase(vEX)) Then _
str = str & .Cells(rw, cl).Value & delim
Next cl
Next rw
End With
build_List = Left(str, Len(str) - Len(delim))
End Function
在D7(如下图所示)中,
=build_List(A:A, B:B, "x")
¹用户定义函数(又名UDF)被放入标准模块代码表中。点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 我,中号)。将功能代码粘贴到标题为 Book1 - Module1(Code)的新模块代码表中。点击 Alt + Q 返回工作表。
答案 2 :(得分:0)
Mate Juhasz回答这个问题非常简单,但现在答案消失了。
Mate写道:
For r = 1 To 20
If Cells(r, 2) = "X" Then A = A & "; " & Cells(r, 1) Else
Next
对我来说,完美地解决了它。现在“A”是我想要的字符串。非常感谢你!