Code VBA định dạng dữ liệu cột F và G là Text và canh giữa. (1 người xem)

  • Thread starter Thread starter DMQ
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
722
Được thích
57
Giới tính
Nam
Chào các anh chị !!!!!
Em có code lấy dữ liệu, nhưng khi dữ liệu đập vào cột F và G thì không định dạng Text nên dùng Vlookup không ra.
Mà dữ liệu đập vào có cả Text và Number, mong các anh chị giúp đỡ.
 
Chào các anh chị !!!!!
Em có code lấy dữ liệu, nhưng khi dữ liệu đập vào cột F và G thì không định dạng Text nên dùng Vlookup không ra.
Mà dữ liệu đập vào có cả Text và Number, mong các anh chị giúp đỡ.
Trước khi gán xuống sheet thì xử lý nó trước nó đi anh
 
Upvote 0
Bạn chỉ mình với, code đây:

Mã:
Option Explicit

Sub LaySheetXuat()
Dim fd As Workbook, sd As Worksheet, sn As Worksheet, mn, lrd As Long, lrn As Long, i As Long, j As Long, k As Long, p As Long, ktts As Long, tensheet As Long
Dim chonFile, openfile

Application.ScreenUpdating = False
Application.DisplayAlerts = False
    
Set fd = ThisWorkbook
'Mo thuoc tinh File Open
chonFile = Application.GetOpenFilename(Title:="Chon file du lieu can lay", filefilter:="exel file(*.xls*),*.xls*", MultiSelect:=True)
    On Error Resume Next
For i = 1 To UBound(chonFile)
    On Error GoTo 0
    If i = 0 Then Exit Sub
    Set openfile = Workbooks.Open(chonFile(i), False)
    
    With openfile
        For ktts = 1 To Sheets.Count    'Kiem tra xem file co ten sheets can lay du lieu khong
            If Sheets(ktts).Name = "Xuat" Then
                tensheet = tensheet + 1
                Exit For
            End If
        Next ktts

        If tensheet = 0 Then   'Neu file khong co ten sheet nao giong thi dong file và thoát khoi Sub
            openfile.Close
            MsgBox "Khong co sheets nào giông tên sheet cân lay du lieu, vui long chon lai file khac"
            GoTo thoat
        End If
    
        For j = 1 To fd.Sheets.Count
            For p = 1 To .Sheets.Count
                If fd.Sheets(j).Name = .Sheets(p).Name Then  'Nêu ten file nguon giong ten file dich thi lay du lieu
                    Set sd = fd.Sheets(j): lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
                    Set sn = openfile.Sheets(p): lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
                    mn = sn.Range("A6:P" & lrn): sd.Range("A" & lrd + 1).Resize(lrn - 4, 16) = mn
                    sd.Range("A" & lrd + 1).Resize(lrn - 4, 16).Borders.LineStyle = True
                j = j + 1
                End If
            Next p
        Next j
    End With
openfile.Close
thoat:
Next i

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
sao em thử thêm đoạn code này mà không được:
Mã:
sd.Range("F:G" & lrd + 1) = "'" & sd.Range("F:G" & lrd + 1)
sd.Range("F:G" & lrd + 1).Resize(r, 2).NumberFormat = "@"
 
Upvote 0
sao em thử thêm đoạn code này mà không được:
Mã:
sd.Range("F:G" & lrd + 1) = "'" & sd.Range("F:G" & lrd + 1)
sd.Range("F:G" & lrd + 1).Resize(r, 2).NumberFormat = "@"
Mã:
Range("F:G" & lrd + 1)
Mã:
Range("F" & lrd + 1 & ":G" & lrd + 1)

Thử sửa trên thành dưới xem sao
 
  • Yêu thích
Reactions: DMQ
Upvote 0
Code thêm dấu nháy đơn không được anh @CHAOQUAY ơi
 
Upvote 0
Mã:
sd.Range("F" & lrd + 1 & ":G" & lrd + 1).Resize(r, 1).NumberFormat = "@"
Code trên đã chuyển Text, nhưng các số 001,002,003,..v..vv thì lại biến thành 1,2,3.vv... mất các số không anh @CHAOQUAY ơi, mong anh giúp.
 
Upvote 0
Mã:
sd.Range("F" & lrd + 1 & ":G" & lrd + 1).Resize(r, 1).NumberFormat = "@"
Code trên đã chuyển Text, nhưng các số 001,002,003,..v..vv thì lại biến thành 1,2,3.vv... mất các số không anh @CHAOQUAY ơi, mong anh giúp.
Bạn chạy thử file dưới đây rồi tính tiếp
 

File đính kèm

Upvote 0
Chạy thấy đúng ý rồi anh ơi, nhưng không biết vận dụng anh @CHAOQUAY ơi.
 
Upvote 0
Chạy thấy đúng ý rồi anh ơi, nhưng không biết vận dụng anh @CHAOQUAY ơi.
Thấy nói là phải định dạng vùng đích trước khi điền dữ liệu nguồn, cái này không chắc lắm, hình như là thế thì phải, lâu rồi quên

