Parsing data teks yang diformat secara tidak konsisten menggunakan Excel

0

Saya mengalami kesulitan memilah teks dari spreadsheet. Saya memiliki spreadsheet dengan ratusan catatan yang terlihat mirip dengan contoh di bawah ini (ini semua dalam satu sel):

7431340 03 POOLS E TECHNOLOGIES INC 90 NEW ENGLAND DRIVE 16 0.00 6,900 7,060

Saya perlu menguraikan masing-masing berikut ini ke dalam sel yang terpisah:

[7431340] [03 POOLS E TECHNOLOGIES INC] [90 NEW ENGLAND DRIVE] [7,060]

atau seperti yang akan muncul di lembar Excel

Hasil akhir di Excel, menampilkan angka pertama di kolom A, angka plus nama perusahaan di kolom B, alamat jalan di kolom C, dan angka terakhir di baris di kolom D

Masalah yang saya alami adalah bahwa data tidak konsisten untuk setiap catatan. Lebih banyak contoh:

7170258 111 HARBOR POINT OWNER LLC 115 TOWNE STREET 16 0.00 189,200 196,730
4469000 4 KIDZ INC 62 SOUTHFIELD AVENUE 16 0.00 3,000 9,500
6369875 3 HERMANOS LLC 912 EAST MAIN STREET 16 0.00 4,640 4 640

Saya ingin menghindari manipulasi manual sebanyak mungkin, tetapi saya khawatir saya kurang beruntung.

Bagaimana saya mengurai data ketika formatnya tidak konsisten?

smj7v3
sumber
1
Satu contoh yang Anda berikan membuang dua nilai numerik setelah alamat jalan; apakah itu konsisten? Sepertinya aturan pertama adalah menarik string angka pertama ke dalam sel, aturan kedua adalah mengambil angka segera setelah itu dan menambahkan nama perusahaan untuk masuk ke sel kedua, aturan ketiga adalah memindahkan alamat ke sel ketiga, dan aturan empat mengambil nilai yang diformat koma terakhir ke sel keempat, membuang tiga nilai numerik antara itu dan akhir alamat jalan. Apakah itu benar?
K7AAY
Seperti yang ditunjukkan oleh @ K7AAY, Anda belum menjelaskan aturan untuk memutuskan bagaimana data akan dipecah menjadi empat sel. Harap edit pertanyaan Anda untuk menambahkan informasi ini. Saya beberapa contoh lagi juga akan membantu.
Blackwood
@ K7AAY Mem-parsing string numerik pertama dan terakhir selalu konsisten, yang merupakan bagian yang mudah. Masalah sebenarnya yang saya miliki adalah mengurai dua informasi di tengah. Di situlah letak ketidakkonsistenan.
smj7v3
Seperti yang saya tulis, jika data Anda benar-benar representatif, solusi saya akan berhasil. Jika tidak, Anda harus memberikan contoh kegagalannya, untuk melihat apakah ada pola yang dapat digunakan.
Ron Rosenfeld

Jawaban:

0

Jika contoh Anda benar-benar representatif, maka ada pola yang dapat menerima ekstraksi dengan menggunakan Ekspresi Reguler. Ini bisa diimplementasikan dalam Excel menggunakan VBA.

Pola:

  • Mulai dari string
  • Seri digit diikuti oleh spasi
  • Substring yang dimulai dengan satu digit atau lebih, dan tidak mengandung digit lainnya
  • Substring kedua yang dimulai dengan satu atau lebih digit, dan tidak mengandung digit lainnya
  • beberapa grup koma digit yang dipisahkan spasi, dengan koma opsional (kembalikan yang terakhir)

Semua contoh Anda menunjukkan pola itu. Berikut adalah fungsi yang ditentukan pengguna yang akan menangani itu:

Option Explicit
Function extrAddressPart(sAddr As String, lPart As Long)
    Dim RE As Object, MC As Object
    Const sPat As String = "^(\d+)\s+(\d+\D+)\s+(\d+\D+)\s+.*\s+([\d,]+)$"

Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = sPat
    .MultiLine = True
    .Global = False
    If .Test(sAddr) = True Then
        Set MC = .Execute(sAddr)
        extrAddressPart = MC(0).submatches(lPart - 1)
    End If
End With
End Function

