在一个字符串中

时间:2016-01-18 12:24:41

标签: excel-vba vba excel

我是VBA和stackoverflow的新手。所以请耐心等待;)。

我搜索了一个解决方案但找不到它。 我的问题如下:

我有一个带有名称的列(A),然后是一个列(B),其中一些单元格包含一个" X"和其他人没有。我想知道哪些名字有" X"除了他们。

例:
enter image description here

我现在想要一个字符串作为结果,在一个单元格中。 在这个例子中:

Noah;Jacob;Elijah;Jayden

我不是很远。

For r = 1 To 20
    If Cells(r, 2) = "X" Then A = Cells(r, 1) Else
Next

然后" A"是" Noah"我可以把它写在一个单元格中,但是我想让它找到所有的值,然后将它们组合起来,最好分开;在一个牢房里。

有没有人有任何想法?

3 个答案:

答案 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_Build_Lists
将build_Lists UDf应用于您的示例数据

¹用户定义函数(又名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”是我想要的字符串。非常感谢你!