Excel - Tập lệnh tìm kiếm một trang tính cho một ô chứa văn bản cụ thể và thay thế văn bản bằng một giá trị cụ thể


0

Tôi muốn tách một ô có dữ liệu thành các ô khác dựa trên dữ liệu trong ô ban đầu. Dữ liệu từ ô ban đầu trông như thế này (tất cả nội dung trong một ô):

Field95-4,Field97-4,Field98-0,Field100-2,Field103-0,Field105-3,Field107-4,Field109-4,Field110-2,Field111-0,Field112-0,Field113-192,Field114-87,Field115-0,Field116-0,Field117-60

Nó nên được phân chia bằng cách sử dụng "," như một dấu phân cách. Tôi phát hiện ra rằng tôi có thể làm điều đó với một kịch bản:

Private Sub CommandButton1_Click()
Dim X As Variant
X = Split(Range("A1").Value, ",")
Range("A1").Resize(UBound(X) - LBound(X) + 1).Value = Application.Transpose(X)
End Sub

Sau đó, kết quả là như thế này:

Field95-4
Field97-4
Field98-0
Field100-2
Field103-0
Field105-3
Field107-4
Field109-4
Field110-2
Field111-0
Field112-0
Field113-192
Field114-87
Field115-0
Field116-0
Field117-60

Mỗi giá trị là một mã thông báo duy nhất chứa hai phần được chia cho dấu gạch nối; nội dung ô ban đầu và giá trị thay thế của nó. Tập lệnh nên tìm một ô chứa phần đầu tiên của mã thông báo, phần 'trường số'.

Ví dụ: Có một ô chứa văn bản 'Field95' và một ô có văn bản 'Field97', v.v. Sau đó, tôi muốn thay thế phần đầu tiên của mã thông báo bằng phần thứ hai. Vì vậy, đối với 'Field95-4', một ô có nội dung 'Field95' nên được tìm thấy và thay thế bằng văn bản '4'. Nên thay thế ô có nội dung 'Field97' bằng '4'. Vân vân.

Đây là một tệp excel tôi đã tải lên, vì vậy bạn có thể thấy câu hỏi của tôi là gì. Nó chứa dữ liệu. liên kết

Tôi biết rất nhiều điều để hỏi, nhưng chúng tôi đã cố gắng rất nhiều và tôi không thể làm cho nó hoạt động được.

Tôi đang mong chờ câu trả lời của bạn. Cảm ơn trước!


nó có phân biệt chữ hoa chữ thường không?
Raystafarian

@Raystafarian không :) Bạn có ý tưởng gì không?
RedHawkDK

Câu trả lời:


0

Giả sử giá trị của bạn nằm trong một phạm vi và phạm vi tìm kiếm & thay thế của bạn không bao gồm phạm vi đó, một cái gì đó như thế này có thể hoạt động (điều chỉnh phạm vi, thử bản sao dữ liệu của bạn) -

Sub test()
Dim X As Variant
X = Split(Range("A2").Value, ",")
Range("A2").Resize(UBound(X) - LBound(X) + 1).Value = Application.Transpose(X)
End Sub

Sub test2()
Application.ScreenUpdating = False
Dim strReplace As String
Dim strSearch As String
Dim i As Integer
Dim j As Integer

'Loop through cells
For Each c In Range("A2:A17")
    'Select non-blanks
    If c.Value <> "" Then
        On Error Resume Next
        'Get length of cell
        j = Len(c)
        'Find first delimiter and store position
        i = Application.WorksheetFunction.Search("-", c.Value)
        'Get strings!
        strSearch = Left(c, i - 1)
        strReplace = Right(c, j - i)
        'Find and Replace
        Range("c2:c121").Cells.Replace What:=strSearch, Replacement:=strReplace, LookAt:=xlWhole, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    End If
 Next c

Application.ScreenUpdating = True
End Sub

cảm ơn lời đề nghị của bạn Tôi vừa thử nó, và tôi nghĩ rằng tôi đang làm gì đó sai ở đây. Không có gì xảy ra;) Ý bạn là gì Giả sử giá trị của tôi nằm trong một phạm vi? Tôi biết rất nhiều điều để hỏi, nhưng bạn có phiền khi tải xuống tệp tôi đã liên kết và thực sự tạo macro không? Tôi sẽ rất vui. Chơi xung quanh với vấn đề này trong hơn 10 giờ nay hehe
RedHawkDK

trong for each c in range(dòng có ghi "A: A" là phạm vi bạn cần thay đổi mà giá trị của bạn đang ở. Trong range("B:B").cells.replacedòng, "B: B" cần được thay đổi thành phạm vi mà bạn đang tìm kiếm.
Raystafarian

Chúng tôi gần như ở đó. Nó thực sự thay thế một số lĩnh vực với dữ liệu. Vấn đề là, đó không phải là các trường chính xác đang được cập nhật. Chúng không khớp với dữ liệu B: B (trường95-4). Tôi có cột A với các hàng chứa dữ liệu từ trường 1 đến trường 120, sau đó tôi có cột B với dữ liệu cần được thay thế vào trường A: A chính xác. (ví dụ: trường 95-4). Điều đó có thể là gì?
RedHawkDK

Xem câu trả lời mới, nó hoạt động cho trang bạn đã tải lên.
Raystafarian

Tôi thực sự tìm thấy một lỗi trong kịch bản. Tôi không biết cách sửa nó, nhưng tôi đã tạo một tệp excel chứa tập lệnh và nó tạo ra lỗi. Khi tập lệnh "thay thếRowData" kết thúc, các Trường chứa đầy các số từ 1-34, v.v ... Tôi nghĩ có một số loại vấn đề vòng lặp? Đây là đường dẫn đến tập tin mới: link Chúng tôi đang đóng lại ngay bây giờ hehe
RedHawkDK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.