2017-06-16 26 views
0

我在將一個字符串輸入到excel中的一個循環中遇到問題。我從可以是任意長度的文本文件中提取數據,但到目前爲止我所使用的所有內容都在100行數據和50000行數據之間。我試圖提取的字符串長度爲4個字符,通常是數字,但可以是字母數字。默認情況下,字符爲0001,0002,0003和0004,但如果他們選擇使用任何其他4個字符,則這完全取決於我們的客戶。在Excel中輸入數據時,我只想輸入唯一值。嘗試使用VBA在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 

回答

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

這發帖時是一個錯誤。當我崩潰並詢問時,我正處於編輯的中間。感謝您的幫助,將「'」添加到兩者並將其更改爲If MeterTypeTest然後工作。我試圖將MeterType存儲爲沒有'並沒有測試'的字符串,但得到了和以前一樣的問題。有什麼想法發生了什麼? – Cody

+1

@Cody如果在單元格中輸入「0002」字符串時沒有''',Excel會將其存儲爲數字'2',並且在稍後與'「進行比較時不會匹配0002" '。 (它實際上是將文件中的「0002」與文件「2」進行比較,因爲VBA會將數字「2」轉換爲字符串「2」進行比較)。因此,您需要「 '當存儲數據時,但需要記住'''實際上不是單元內容的一部分,因此您必須檢查文件中的其他數據是否爲「0002」而不是「0002」。混亂?是。 – YowE3K

+0

這就是我正在想的事情。壞事是下一個我必須處理的循環是文本,我可能會在那裏確認問題。感謝您的幫助 – Cody

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 
+0

這樣做。在第一次運行這個語句後,我不得不添加語句來刪除存儲爲文本錯誤的數字。 – Cody

相關問題