
17 個の .txt ファイルの中から 60 個の一意の値を見つける必要があります。一度に 1 つまたは 2 つの値を受け取る場合は、通常、単純に「検索」してコピーするだけですが、これほど大きなリストでは明らかにうまくいきません。
スプレッドシートには約 60 の口座番号があります。17 個の .txt ファイルのいずれかで各口座番号を見つけ、その口座行を別の .txt ファイルにコピーして編集/補完する必要があります。.txt ファイルは FTP アーカイブにあるため、.txt ファイルを一切変更しないように注意する必要がありますが、必要に応じて Excel にコピーすることはできます。
ルックアップ関数があることは知っていますが、まだあまり詳しくなく、何が必要なのかよくわかりません。この点について助けていただければ幸いです。ありがとうございます、L
答え1
役に立つかもしれないスクリプトを作成しました。
というフォルダを作成しますアカウントそこにスクリプトを .vbs 拡張子で保存します。
アカウントフォルダ内にフォルダを作成します入力検索するすべてのアカウント ファイルを入力フォルダーにコピーします。ファイルはすべて .txt ファイルである必要があります。そうでない場合は無視されます。
というファイルを作成しますアカウント番号.txtそれぞれの口座番号を別の行にリストします。スクリプトは各ファイルを開き、1行を読み取り、すべての口座番号と照合します。検索結果はアカウントが見つかりました.txt保証なしで提供されますので、自己責任でご使用ください。お役に立てれば幸いです。
' find all occurrances of an account number in a number of files
' place all account txt files into input folder
' accounts_found.txt is created if it is missing
' by 'Robert' 2017 - hereby placed into the Public Domain
' set some Constants here
Const ForRead = 1
Const ForWrite = 2
Const ForAppend = 8
Const OverWrite = True
Const NoOverWrite = False
Dim acct_num_list(100) ' max records for the array, num_accounts variable counts them anyway
inputFolderName = "input\" ' the folder where the txt files are
outputFileName = "accounts_found.txt" ' the output file for matched records
accountsFileName = "account_numbers.txt" ' the file which contains account numbers to search for
' = = = Start of Code = = =
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set outFile = objFSO.OpenTextFile(outputFileName, ForWrite, OverWrite)
Set objInputFolder = objFSO.GetFolder(inputFolderName)
Set sFileCollection = objInputFolder.Files
Set accounts_file = objFSO.OpenTextFile(accountsFileName, ForRead)
num_accounts = 0
DO While Not accounts_file.AtEndOfStream
acct_num_list(num_accounts) = accounts_file.ReadLine
num_accounts = num_accounts + 1
Loop
accounts_file.Close
For Each objFile in sFileCollection
If UCASE(objFSO.GetExtensionName(objFile)) = "TXT" then
Set sourceFile = objFSO.OpenTextFile(inputFolderName & objFile.Name, ForRead)
Do While Not sourceFile.AtEndOfStream
curr_line = sourceFile.ReadLine
For counter = 0 to num_accounts
if instr(1, curr_line, acct_num_list(counter),1) >= 1 then
outFile.WriteLine curr_line
End If
Next
Loop
End If
Next
' = = = End Of File = = =