masukkan deskripsi gambar di sini

Tentu saja, jika contoh Anda tidak benar-benar representatif, maka solusi ini tidak akan berfungsi.

Ron Rosenfeld
sumber
Excel tidak bisa melakukan ekspresi reguler di Cari dan Ganti? Saya menggunakan LibreOffice Calc dan bisa.
Moss
Lebih baik tambahkan beberapa contoh bahwa cara menggunakan Fungsi ,,, dan satu OP lagi memiliki pembatas campuran, apakah ini akan bekerja untuk semua!
Rajesh S
@ Rajesh Masalah apa yang Anda miliki dengan menggunakan fungsi ini? Dan dalam contoh-contohnya, satu-satunya pembatas karakter adalah a <space>.
Ron Rosenfeld
@RonRosenfeld, periksa solusi saya di sana saya telah menunjukkan cara menggunakan Function =ReplaceAndSplit(A2,","),. Secara pribadi saya tidak memiliki masalah tetapi untuk orang lain mungkin juga saya telah menulis!
Rajesh S
@ RajeshS Dalam solusi Anda, Anda menyebutkan berbagai pembatas. Satu-satunya pembatas dalam contoh adalah <spasi> dan ketika itu digunakan, UDF Anda hanya membagi string menjadi kata-kata individual. Lihatlah tangkapan layar saya untuk pemahaman yang lebih baik tentang seperti apa contohnya.
Ron Rosenfeld
0

Karena Anda berurusan dengan Pembatas Berganda maka dalam hal ini saya ingin menyarankan Anda dua solusi yang mungkin.

Solusi 1 (VBA Macro):

Function ReplaceAndSplit(ByRef Text As String, ByRef DelimChars As String) As String()
    Dim DelimLen As Long, Delim As Long
    Dim strTemp As String, Delim1 As String, Arr() As String, ThisDelim As String
    strTemp = Text
    Delim1 = Left$(DelimChars, 1)
    DelimLen = Len(DelimChars)
    For Delim = 2 To DelimLen
        ThisDelim = Mid$(DelimChars, Delim, 1)
        If InStr(strTemp, ThisDelim) <> 0 Then _
            strTemp = Replace(strTemp, ThisDelim, Delim1)
    Next
    ReplaceAndSplit = Split(strTemp, Delim1)
End Function

Bagaimana itu bekerja:

  1. Masukkan kode ini sebagai Modul bersama Lembar.
  2. Tulis Formula ini di sel keinginan lalu isi sampai tepat sampai dibutuhkan, tekan F2dan selesaikan Ctrl+Shift+Enter.

    {=ReplaceAndSplit(A2,",")}

catatan:

  1. ","adalah Commasebagai Pembatas.
  2. Itu seharusnya " "untuk Space.
  3. "[ ]"untuk Brackets.

Solusi 2 (Formula Excel):

=SUBSTITUTE(TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",256)),(COLUMNS($A:A)-1)*255+1,255)),"]","")

catatan:

Anda perlu mengedit bagian Formula ini sesuai dengan Pembatas sebelum Anda menjalankannya, misalnya,

  1. SUBSTITUTE($A1,","untuk Commasebagai Pembatas.
  2. SUBSTITUTE($A1," "untuk Spacesebagai Pembatas.
  3. SUBSTITUTE($A1,"["untuk Bracketsebagai Pembatas.
Rajesh S
sumber
Saya pikir Anda salah paham terhadap contoh-contohnya. Baris kedua, dengan tanda kurung [ ]menunjukkan bagaimana ia ingin baris pertama terpecah menjadi sel. Dan koma adalah pemisah ribuan; bukan pembatas.
Ron Rosenfeld
@RonRosenfeld ,, di atasnya OP telah menulis ,, I need to parse each of the following into separate cells:dan OP ingin menempatkan data [ ]ke dalam sel yang terpisah ☺
Rajesh S
Nah, salah satu dari kita jelas tidak memahami contohnya.
Ron Rosenfeld
@Ron Rosenfeld mungkin, jadi lebih baik biarkan OP memutuskan ☺
Rajesh S
@RonRosenfeld Anda benar dalam menafsirkan Anda. Kurung mewakili sel. Saya pikir itu akan menjadi representasi visual yang bagus.
smj7v3