如何使用VBscript从值列表中获取唯一值?

如何使用VBscript从值列表中获取唯一值?,vbscript,Vbscript,假设Excel工作表有一个名为Student Names的列,该列有重复的值。说 Student ======= Arup John Mike John Lisa Arup 使用VBScript,如何获得以下唯一值 Arup John Lisa Mike 获取唯一项的VBScript工具是一个字典:将所有项作为键添加到字典和字典中。keys()将返回一个-per definitionem-unique键数组。代码: Dim aStudents : aStudents = Array("

假设Excel工作表有一个名为Student Names的列,该列有重复的值。说

Student
=======

Arup
John
Mike
John
Lisa
Arup
使用VBScript,如何获得以下唯一值

Arup
John
Lisa
Mike

获取唯一项的VBScript工具是一个字典:将所有项作为键添加到字典和字典中。keys()将返回一个-per definitionem-unique键数组。代码:

  Dim aStudents : aStudents = Array("Arup", "John", "Mike", "John", "Lisa", "Arup")
  WScript.Echo Join(aStudents)
  Dim aUniqStudents : aUniqStudents = uniqFE(aStudents)
  WScript.Echo Join(aUniqStudents)

' returns an array of the unique items in for-each-able collection fex
Function uniqFE(fex)
  Dim dicTemp : Set dicTemp = CreateObject("Scripting.Dictionary")
  Dim xItem
  For Each xItem In fex
      dicTemp(xItem) = 0
  Next
  uniqFE = dicTemp.Keys()
End Function
输出:

Arup John Mike John Lisa Arup
Arup John Mike Lisa

或者,由于源数据位于Excel电子表格中,因此可以使用SQL填充ADODB记录集:

Option Explicit

Dim filePath, sheetName
filePath = "C:\path\to\excel\workbook.xlsx"
sheetName = "Sheet1"

Dim connectionString
connectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=""" & filePath & """;" & _
    "Extended Properties=""Excel 12.0;HDR=No"""

Dim sql
sql = "SELECT DISTINCT Student FROM [" & sheetName & "$]"

Dim rs
Set rs = CreateObject("ADODB.Recordset")
rs.Open sql, connectionString

Do Until rs.EOF
    WScript.Echo rs("StudentName")
Loop

如果不需要字典,可以使用以下方法将数组中的每个元素与自身进行比较

Info = Array("Arup","John","Mike","John","Lisa","Arup")

x = 0
z = ubound(Info)
Do
x = x + 1
Do
z = z - 1
If x = z Then
Info(x) = Info(z)
ElseIf Info(x) = Info(z) Then
Info(x) = ""
End If
Loop Until z=0
z = ubound(Info)
Loop Until x = ubound(Info)
For each x in Info 
If x <> "" Then
Unique = Unique & Chr(13) & x
End If
Next

MsgBox Unique
Info=Array(“Arup”、“John”、“Mike”、“John”、“Lisa”、“Arup”)
x=0
z=ubound(信息)
做
x=x+1
做
z=z-1
如果x=z,则
信息(x)=信息(z)
ElseIf Info(x)=Info(z)然后
信息(x)=“”
如果结束
循环直到z=0
z=ubound(信息)
循环直到x=ubound(信息)
对于信息中的每个x
如果x为“”,则
唯一=唯一&Chr(13)和x
如果结束
下一个
MsgBox唯一

Hello Horner,VBscript中是否有任何直接函数或方法可以给出任何特定列中填充数据的行数?@user1878162-请发布一个新问题。请在下面的帖子中帮助我-@VBSlover:请研究字典中的文档以了解(1)你不能在字典中放置重复的键,因此,根本不需要移除;(2) .Keys方法是一种返回某些内容(字典键的数组)的方法,语句“x=d.Keys()”将此方法作为函数调用并指定返回值,因此根据“调用函数时使用参数列表()”规则,()应该存在,但盖茨先生自己的示例代码省略了()并仍然有效,因此,请自己决定是否要学究式(像我一样)。@VBSlover:直接从文档中选择:“如果在更改项时未找到键,则使用指定的newitem创建一个新键。”若要解释其含义,请说明:如果键存在,则只分配newitem。