sanhdieu0911
Thành viên mới
- Tham gia
- 14/12/10
- Bài viết
- 45
- Được thích
- 10
làm thì được đấy bạn, nhưng bạn cho hỏi có quy luật gì không.Mọi người cho tôi xin code ghi file Excel ban đầu, ra dạng file Ketqua.TXT với. Cám ơn mọi người đã quan tâm.
Sub TaoFile(ByVal DuongDan As String, ByVal NoiDung As String)
'CHU THICH LENH: TAO FILE TXT VA VIET NOI DUNG VAO FILE
Dim Arr As Variant
Dim MyFile As Object
Dim fso As Object
Dim i As Long
Set fso = CreateObject("Scripting.FileSystemObject")
Arr = Split(DuongDan, "\")
DuongDan = Arr(0)
For i = LBound(Arr) + 1 To UBound(Arr) - 1
DuongDan = DuongDan & "\" & Arr(i)
If Not fso.FolderExists(DuongDan) Then
fso.CreateFolder (DuongDan)
End If
Next i
If Right(Arr(i), 4) <> ".txt" Then Arr(i) = Arr(i) & ".txt"
DuongDan = DuongDan & "\" & Arr(i)
On Error Resume Next
fso.DeleteFile (DuongDan)
Set MyFile = fso.CreateTextFile(DuongDan, True, True)
With MyFile
.WriteLine NoiDung
.Close
End With
Set MyFile = Nothing
Set fso = Nothing
End Sub
167772165, "P2",XXX , , ,"", 06-07-2017/09:40:28.0 , MEAS; (Dòng 1)Cám ơn bạn đã quan tâm, mình đã sửa lại _ _ 167772171, "2", "Info 1", ""; (dòng 24 file txt) : tôi đã đẩy toàn bộ số liệu đó sang cột B
Dòng trống. theo file excel thì là dòng 1 và dòng 23 có dòng trống, còn file txt thì lại là 22 và 23 : Cái này mình rất xin lỗi, do mình không để ý, thực ra chỉ quan trọng dòng trống trong file excel để ngăn cách các dữ liệu. mình đã xóa dòng trống ở 1 trong excel và 22 ở TXT rồi.
Cám ơn bạn nhé, tôi đã bỏ số 0 đi rồi vì không muốn lấy. rồi tôi đã gộp infor lại rồi. thực ra dòng infor sẽ có quy luật từ 1 đến 8 thôi nếu gộp dòng 1 đến 8 vào info thì sẽ được dòng info 1, info 2... info 8 rồi lặp lại.167772165, "P2",XXX , , ,"", 06-07-2017/09:40:28.0 , MEAS; (Dòng 1)
chỗ màu xanh đó là số 0 bạn không muốn lấy đúng không?
chỗ màu đỏ là ô trống như 2 ô trước, vậy tại sao 2 ô trước không có gì, ô sau lại là ""
167772171, "2", "Info 1", ""; (<=Dòng 23 chỗ này số 1 sao trở thành "")
167772165, "P2", 1, 63.232130, 94.370520, 0.000000, 0.000000, 06-07-2017/09:40:28.0, 0.000000, 103, 00001100; dòng 56 2 chỗ đó số 0.000000 sao lại lấy mà bên trên dòng 1 lại không lấy
chỗ xanh lá đều là số sao có cái lại ở trong ngoặc kép, cái lại không. có quy luật gì không bạn
Cám ơn bạn nhé, tôi đã bỏ số 0 đi rồi vì không muốn lấy. rồi tôi đã gộp infor lại rồi. thực ra dòng infor sẽ có quy luật từ 1 đến 8 thôi nếu gộp dòng 1 đến 8 vào info thì sẽ được dòng info 1, info 2... info 8 rồi lặp lại.
Số xanh lá thì chỗ số đầu là số, còn số thứ 2 có thể là ký tự bất kỳ bạn à. bạn xem có chỗ nào bất hợp lý, bạn giúp mình thay đổi cho hợp lý với nhé.
tôi đã sửa lại file excel, có gì bạn xem giúp nhé...
Bạn giúp tôi điền sẵn đường link vào nhé D:\Ketqua.TXT luôn nhé vì tôi thử thay vào toàn bị lỗi thôi. Tôi cũng chưa hiểu phần nội dung là gì... và sửa như nào nữa.
cám ơn bạn nhiều
Sub GPE()
Dim ArrNguon As Variant
Dim ArrKQ As Variant
Dim YN As Boolean
ArrNguon = Range("A1:J16").Value
ReDim ArrKQ(1 To UBound(ArrNguon, 1), 1 To 1)
For i = LBound(ArrKQ, 1) To UBound(ArrNguon, 1)
For j = LBound(ArrKQ, 2) To UBound(ArrNguon, 2)
If Len(ArrNguon(i, j)) > 0 Then x = j
Next j
If x = 0 Then
ArrKQ(i, 1) = ""
GoTo NexX
End If
For j = LBound(ArrKQ, 2) To UBound(ArrNguon, 2)
If InStr(ArrNguon(i, j), "/") > 0 Then
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & Replace(ArrNguon(i, j), "/", "-")
If j < UBound(ArrNguon, 2) Then
j = j + 1
ArrKQ(i, 1) = ArrKQ(i, 1) & "/" & ArrNguon(i, j)
End If
GoTo NextJ
End If
If Not IsNumeric(ArrNguon(i, j)) Then ArrNguon(i, j) = """" & ArrNguon(i, j) & """"
If Len(ArrNguon(i, j)) > 0 Then
k = k + 1
Select Case k
Case 1
ArrKQ(i, 1) = ArrKQ(i, 1) & vbTab & ArrNguon(i, j) 'cot 1
Case 2
If IsNumeric(ArrNguon(i, j)) Then ArrNguon(i, j) = """" & ArrNguon(i, j) & """" 'cot 2
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & ArrNguon(i, j)
Case Else
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & ArrNguon(i, j) 'cot con lai
End Select
Else
If Len(ArrKQ(i, 1)) > 0 Then
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & ArrNguon(i, j)
Else
ArrKQ(i, 1) = ArrKQ(i, 1) & vbTab
End If
End If
If j = x Then
ArrKQ(i, 1) = ArrKQ(i, 1) & ";"
Exit For
End If
NextJ:
Next j
NexX:
x = 0
k = 0
Next i
For i = LBound(ArrKQ, 1) To UBound(ArrKQ, 1)
txt = txt & ArrKQ(i, 1) & ChrW(10)
Next i
TaoFile "D:\KetQua.txt", txt
End Sub
Sub TaoFile(ByVal DuongDan As String, ByVal NoiDung As String)
'CHU THICH LENH: TAO FILE TXT VA VIET NOI DUNG VAO FILE
Dim Arr As Variant
Dim MyFile As Object
Dim fso As Object
Dim i As Long
Set fso = CreateObject("Scripting.FileSystemObject")
Arr = Split(DuongDan, "\")
DuongDan = Arr(0)
For i = LBound(Arr) + 1 To UBound(Arr) - 1
DuongDan = DuongDan & "\" & Arr(i)
If Not fso.FolderExists(DuongDan) Then
fso.CreateFolder (DuongDan)
End If
Next i
If Right(Arr(i), 4) <> ".txt" Then Arr(i) = Arr(i) & ".txt"
DuongDan = DuongDan & "\" & Arr(i)
On Error Resume Next
fso.DeleteFile (DuongDan)
Set MyFile = fso.CreateTextFile(DuongDan, True, True)
With MyFile
.WriteLine NoiDung
.Close
End With
Set MyFile = Nothing
Set fso = Nothing
End Sub
thử code này nhé bạnCám ơn bạn nhiều lắm... tôi đã chạy thử và ra được file kết quả. nhưng kết quả xuất ra có chút trục trắc... các dòng được ghi liền kề và không được xuống dòng bạn à."P2", , , ,"", code đang chạy ra các dấu tab, nhưng file mẫu là dấu cách và thiếu :
167772165, "P2", , , ,"", 06-07-2017/09:40:28.0 , MEAS;
167772165, "P2", , , , , "07-06-2017", "9:40:22.0", "MEAS";
. bạn xem giúp mình với.. Đúng là file I.D.X đó bạn à. Chắc bạn cũng làm việc với file này rồi à?
Option Explicit
Function GPE(ByVal Rn As Range) As String
Dim ArrNguon As Variant
Dim ArrKQ As Variant
Dim i As Long, j As Long, x As Long, k As Byte
Dim txt As String
ArrNguon = Rn.Value
ReDim ArrKQ(1 To UBound(ArrNguon, 1), 1 To 1)
For i = LBound(ArrKQ, 1) To UBound(ArrNguon, 1)
For j = LBound(ArrKQ, 2) To UBound(ArrNguon, 2)
If Len(ArrNguon(i, j)) > 0 Then x = j
Next j
If x = 0 Then
ArrKQ(i, 1) = ""
GoTo NexX
End If
For j = LBound(ArrKQ, 2) To UBound(ArrNguon, 2)
If InStr(ArrNguon(i, j), "/") > 0 Or InStr(ArrNguon(i, j), "-") > 0 Then
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & Replace(ArrNguon(i, j), "/", "-")
If j < UBound(ArrNguon, 2) Then
j = j + 1
ArrKQ(i, 1) = ArrKQ(i, 1) & "/" & ArrNguon(i, j)
End If
GoTo NextJ
End If
If Not IsNumeric(ArrNguon(i, j)) Then ArrNguon(i, j) = """" & ArrNguon(i, j) & """"
If Len(ArrNguon(i, j)) > 0 Then
k = k + 1
Select Case k
Case 1
ArrKQ(i, 1) = ArrKQ(i, 1) & vbTab & ArrNguon(i, j) 'cot 1
Case 2
If IsNumeric(ArrNguon(i, j)) Then ArrNguon(i, j) = """" & ArrNguon(i, j) & """" 'cot 2
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & ArrNguon(i, j)
Case Else
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & ArrNguon(i, j) 'cot con lai
End Select
Else
If Len(ArrKQ(i, 1)) > 0 Then
ArrKQ(i, 1) = ArrKQ(i, 1) & "," & vbTab & ArrNguon(i, j)
Else
ArrKQ(i, 1) = ArrKQ(i, 1) & vbTab
End If
End If
If j = x Then
ArrKQ(i, 1) = ArrKQ(i, 1) & ";"
Exit For
End If
NextJ:
Next j
NexX:
x = 0
k = 0
Next i
For i = LBound(ArrKQ, 1) To UBound(ArrKQ, 1)
txt = txt & vbTab & ArrKQ(i, 1) & ChrW(10)
Next i
txt = Replace(Replace(txt, vbTab & ",", ","), """"",", ",")
GPE = txt
End Function
Sub XuatKetQua()
TaoFile "D:\KetQua.txt", GPE(Range("A1:J16")) '<=thay d?i vùng d? li?u ? dây
End Sub
lỗi thế nào bạnMình thử chạy, mà toàn thấy lỗi.
trong 1 ổ không thể có 2 file cùng tên + cùng đuôi mở rộng bạn nhékhi xuất ra sẽ xuất thành 3 tên file TXT với cùng tên sheet ở ổ D.
txt = Replace(Replace(txt, vbTab & ",", ","), """"",", ",")
txt = Replace(Replace(txt, vbTab & ",", ","), """"",", " ,")