Ole đã gặp sự cố khi nhập thông tin vào sổ làm việc Excel. Có vẻ như các tệp anh ấy cần nhập là các tệp văn bản thường có hàng nghìn hàng nghìn bản ghi trong đó. Tuy nhiên, Ole không cần hầu hết các hàng đầu vào và thường loại bỏ chúng khi các bản ghi được nhập vào Excel. Ole đang tìm cách loại bỏ các bản ghi không mong muốn trong quá trình nhập để anh ấy có ít việc phải làm hơn khi dữ liệu nằm trong sổ làm việc của mình.

Có một số cách khác nhau để tiếp cận giải pháp cho vấn đề này. Một giải pháp là sử dụng Access làm bước nhập đầu tiên của bạn. Access sẽ dễ dàng xử lý hàng nghìn bản ghi bạn muốn nhập — ngay cả khi có nhiều bản ghi hơn những gì bạn có thể nhập vào Excel. Bạn có thể nhập tệp vào Access, lọc ra các bản ghi không mong muốn, sau đó xuất bảng kết quả dưới dạng sổ làm việc Excel.

Tuy nhiên, giải pháp tốt nhất có thể là bỏ qua hoàn toàn các bộ lọc nhập của Excel. Điều này hoạt động tốt nếu dữ liệu nhập của bạn, như của Ole, nằm trong tệp văn bản. Bạn có thể dễ dàng viết một quy trình nhập trong VBA và cho phép nó xử lý tệp nhập. Ví dụ: hãy xem xét macro sau:

Sub Import()

Dim sFile As String     Dim sUnwanted As String     Dim sDelim As String     Dim iRow As Integer     Dim iCol As Integer     Dim bBadRecord As Boolean     Dim iTemp As Integer

sFile = "d:\data.txt"

sUnwanted = "bad text"

sDelim = ","



Open sFile For Input As #1

iRow = 1     While Not EOF(1) 'Scan file line by line         iCol = 1         Line Input #1, sBuffer

' Check to see if should ignore record         bBadRecord = Instr(sBuffer, sUnwanted)



If Not bBadRecord Then             iTemp = Instr(sBuffer, sDelim)

While iTemp > 0                 With Application.Cells(iRow, iCol)

.NumberFormat = "@" 'Text formatting                     .Value = Left(sBuffer, iTemp-1)

End With                 iCol = iCol + 1                 sBuffer = Mid(sBuffer, iTemp+1, Len(sBuffer))

iTemp = Instr(sBuffer, sDelim)

Wend             If Len(sBuffer) > 0 Then                 With Application.Cells(iRow, iCol)

.NumberFormat = "@" 'Text formatting                     .Value = sBuffer                 End With             End If             iRow = iRow + 1         End If     Wend     Close #1 End Sub

Macro này mở một tệp dữ liệu và đọc từng bản ghi trong tệp. Nó kiểm tra bản ghi để đảm bảo rằng nó được phép nhập, sau đó kéo bản ghi ra, dựa trên dấu phân cách và nhồi thông tin vào trang tính hiện tại. Bạn có thể thay đổi tên của tệp dữ liệu (biến sFile), văn bản cho biết bản ghi không hợp lệ (biến sUnwallow) và dấu phân tách (biến sDelim).

Ví dụ, giả sử rằng bạn có một tệp dữ liệu tên là Customer.txt. Tệp này chứa tất cả hồ sơ khách hàng của bạn, nhưng bạn không muốn nhập hồ sơ cho khách hàng có địa chỉ bên trong Hoa Kỳ. Hơn nữa, các bản ghi trong tệp dữ liệu sử dụng một ký tự tab giữa mỗi trường. Trong trường hợp này, bạn chỉ cần thực hiện các thay đổi sau đối với các biến ở đầu macro:

sFile = "d:\Customers.txt"

sUnwanted = "United States"

sDelim = Chr(9)

Khi bạn chạy macro, trang tính hiện tại chỉ chứa dữ liệu mong muốn.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (8491) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: