首页 > 解决方案 > VBA 精确文本匹配

问题描述

我正在尝试InStr从现有文本文件中提取一列字母代码。我想让这个宏足够灵活,以允许手动输入要搜索的字母代码的选项。

我遇到问题的地方是字母代码中的常用数字(即C4和C45)。最初编写代码是为了搜索 2 个特定的字母代码,我希望能够用指向 2 个单元格的链接替换这 2 个标识符。

没有这样的运气,因为我不断收到不准确的回复。请看下面的代码:

Private Sub CmdLettersGetfile_Click()

Dim objFSO As Object
Dim myDir As String, myList()
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
Dim sFolder As String
Dim fd As Office.FileDialog

Dim row As Long
Dim row1 As Long
Dim FCount As Integer
Dim FCount1 As Integer
Dim Val As String

Dim Pos As Integer
Dim Last1 As Long  'Mark the last row
Dim Start2 As Long
Dim Last2 As Long  'Mark the last row
Set fd = Application.FileDialog(msoFileDialogFilePicker)

       For Each cn In ThisWorkbook.Connections
cn.Delete
Next cn


 With ActiveSheet
     Lastrow = Sheets("MAIN").Cells(.Rows.Count, "E").End(xlUp).row
End With
'
Worksheets("REPORT").Range("A6:AA1000000").ClearContents
Worksheets("REPORT").Range("A6:AA1000000").ClearFormats
row1 = 6  'Start of REPORT ROW

For row = 12 To Lastrow
sFile = Worksheets("MAIN").Cells(row, "E").Value

 
 Pos = InStr(1, sFile, "org")
 
 If Pos = 0 Then
 Val = Worksheets("MAIN").Cells(9, "H")
 Else
 Val = Worksheets("MAIN").Cells(10, "H")
 End If
 
 Pos = 0
 


Dim strFilename As String
Dim strTextLine As String
Dim iFile As Integer

iFile = FreeFile
strFilename = folderName & "\" & sFile
Open strFilename For Input As #iFile


Last1 = 0
Last2 = 0

Do Until EOF(1)
    Line Input #1, strTextLine
    FCount = FCount
    Pos = InStr(1, strTextLine, Val)

我清理了一些不相关的代码,以节省空间并专注于我遇到问题的行。

********更新(2018 年 4 月 26 日 @ 东部标准时间 18:12):当我尝试将其格式化Val为一个大写字母和 2 个数字时

Dim Val As String: Val = "([A-Z]{1})([0-9]{1})([0-9]{1})"

我得到以下信息:

结果数据

第 I 列是我需要缩小范围的字母代码。

*********更新 2(2018 年 4 月 27 日 @ 东部标准时间 14:37):

扩展的结果数据

我能够批量编辑我需要的内容。我希望这能让我更深入地了解我想要做什么。

标签: vbaexcel

解决方案


推荐阅读