首页 > 解决方案 > VBA 从另一个带有空格的 Excel 中搜索

问题描述

我有我在我们部门调整过的代码,它可以工作。

但问题是数据库在“名称”单元格的末尾有带有空格的项目(行)。例如,每当我在“名称”列中搜索“chris”时,都会显示所有“chris”,但不会显示末尾带有空格(“chris”)的那些。

有没有一种方法可以包含所有有空格和没有空格的匹配项?数据库受到保护,因此我无法对其进行编辑并删除所有空格。

Sub Data_Search(wbMaster As Workbook, wbSlave As Workbook)

Dim ws As Worksheet
Dim dashboard As Worksheet
Dim dataArray As Variant
Dim datatoShowArray As Variant

Set dashboard = wbMaster.Sheets("Dashboard")


dataColumnStart = 1
dataColumnEnd = 15
dataColumnWidth = dataColumnEnd - dataColumnStart
dataRowStart = 2
dashboardDataColumnStart = 2

searchValue = dashboard.Range("C4").Value
fieldValue = dashboard.Range("E4").Value


If (fieldValue = "ID") Then
    searchField = 1
ElseIf (fieldValue = "Name") Then
    searchField = 2
End If


For Each ws In wbSlave.Worksheets


    If (ws.Name <> "Dashboard") Then


        dataArray = ws.Range(ws.Cells(dataRowStart, dataColumnStart), ws.Cells(ws.Cells(Rows.Count, dataColumnStart).End(xlUp).Row, dataColumnEnd)).Value

        ReDim datatoShowArray(1 To UBound(dataArray, 1), 1 To UBound(dataArray, 2))

        j = 1

        For i = 1 To UBound(dataArray, 1)

            If (dataArray(i, searchField) = searchValue) Then


                For k = 1 To UBound(dataArray, 2)

                    datatoShowArray(j, k) = dataArray(i, k)

                Next k


                 j = j + 1

            End If

        Next i


        nextRow = dashboard.Cells(Rows.Count, dashboardDataColumnStart).End(xlUp).Row + 1

        dashboard.Range(dashboard.Cells(nextRow, dashboardDataColumnStart), dashboard.Cells(nextRow + UBound(datatoShowArray, 1) - 1, dashboardDataColumnStart + dataColumnWidth)).Value = datatoShowArray

    End If

标签: excelvba

解决方案


您可以使用该Trim()函数创建项目的副本,其中包含删除前后的任何空格。

在您的情况下,更改此行

If (dataArray(i, searchField) = searchValue) Then

If (Trim(dataArray(i, searchField)) = searchValue) Then

参考:
https ://docs.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/ltrim-rtrim-and-trim-functions


推荐阅读