saya kebagian tugas memberi remarks pada makro nya
begini :
( semoga tidak terlalu nguawur ..)
Sub UnstructuredTextToTabel()
' by hapsari & siti Vi
' smg, 1 Oktober 2011
'---------------------
' pengumuman beberapa Variable-memory yg akan digunakan dlm mainan ini
Dim Rng As Range ' = variable Range yg akan diperosess
Dim Tbl As Range ' = variable Range dimana hasil akan dituliskan
Dim ArStr ' = Variant yg kemudian dijadikan array penampung
data
' baris pertama tiap set data; (sebelumnya
data dipecah (Split) menjadi beberapa kata)
Dim Strx As String ' = hasil TRIM tiap string yg ditemui di tiap baris
ex Tbl
Dim N As Long ' = counter, pencacah *index baris* pada Rng / loop
For N - Next N
dim r As Long ' pencacah baris untuk pemandu penulisan Table hasil
dim p As Integer ' Angka-Posisi ditemukannya karakter "=" pada tiap
Strx
' Trap jika terjadi error (karena user mengklik tombol cancel pada
InputBox)
On Error GoTo Ngisor
' karena range yg akan diproses tidak dapat diduga secara otomatis
' (bikaos ada baris kosong didalamnya, maka informasi Letak dan Dimensinya
' lebih aman kalau ditentukan oleh Manusia User dengan mengisi InputBox
' Type 8 dm InputBox milik aplikasi excel adalah = object Range)
Set Rng = Application.InputBox( _
"Tentukan Range yg akan diproses", _
"Konversi Unstructured Text to Normal Tabel", _
Selection.Address, , , , , 8)
' menentukan letak Tbl (dimana hasil akan dituliskan)
Set Tbl = Sheets("hasil").Cells(2, 1)
' mengaktifkan sheet tempat beradanya (parent of) range Tbl
Tbl.Parent.Activate
' dimulainya sebuah kalang (loop) dengan counter = n yg bernilai dari 1
' setiap step menaik 1 sampai mencapai N = tinggi Rng (range yg diproses)
' For N = 1 To Rng.Rows.Count
' tiap baris data di Rng di TRIM (dengan fungsi TRIM milik Excel (bukan
milik VBA)
' karena trim dari excel mampu menghilangkan KELEBIHAN spasi antar kata.
Strx = WorksheetFunction.Trim(Rng(N, 1))
' proses hanya akan dilanjutkan ke proses tingkat lebih dalam, jika Strx
berisi data
If Len(Strx) > 0 Then
' Jika strx mengandung kata "ALARM " di bagian depannya..
If Strx Like "ALARM *" Then
' Strx di Split menjadi beberapa kata dan array kata tsb
' ditampung oleh variable ArStr
ArStr = Split(Strx, " ")
' nilai R dinaikkan 1 point
r = r + 1
' baris r pada tabel hasil, Kolom 1 diisi kata ke 2
Tbl(r, 1) = ArStr(1) ' Alarm #
' baris r pada tabel hasil, Kolom 2 diisi kata ke 3
Tbl(r, 2) = ArStr(2) ' type
' dst.... sampai kolom 5 diisi kata ke 6
' ( Array hasil fungsi Split selalu dimulai dgn Index pertama = 0
)
Tbl(r, 3) = ArStr(3) ' severity
Tbl(r, 4) = ArStr(5) ' ID
Tbl(r, 5) = ArStr(6) ' type alarm
End If
' menentukan nilai p (posisi ditemukannya karakter "=" pada Strx
p = InStr(1, Strx, "=")
' Jika dlm Strx terdapat "=" maka...
If p > 0 Then
' Jika Strx dimulai dengan kata "alarm name..", maka.."
If LCase(Strx) Like "alarm name*" Then _
' S*ubString setelah "=*" diisikan ke Tabel hasil, Baris r,
Kolom 6
Tbl(r, 6) = Mid(Strx, p + 2, 99)
' Jika Strx dimulai dengan kata "alarm shield.." maka
If LCase(Strx) Like "alarm shield*" Then _
' ya gitu dech.... seterusnya
Tbl(r, 7) = Mid(Strx, p + 2, 99)
If LCase(Strx) Like "to alarm*" Then _
Tbl(r, 8) = Mid(Strx, p + 2, 99)
If LCase(Strx) Like "modification*" Then _
Tbl(r, 9) = Mid(Strx, p + 2, 99)
End If
End If
Next N
*Ngisor:*
End Sub
'-------end of makro--------
note
penjelasan tidak ada artinya jika tanpa melihat workbook & data didalamnya
seperti halnya :
PETANYAAN juga tidak ada artinya jika tidak disertai contoh set data nya
( tapi banyak sekali member yg "hobi"nya tanya** tanpa kirim workbook...)
2011/9/29 dendi wijayatullah <[email protected]>
>
> dear all, mau bertanya sedikit. perkenalkan nama saya dendi.
> saya mau nanya cara memisahkan data dari tabel pertama menjadi seperti
tabel kedua bagaimana ya caranya?
>
> Cara memisahkan data dari begini :
> ALARM 1 Fault Critical BSC 2158
Hardware
> Alarm name = SEND_DIV Channel Critical Alarm
> Alarm shield flag = Unshielded
> To alarm box flag = Report
> Modification flag = Unmodified
> ALARM 2 Fault Critical BSC 2448
Trunk
> Alarm name = Optical Receive Channel Alarm
> Alarm shield flag = Unshielded
> To alarm box flag = Report
> Modification flag = Unmodified
>
> Jadi begini gan :
>
> Alarm | type | severity alarm | alarm id | type alarm | alarm name
| shield alarm | report alatm | modified alarm
> 1 | Fault | Critical | 2158 | Hardware | SEND_DIV Channel Critical Alarm
| Unshielded | Report | Unmodified
>
> Gimana yah caranya? Pake macro kah? Terimakasih sebelumnya.
>