我一直在解決以下問題一段時間,並且我得到了一個非常基本的版本,可以在沒有錯誤處理的情況下工作。我的目標是讓這個宏從個人宏觀工作簿中運行。從已關閉的工作簿填充正確的標題
我正在從各種來源導入管道分隔的文本文件,並且標題中的格式都不匹配(某些提供程序決定使用整個佈局)。有了這個問題,我創建了一個名爲Reference(又名Map)的Excel工作簿,其中包含傳入文件佈局和標準化/更正列的名稱格式。
對我來說好消息是,文件ID將始終在A列。我每個月需要處理約65個文件,因此我需要儘量減少所有可能的步驟,因此需要關閉參考工作簿。
因此,我在網上環顧四周,將大部分解決方案放在一起,根據位於A3中的ID拉入新的標題。然而,仍然存在一個困境,有時A3上的ID不會存在於參考工作簿上 - 我需要讓vlookup向下移動到下一行,直到結果不等於#N/A或0或空白。
在這一點上,我得到'Do Loop Until'爲第一場比賽找到正確的一行 - 完全無法跟隨它後面的任何代碼。
只要vlookup找到一個包含現有ID的行,然後運行下面的代碼片段來填充剩餘的標頭。下一步的唯一副作用是,由於某種原因,rID偏移+1行,如果最後一行不包含匹配的ID,則撤消'Do Loop'直到'。
'> Populate remining headers
For Each cell In rng1
cell.Value = ("=VLOOKUP(" & cID & rID & "," & map & "," & i & ",FALSE)")
i = i + 1
Next
這是我到目前爲止有:
Sub DAc_lookup_headers()
Dim wb1 As Workbook 'Current text/file
Dim map As String 'reference Map
Dim cID As String 'wb1 look up column A
Dim rID As String 'wb1 starting row number
Dim rng1 As Range 'wb1 Collection header range
Dim i As Long 'Index number per cell in range
Set wb1 = ActiveWorkbook
Set rng1 = wb1.ActiveSheet.[A1:G1]
map = ("'C:\Users\x165422\Desktop\New folder\[Reference.xlsx]Ref'!$A$1:$I$13")
rID = 3 'Row where ID is - will increment + 1 if not found
cID = "A" 'Column where ID is
i = 3 'Starting vlookup Index number - to increment per cell in range
'>Look for ID until value is found
Do
wb1.ActiveSheet.[a1].Value = ("=VLOOKUP(" & cID & rID & "," & map & "," & i & ",FALSE)")
rID = rID + 1
Loop Until wb1.ActiveSheet.[a1].Text <> "#N/A" Or "0"
'> Populate remining headers
For Each cell In rng1
cell.Value = ("=VLOOKUP(" & cID & rID & "," & map & "," & i & ",FALSE)")
i = i + 1
Next
'> Convert to values
With rng1
.Value = .Value
End With
End Sub
旨在爲數字您的任何頭?我發現.txt文件在分隔後經常會有拖尾/前導空格,而這會將它們轉換爲字符串。 – TMH8885
所有標題都是文本 - 清理的目的是爲了能夠減少通過查詢運行的Microsoft Access文件的數量來清理數據。我每個月處理幾百萬個單獨的條目。如果所有文件具有相同的頭文件,那麼導入Access的過程將是一個巨大的緩解。 – ExcelNovice2015
我最終取消了列計數驗證,因爲我可以編輯vlookup並添加更多字段。 – ExcelNovice2015