首页 文章

尝试使用VBA在Excel中存储文本文件中的唯一字符串

提问于
浏览
0

我的一个循环将字符串输入excel时出现问题 . 我从文本文件中提取数据可以是任意长度,但到目前为止我使用的所有数据都是100行数据和50000行数据之间的任何数据 . 我试图提取的字符串长度为4个字符,通常是数字,但可以是字母数字 . 默认情况下,字符为0001,0002,0003和0004,但如果他们选择使用任何其他4个字符,这完全取决于我们的客户 . 在Excel中输入数据时,我只想输入唯一值 .

整个代码可以给出,但其他一切工作正常,所以我认为没有必要 . 如果您这么认为,请求我将其编辑 . 请记住,我已经尝试了许多不同的尝试,逻辑似乎永远不会成功 .

结果是一长串的行,其中包含文本文件中的每个值 .

如果我不得不猜测,这是由于字符串是一个数字然后excel存储它只是“2”而不是“0002”所以我已经格式化整个列显示4个字符 . 即便如此,我认为Excel将其视为“2”,因此字符串永远不会匹配数据 .

任何帮助表示赞赏 .

FileName = Application.GetOpenFilename()
Open FileName For Input As #1

strSearch = "MTRDT"

Do Until EOF(1)
Line Input #1, ReadData
    If Left(ReadData, Len(strSearch)) = strSearch Then
            MtrdtCount = MtrdtCount + 1
            MeterType = Mid(ReadData, 78, 4)
            lastrow = Cells(Rows.Count, "G").End(xlUp).Row + 1
            MeterTypeTest = True

            For Each cell In Range("G3:G" & lastrow)
                If MeterType = cell.Value Then
                    MeterTypeTest = False
                    Exit For
                End If
            Next cell

            If MeterTypeTest = True Then
                Range("G" & MeterTypeCnt) = MeterType
                MeterTypeCnt = MeterTypeCnt + 1

            End If
    Else
    End If
Loop

2 回答

  • 1

    如果使用显示的方法输入了所有数据,则Excel将不会将输入的数据视为 0002 作为数字 2 - 它将将其视为字符串 "0002" .

    但是您正在针对 "'" & Mid(ReadData, 78, 4) 测试这些值,这意味着您将 "0002""'0002" 进行比较 .

    在将数据输入单元格时,需要添加 ' 字符,而不是在进行比较之前 . 所以以下应该有效:

    FileName = Application.GetOpenFilename()
    Open FileName For Input As #1
    
    strSearch = "MTRDT"
    
    Do Until EOF(1)
    Line Input #1, ReadData
        If Left(ReadData, Len(strSearch)) = strSearch Then
            MtrdtCount = MtrdtCount + 1
            MeterType = Mid(ReadData, 78, 4)
            lastrow = Cells(Rows.Count, "G").End(xlUp).Row + 1
            MeterTypeTest = True
    
            For Each cell In Range("G3:G" & lastrow)
                If MeterType = cell.Value Then
                    MeterTypeTest = False
                    Exit For
                End If
            Next cell
    
            If MeterTypeTest Then
                Range("G" & MeterTypeCnt) = "'" & MeterType
                MeterTypeCnt = MeterTypeCnt + 1
            End If
        End If
    Loop
    
  • 0

    我认为设置列“G”的numberformatLocal如下所示

    Columns("g").NumberFormatLocal = "@"
    
    
    Filename = Application.GetOpenFilename()
    Open Filename For Input As #1
    
    strSearch = "MTRDT"
    
    Do Until EOF(1)
    Line Input #1, ReadData
        If Left(ReadData, Len(strSearch)) = strSearch Then
                MtrdtCount = MtrdtCount + 1
                MeterType = Mid(ReadData, 78, 4)
                lastrow = Cells(Rows.Count, "G").End(xlUp).Row + 1
                MeterTypeTest = True
    
                For Each cell In Range("G3:G" & lastrow)
                    If MeterType = cell.Value Then
                        MeterTypeTest = False
                        Exit For
                    End If
                Next cell
    
                If MeterTypeTest = True Then
                    Range("G" & MeterTypeCnt) = MeterType
                    MeterTypeCnt = MeterTypeCnt + 1
    
                End If
        Else
        End If
    Loop
    

相关问题