Trong bài 3, bạn thử thêm dòng này
Mã:
sd.Range("A" & lrd + 1).Resize(lrn - 4, 16).NumberFormat = "@"
Phía trên dòng này
Mã:
mn = sn.Range("A6:P" & lrn): sd.Range("A" & lrd + 1).Resize(lrn - 4, 16) = mn
Rồi chạy thử xem sao
 
Upvote 0
dùng "@" thì nó định dạng Text, nhưng các số có số o đầu mất hết, như các mã số 041584,07712,010457 ... thành 41584,7712,10457.... anh @CHAOQUAY
Bài đã được tự động gộp:

em thấy có cách thêm dấu ' trước số thành chuỗi, hay convert thành String
 
Upvote 0
dùng "@" thì nó định dạng Text, nhưng các số có số o đầu mất hết, như các mã số 041584,07712,010457 ... thành 41584,7712,10457.... anh @CHAOQUAY
Bài đã được tự động gộp:

em thấy có cách thêm dấu ' trước số thành chuỗi, hay convert thành String
Tức là đã thử rồi?
 
Upvote 0
như If iSnumeric(mảng F:G ) = True Then Mảng(F:G) = cStr( mảng F:G)
 
Upvote 0
như If iSnumeric(mảng F:G ) = True Then Mảng(F:G) = cStr( mảng F:G)
Do không chịu gửi file nên cũng không viết code, chỉ gợi ý thôi:
- Tạo một mảng vừa với vùng dữ liệu tại cột F và cột G.
- Khai báo cho mảng với định dạng mong muốn.
- Lấy dữ liệu tại cột F và cột G đưa vào mảng rồi dán trả lại chỗ cũ là xong.
- Phần canh giữa thì đơn giản nên tự tìm hiểu.
 
Upvote 0
Cám ơn anh @Hoàng Tuấn 868 đã trả lơi, vì file là dữ liệu cty, nên em đang cố chép giả định.
Mong anh thông cảm.
 
Upvote 0
Cám ơn anh @Hoàng Tuấn 868 !!!
File đây anh. Mong anh chỉnh code cho cột F và Cột G là Text, vì dữ liệu gốc có cả số và Text. và canh giữa nha anh.
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
Cám ơn anh @Hoàng Tuấn 868 nhiều !!!
Nhưng sao code Border tới dòng 211, và dòng 211 có chữ #NA vậy anh??
 
Upvote 0
Dữ liệu tới dòng 75 thôi anh, mà Border tới dòng 211, và dòng 211 có chữ #NA, mà sao trên thanh công cụ Home, nó khong hiện là Text mà hiên General anh (cột F và G)
 
Upvote 0
Upvote 0
là do fileNguon có công thức tới dòng 211, đã xóa công thức, nhưng dòng cuối vẫn có chữ #NA, mong anh giúp coi lại file nguồnloigg.png
Tất nhiên dữ liệu là Text, tại thấy nó kỳ kỳ hỏi anh vậy
 
Upvote 0
Cám ơn anh @Hoàng Tuấn 868 nhiều.
Do em giả lập file không giống, mà anh ơi cột I và J là số, mong anh chỉnh cho thành định dạng #,##0.00.
khi gán vào file đích.
Mong anh @Hoàng Tuấn 868 giúp.loiPPPP.png
 
Upvote 0
Anh @Hoàng Tuấn 868 ơi, em muốn chỉ lấy dữ liệu khi cột C của file nguồn có ngày, còn không có ngày thì không lấy, dạng như
If mn(q, 3) <>" " then
Thì chỉnh code làm sao ạ.
 
Upvote 0
Em thêm chổ này không được anh @Hoàng Tuấn 868
Mã:
        For j = 1 To fd.Sheets.Count
            For p = 1 To .Sheets.Count
                If fd.Sheets(j).Name = .Sheets(p).Name Then  'Nêu ten file nguon giong ten file dich thi lay du lieu
                    Set sd = fd.Sheets(j): lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
                    Set sn = openfile.Sheets(p): lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
                    mn = sn.Range("A6:P" & lrn): sd.Range("A" & lrd + 1).Resize(lrn - 5, 16) = mn
                    mnp = sn.Range("F6:G" & lrn)
                    ReDim mnp1(1 To UBound(mnp, 1), 1 To 2)
                        For q1 = 1 To 2
                            For q = 1 To UBound(mnp, 1)
                            If mn(q, 3) <> "" Then                 ' them
                                mnp1(q, q1) = mnp(q, q1)
                              End If                                        ' them
                            Next q
                        Next q1
                       
                    sd.Range("F5").Resize(q - 1, 2) = mnp1
                    sd.Range("A" & lrd + 1).Resize(lrn - 5, 16).Borders.LineStyle = True
                    lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
                    sd.Range("I5:J" & lrd).NumberFormat = "#,##0.00"
                j = j + 1
                End If
             
            Next p
        Next j
    End With
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom