Excel - Script que procura em uma planilha uma célula contendo texto específico e substitui o texto por um valor específico

0

Quero dividir uma célula com dados em outras células com base nos dados da célula original. Os dados da célula original são assim (todo o conteúdo em uma única célula):

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

Ele deve ser dividido usando "," como delimitador. Eu descobri que eu poderia fazer isso com um script:

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

Então o resultado é assim:

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

Cada valor é um único token que contém duas partes divididas por um hífen; o conteúdo original da célula e seu valor de substituição. O script deve procurar uma célula contendo a primeira parte do token, a parte 'fieldnumber'.

Por exemplo, há uma célula que contém o texto 'Field95' e uma célula com o texto 'Field97' etc. etc. Desejo substituir a primeira parte do token pela segunda parte. Portanto, para 'Field95-4', uma célula com o conteúdo 'Field95' deve ser encontrada e substituída pelo texto '4'. A célula com o conteúdo 'Field97' deve ser substituída por '4'. etc.

Este é um arquivo do Excel que eu enviei, para que você possa ver do que se trata minha pergunta. Ele contém os dados. ligação

Sei que é pedir muito, mas tentamos muito e não consigo fazê-lo funcionar.

Estou ansioso por suas respostas. Desde já, obrigado!

RedHawkDK
fonte
faz distinção entre maiúsculas e minúsculas?
Raystafarian
@Raystafarian no :) Você tem uma ideia?
RedHawkDK

Respostas:

0

Supondo que seus valores estejam em um intervalo e seu intervalo de pesquisa e substituição não inclua esse intervalo , algo como isso pode funcionar (ajuste os intervalos, experimente uma cópia dos seus dados) -

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
Raystafarian
fonte
Obrigado por sua sugestão. Acabei de experimentar e acho que estou fazendo algo errado aqui. Nada está acontecendo;) O que você quer dizer com Assumindo que meus valores estão em um intervalo? Sei que é pedir muito, mas você se importa de baixar o arquivo ao qual vinculei e de criar a macro? Eu ficaria MUITO feliz. Brinquei com esta questão por mais de 10 horas agora hehe
RedHawkDK
na for each c in range(linha, diz "A: A", que é o intervalo em que você precisa alterar em que seus valores estão. Na range("B:B").cells.replacelinha, o "B: B" precisa ser alterado para o intervalo que você está pesquisando.
Raystafarian
Estamos quase lá. Na verdade, ele substitui alguns dos campos por dados. O problema é que esses não são os campos corretos que estão sendo atualizados. Eles não correspondem aos dados B: B (campo95-4). Eu tenho a coluna A com linhas que contêm os dados do campo1 ao campo 120 e, em seguida, a coluna B com os dados que devem ser substituídos no campo A: A correto. (por exemplo, campo95-4). O que poderia ser isso?
RedHawkDK
ver nova resposta, funciona para a planilha que você enviou.
Raystafarian
Na verdade, encontrei um erro no script. Não sei como corrigi-lo, mas criei um arquivo do Excel que contém o script e que produz o erro. Quando o script "replaceRowData" termina, os campos são preenchidos com números de 1 a 34, etc. Acho que há algum tipo de problema de loop? Aqui está o link para o novo arquivo: link Estamos reeeaaaly close now hehe
RedHawkDK