Em có sheet("ketqua") muốn chuyển toàn bộ Cột(3) thành dạng text để có thể cộng bằng hàm Sum/Sumif.
Số liệu tại Cột(3) là số hiệu các tài khoản kế toán nên em cần dùng hàm Sum/Sumif cho nhanh và đơn giản
Em đã dùng thử code sau để Format mà vẫn không được:
Em có sheet("ketqua") muốn chuyển toàn bộ Cột(3) thành dạng text để có thể cộng bằng hàm Sum/Sumif.
Số liệu tại Cột(3) là số hiệu các tài khoản kế toán nên em cần dùng hàm Sum/Sumif cho nhanh và đơn giản
Em đã dùng thử code sau để Format mà vẫn không được:
Em có sheet("ketqua") muốn chuyển toàn bộ Cột(3) thành dạng text để có thể cộng bằng hàm Sum/Sumif.
Số liệu tại Cột(3) là số hiệu các tài khoản kế toán nên em cần dùng hàm Sum/Sumif cho nhanh và đơn giản
Em đã dùng thử code sau để Format mà vẫn không được:
Sub ABC()
Dim Arr(), Res() As String, i&, sRow&
On Error Resume Next
With Sheets("ketqua")
Arr = .Range("C1", .Range("c" & Rows.Count).End(xlUp)).Value
sRow = UBound(Arr)
ReDim Res(1 To sRow, 1 To 1)
For i = 1 To sRow
Res(i, 1) = Arr(i, 1)
Next i
.Range("C1").Resize(sRow).Value = Res
End With
End Sub
Dạ cảm ơn Mr @HieuCD nhiều ạ, code chạy đúng ý em rồi ạ.
Em đang tổng hợp các bảng CĐKT bằng code bên dưới và giá trị f2 là cột chứa số hiệu CĐKT (cột f2 ở dòng "Set rs =cn....)
Vậy giờ em muốn ngay tại lúc lấy dữ liệu đã mặc định f2 phải định dạng text thì code sửa thế nào ạ?
Mã:
Public Sub DATA_CDKT()
Dim cn As Object, rs As Object, i As Byte, lr As Long, fso As Object, NewSh As Worksheet
Set cn = CreateObject("adodb.connection")
Set fso = CreateObject("Scripting.FileSystemObject")
set newsh = thisworkbook.sheet("CDKT_Total")
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "CDKT01", "*.xl*"
.InitialFileName = "*CDKT01*.*"
.AllowMultiSelect = True
.Show
For i = 1 To .SelectedItems.Count
If Val(Application.Version) < 12 Then
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & .SelectedItems(i) & ";mode=Read;Extended Properties=""Excel 8.0;HDR=No"";")
Else
cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & .SelectedItems(i) & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
End If
Set rs = cn.Execute("select '" & fso.GetBaseName(.SelectedItems(i)) & "',f1,f2,val(f3),val(f4),val(f5),val(f6) from [CDKT011$B9:G97] ")
lr = NewSh.Range("A" & Rows.Count).End(3).Row
If Not rs.EOF Then NewSh.Range("A" & lr + 1).CopyFromRecordset rs
rs.Close
cn.Close
Next
End With
Application.ScreenUpdating = True
End Sub
À em có 02 câu hỏi nữa liên quan đến đoạn code này mà không rõ hỏi ở đây luôn có tiện không ạ? sợ lệch tiêu đề, nếu sai thì mạn phép bỏ qua cho em và không cần trả lời đâu ạ ^!^
Code trên dùng tốt cho Office 2010 trở lên, còn Office 2007 thì bị lỗi:
Đoạn code này không có tác dụng lọc các dile có ký tự đầu tiên là "CDKT01" nên trong folder hiện tất cả các file excel gây rồi mắt trong khi em chỉ cần Folder đó chỉ hiện các file có các ký tự đầu là "CDKT01"
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "CDKT01", "*.xl*"
.InitialFileName = "*CDKT01*.*"
.AllowMultiSelect = True
.Show
Một lần nữa cảm ơn Mr @HieuCD và Anh/Chị đã ghé qua topic, nếu được xin giúp đỡ em thêm lần nữa ạ
Dạ cảm ơn Mr @HieuCD nhiều ạ, code chạy đúng ý em rồi ạ.
Em đang tổng hợp các bảng CĐKT bằng code bên dưới và giá trị f2 là cột chứa số hiệu CĐKT (cột f2 ở dòng "Set rs =cn....)
Vậy giờ em muốn ngay tại lúc lấy dữ liệu đã mặc định f2 phải định dạng text thì code sửa thế nào ạ?
Mã:
Public Sub DATA_CDKT()
Dim cn As Object, rs As Object, i As Byte, lr As Long, fso As Object, NewSh As Worksheet
Set cn = CreateObject("adodb.connection")
Set fso = CreateObject("Scripting.FileSystemObject")
set newsh = thisworkbook.sheet("CDKT_Total")
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "CDKT01", "*.xl*"
.InitialFileName = "*CDKT01*.*"
.AllowMultiSelect = True
.Show
For i = 1 To .SelectedItems.Count
If Val(Application.Version) < 12 Then
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & .SelectedItems(i) & ";mode=Read;Extended Properties=""Excel 8.0;HDR=No"";")
Else
cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & .SelectedItems(i) & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
End If
Set rs = cn.Execute("select '" & fso.GetBaseName(.SelectedItems(i)) & "',f1,f2,val(f3),val(f4),val(f5),val(f6) from [CDKT011$B9:G97] ")
lr = NewSh.Range("A" & Rows.Count).End(3).Row
If Not rs.EOF Then NewSh.Range("A" & lr + 1).CopyFromRecordset rs
rs.Close
cn.Close
Next
End With
Application.ScreenUpdating = True
End Sub
À em có 02 câu hỏi nữa liên quan đến đoạn code này mà không rõ hỏi ở đây luôn có tiện không ạ? sợ lệch tiêu đề, nếu sai thì mạn phép bỏ qua cho em và không cần trả lời đâu ạ ^!^
Code trên dùng tốt cho Office 2010 trở lên, còn Office 2007 thì bị lỗi:
Đoạn code này không có tác dụng lọc các dile có ký tự đầu tiên là "CDKT01" nên trong folder hiện tất cả các file excel gây rồi mắt trong khi em chỉ cần Folder đó chỉ hiện các file có các ký tự đầu là "CDKT01"
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "CDKT01", "*.xl*"
.InitialFileName = "*CDKT01*.*"
.AllowMultiSelect = True
.Show
Một lần nữa cảm ơn Mr @HieuCD và Anh/Chị đã ghé qua topic, nếu được xin giúp đỡ em thêm lần nữa ạ
Public Sub DATA_CDKT()
Dim cn As Object, rs As Object, i As Byte, lr As Long, fso As Object, NewSh As Worksheet
Set cn = CreateObject("adodb.connection")
Set fso = CreateObject("Scripting.FileSystemObject")
Set NewSh = ThisWorkbook.Sheet("CDKT_Total")
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "CDKT01", "*.xl*"
.InitialFileName = "*CDKT01*.*"
.AllowMultiSelect = True
.Show
For i = 1 To .SelectedItems.Count
If Val(Application.Version) < 12 Then
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & .SelectedItems(i) & ";mode=Read;Extended Properties=""Excel 8.0;HDR=No"";")
Else
cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & .SelectedItems(i) & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
End If
Set rs = cn.Execute("select '" & fso.GetBaseName(.SelectedItems(i)) & "',f1,cstr(f2),val(f3),val(f4),val(f5),val(f6) from [CDKT011$B9:G97] ")
lr = NewSh.Range("A" & Rows.Count).End(3).Row
If Not rs.EOF Then NewSh.Range("A" & lr + 1).CopyFromRecordset rs
rs.Close
cn.Close
Next
End With
Set cn = Nothing: Set rs = Nothing
Application.ScreenUpdating = True
End Sub