Excel - Skrypt przeszukujący arkusz w poszukiwaniu komórki zawierającej określony tekst i zastępujący tekst określoną wartością

0

Chcę podzielić komórkę z danymi na inne komórki na podstawie danych w oryginalnej komórce. Dane z oryginalnej komórki wyglądają tak (cała zawartość w jednej komórce):

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

Należy go podzielić za pomocą „,” jako separatora. Dowiedziałem się, że mogę to zrobić za pomocą skryptu:

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

Wynik jest następujący:

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

Każda wartość jest pojedynczym tokenem zawierającym dwie części podzielone łącznikiem; oryginalna zawartość komórki i jej wartość zastępcza. Skrypt powinien szukać komórki zawierającej pierwszą część tokena, część „numer pola”.

Na przykład istnieje komórka zawierająca tekst „Field95” i komórka z tekstem „Field97” itp. Następnie chcę zastąpić pierwszą część tokena drugą częścią. Tak więc dla „Field95-4” należy znaleźć komórkę z zawartością „Field95” i zastąpić ją tekstem „4”. Komórkę o treści „Field97” należy zastąpić „4”. itp.

To jest plik programu Excel, który przesłałem, abyś mógł zobaczyć, o co chodzi w moim pytaniu. Zawiera dane. połączyć

Wiem, że dużo o to pytam, ale dużo próbowaliśmy i nie mogę zmusić go do działania.

Nie mogę się doczekać twoich odpowiedzi. Z góry dziękuję!

RedHawkDK
źródło
czy wielkość liter ma znaczenie?
Raystafarian
@Raystafarian nie :) Masz pomysł?
RedHawkDK

Odpowiedzi:

0

Zakładając, że Twoje wartości są w jednym zakresie, a zakres wyszukiwania i zamiany nie obejmuje tego zakresu , coś takiego może działać (dostosuj zakresy, wypróbuj kopię danych) -

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
źródło
dzięki za Twoją sugestię. Właśnie to wypróbowałem i myślę, że robię tutaj coś złego. Nic się nie dzieje;) Co masz na myśli Zakładając, że moje wartości mieszczą się w jednym zakresie? Wiem, że jest o co pytać, ale czy masz coś przeciwko pobraniu pliku, z którym się łączyłem, i tworzeniu makra? Byłbym SOOOO zadowolony. Grałem z tym problemem od ponad 10 godzin, hehe
RedHawkDK
w for each c in range(wierszu jest napisane „A: A”, czyli zakres, w którym należy zmienić wartości, które się mieszczą. W range("B:B").cells.replacewierszu „B: B” należy zmienić na zakres, którego szukasz.
Raystafarian
Jesteśmy prawie na miejscu. W rzeczywistości zastępuje niektóre pola danymi. Problem polega na tym, że nie są to poprawne pola, które są aktualizowane. Nie pasują do danych B: B (pole 95-4). Mam kolumnę A z wierszami zawierającymi dane z pola 1 do pola 120, a następnie mam kolumnę B z danymi, które należy zastąpić poprawnym polem A: A. (np. field95-4). Co to może być?
RedHawkDK
zobacz nową odpowiedź, działa dla przesłanego arkusza.
Raystafarian
Naprawdę znalazłem błąd w skrypcie. Nie wiem, jak to naprawić, ale utworzyłem plik programu Excel zawierający skrypt i powodujący błąd. Po zakończeniu skryptu „replaceRowData” pola są wypełniane liczbami od 1-34 itd. Myślę, że istnieje jakiś problem z pętlą? Oto link do nowego pliku: link Jesteśmy teraz blisko, hehe
RedHawkDK