在 VBA 或 Excel 中,如果数组包含该值,我如何遍历数组并用 1 填充某些单元格,如果不包含该值则用 0 填充?

byt*_*its 5 excel vba excel-formula dynamic-arrays office365

我从 Wix 收到一个数组,其中包含用户通过表单选择的课程。

从 Wix 接收的数组示例,其中用户选择了 2 门课程。这个数组被放置在一个单元格中。

["VBA","Django"]
Run Code Online (Sandbox Code Playgroud)

上面的数组放置在我的 excel 文件中的一个单元格中,我从这里将单元格变为红色并用课程填充 VBA 数组:

Dim data() As Variant
    Dim arrStr As String
    Dim dataItems As Long
    Dim i As Long
    Dim IndividualCourses(1 To 9) As String

    arrStr = Range("T3")
    arrStr = Replace(Replace(arrStr, "[", "{"), "]", "}")
    data = Application.Evaluate(arrStr)
    dataItems = Application.CountA(data)
    For i = 1 To dataItems
        IndividualCourses(i) = data(i)
    Next i
Run Code Online (Sandbox Code Playgroud)

但用户可以选择 1 到 10 门课程。所有课程的数组:

["JS","Python","VBA","Java","Spring","C++","C#",".NET","Django","CSS"]

我想根据从 Wix 收到的数组,将 1 放在数组中存在的课程的单元格中,将 0 放在其他课程中。

例如,这个课程选择了["VBA","Django"],它应该在VBA单元格中放置1,在Django单元格中放置1,在剩余课程单元格中放置0,因为我想看看用户选择了哪些课程.

这个复杂的问题有什么想法吗?!?

Jvd*_*vdV 7

不确定您对 VBA 的设置如何,但根据您的 Excel 版本,您可以使用动态数组执行此操作,例如:

在此处输入图片说明

公式B2

=--ISNUMBER(FIND(""""&B1:K1&"""",A2))
Run Code Online (Sandbox Code Playgroud)

编辑:

根据@TM 他的宝贵评论,您也可以在FIND()整个垂直范围内提供第二个参数:

在此处输入图片说明

公式B2

=--ISNUMBER(FIND(""&B1:K1&"",A2:A4))
Run Code Online (Sandbox Code Playgroud)

  • @JvdV 不错;甚至可以通过例如 `=--ISNUMBER(FIND(""""&B1:K1&"""",A2:A100))` 在 A 列中包含整个范围的搜索项 - *提示:小心填写整个标题行“B1:K1”包含条目,以防止出现不必要的空白标题。* (5认同)