Định dạng dữ liệu (2 người xem)

Liên hệ QC

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

chisinhvnn

Thành viên tiêu biểu
Tham gia
7/3/08
Bài viết
479
Được thích
104
Mình có ghi macro để định dạng dữ liệu, nhưng có điều kiện dữ liệu bằng tiếng việt nên VBA không hiểu. Nhờ GPE hoàn thiện giúp mình với
 

File đính kèm

Sao mấy cái tính tổng mục nhỏ không đúng. Còn định dạng thì mình chưa hiểu (hay là cứ đến mục nhỏ thì định dạng đường liên và chữ đậm nhỉ)
 
Upvote 0
Sao mấy cái tính tổng mục nhỏ không đúng. Còn định dạng thì mình chưa hiểu (hay là cứ đến mục nhỏ thì định dạng đường liên và chữ đậm nhỉ)
Định dạng file của mình gồm có các kiểu:
1. Ở cột ĐVT
- đối với đơn vị tính: cái, cây, bụi, đ/bụi, đ/cây, đồng/thuêbao, gốc, suất: định dạng cột khối lượng là kiểu số nguyên (không có dấu thập phân)
- các đơn vị còn lại là dấu thập phân 2 đơnvị, #.###,##
2. Cột STT:
- Đối với dòng trống, định dạng Viền liền theo cột, viền nét đứt theo hàng, các kiểu chữ thường, cỡ chữ13
- Đỡi dòng số >o, định dạng in đậm, viền liền. cỡ chữ 13.
Còn tổng mục nhỏ nó không đúng là do mình xóa dữ liệu nên vậy đó mà.
 
Upvote 0
Định dạng file của mình gồm có các kiểu:
1. Ở cột ĐVT
- đối với đơn vị tính: cái, cây, bụi, đ/bụi, đ/cây, đồng/thuêbao, gốc, suất: định dạng cột khối lượng là kiểu số nguyên (không có dấu thập phân)
- các đơn vị còn lại là dấu thập phân 2 đơnvị, #.###,##
2. Cột STT:
- Đối với dòng trống, định dạng Viền liền theo cột, viền nét đứt theo hàng, các kiểu chữ thường, cỡ chữ13
- Đỡi dòng số >o, định dạng in đậm, viền liền. cỡ chữ 13.
Còn tổng mục nhỏ nó không đúng là do mình xóa dữ liệu nên vậy đó mà.
Vậy bạn thử cái này xem sao
Mã:
Sub Dinhdang()
    Dim Er As Long, I As Long
    Application.ScreenUpdating = False
With Sheet3
    Er = .Range("B65535").End(3).Row
    .Range("G5", "G" & Er).NumberFormat = "#,##0"
    With .Range("A5", "A" & Er).Resize(, 8)     
        .Font.Bold = False
        .Borders.LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlHairline
    End With
    For I = 5 To Er
        If .Range("A" & I) <> Empty Then
            With .Range("A" & I).Resize(, 8)
                .Borders(xlEdgeTop).Weight = xlThin
                .Font.Bold = True
            End With
            .Range("G" & I).NumberFormat = "#,##0.00"
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn dùng cái này chắc nhanh hơn 1 chút
Mã:
Sub Dinhdang1()
    Dim Er As Long, Rng As Range
    Application.ScreenUpdating = False
    With Sheet3
        Er = .Range("B65535").End(3).Row
        .Range("G5", "G" & Er).NumberFormat = "#,##0"
        With .Range("A5", "A" & Er).Resize(, 8)
            .Font.Bold = False
            .Borders.LineStyle = xlContinuous
            .Borders(xlInsideHorizontal).Weight = xlHairline
        End With
        Set Rng = .Range("A5", "A" & Er).SpecialCells(xlCellTypeConstants, 23)
        For Each Cll In Rng
            With Cll.Resize(, 8)
                .Font.Bold = True
                .Borders(xlEdgeTop).Weight = xlThin
            End With
            Cll.Offset(, 6).NumberFormat = "#,##0.00"
        Next
    End With
    Application.ScreenUpdating = True
End Sub
Nhân đây em có vấn đề mong các Anh chị giải thích hộ
Ví dụ em chọn vùng Set Rng = .Range("A5", "A" & Er).SpecialCells(xlCellTypeConstants, 23) sau đó lấy sang 8 cột như thế này Set Rng = .Range("A5", "A" & Er).SpecialCells(xlCellTypeConstants, 23).Resize(, 8) lại không được
 
Upvote 0
Mình có ghi macro để định dạng dữ liệu, nhưng có điều kiện dữ liệu bằng tiếng việt nên VBA không hiểu. Nhờ GPE hoàn thiện giúp mình với
Sao bạn không dùng Conditional Formatting cho đơn giản.
Nhân đây em có vấn đề mong các Anh chị giải thích hộ
Ví dụ em chọn vùng Set Rng = .Range("A5", "A" & Er).SpecialCells(xlCellTypeConstants, 23) sau đó lấy sang 8 cột như thế này Set Rng = .Range("A5", "A" & Er).SpecialCells(xlCellTypeConstants, 23).Resize(, 8) lại không được
Hình như chỉ Resize được đối với Range có 1 Area. Trường hợp này tôi thường làm thế này:
PHP:
Set Rng = Intersect(.Range("A5:A" & Er).SpecialCells(xlCellTypeConstants, 23).EntireRow, .Range("A5:H" & Er))
 

File đính kèm

Upvote 0
Sao bạn không dùng Conditional Formatting cho đơn giản.

Hình như chỉ Resize được đối với Range có 1 Area. Trường hợp này tôi thường làm thế này:
PHP:
Set Rng = Intersect(.Range("A5:A" & Er).SpecialCells(xlCellTypeConstants, 23).EntireRow, .Range("A5:H" & Er))
Cám ơn Thầy nhiều. Phương thức này sẽ bỏ được vòng For tốc tộ Code nhanh hơn thầy ạ
 
Upvote 0
Vậy bạn thử cái này xem sao
Mã:
Sub Dinhdang()
    Dim Er As Long, I As Long
    Application.ScreenUpdating = False
With Sheet3
    Er = .Range("B65535").End(3).Row
    .Range("G5", "G" & Er).NumberFormat = "#,##0"
    With .Range("A5", "A" & Er).Resize(, 8)    
        .Font.Bold = False
        .Borders.LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).Weight = xlHairline
    End With
    For I = 5 To Er
        If .Range("A" & I) <> Empty Then
            With .Range("A" & I).Resize(, 8)
                .Borders(xlEdgeTop).Weight = xlThin
                .Font.Bold = True
            End With
            .Range("G" & I).NumberFormat = "#,##0.00"
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Cảm ơn cậu, nhưng hình như cậu chưa hiểu ý của mình. Như mình nói bài bài #3, mình muốn định dạng ở cột C (cột đơn vị tính), nếu đơn vị tính nó nằm trong các đơn vị này ( cái, cây, bụi, đ/bụi, đ/cây, đồng/thuêbao, gốc, suất) thì cột khối lượng định dạng tương ứng là số nguyên không có dấu thập phân)
Còn bài viết trên của cậu mới làm đúng ý 2 bài #3 àh. Nhờ cậu và GPE xem giúp
 
Upvote 0
Cách tôi nói tôi làm trong file đính kèm đó bạn.
 
Upvote 0
Cảm ơn cậu, nhưng hình như cậu chưa hiểu ý của mình. Như mình nói bài bài #3, mình muốn định dạng ở cột C (cột đơn vị tính), nếu đơn vị tính nó nằm trong các đơn vị này ( cái, cây, bụi, đ/bụi, đ/cây, đồng/thuêbao, gốc, suất) thì cột khối lượng định dạng tương ứng là số nguyên không có dấu thập phân)
Còn bài viết trên của cậu mới làm đúng ý 2 bài #3 àh. Nhờ cậu và GPE xem giúp
Vậy bạn đưa cái Array( "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t") như thế này vào AutoFilter được
 
Upvote 0
Mình thay lại Code của bạn thấy chạy được mà:
Mã:
Sub dinhdang()
'
' Macro8 Macro
'
Dim lr As Long
lr = Sheet3.Cells(Rows.Count, "b").End(xlUp).Row

'lr = Sheet3.Cells(Rows.Count, "B").End(xlUp).Row
    Sheet3.Range("D7:D" & lr).End(xlUp).AutoFilter Field:=3, Criteria1:=Array( _
        "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t"), Operator:=xlFilterValues
    Sheet3.Range("D7:D" & lr).End(xlUp).Select
  
    Selection.NumberFormat = "#,##0.00"
    Sheet3.Range("D7:D" & lr).End(xlUp).AutoFilter Field:=3, Criteria1:=Array( _
         "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t"), Operator:=xlFilterValues
    Sheet3.Range("D7:D" & lr).End(xlUp).Select
    Selection.NumberFormat = "#,##0"
End Sub
 
Upvote 0
Mình thay lại Code của bạn thấy chạy được mà:
Mã:
Sub dinhdang()
'
' Macro8 Macro
'
Dim lr As Long
lr = Sheet3.Cells(Rows.Count, "b").End(xlUp).Row

'lr = Sheet3.Cells(Rows.Count, "B").End(xlUp).Row
    Sheet3.Range("D7:D" & lr).End(xlUp).AutoFilter Field:=3, Criteria1:=Array( _
        "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t"), Operator:=xlFilterValues
    Sheet3.Range("D7:D" & lr).End(xlUp).Select
 
    Selection.NumberFormat = "#,##0.00"
    Sheet3.Range("D7:D" & lr).End(xlUp).AutoFilter Field:=3, Criteria1:=Array( _
         "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t"), Operator:=xlFilterValues
    Sheet3.Range("D7:D" & lr).End(xlUp).Select
    Selection.NumberFormat = "#,##0"
End Sub
Chịu bạn ơi. nó chạy nhưng lại không đúng
 
Upvote 0
Mình thay lại Code của bạn thấy chạy được mà:
Mã:
Sub dinhdang()
'
' Macro8 Macro
'
Dim lr As Long
lr = Sheet3.Cells(Rows.Count, "b").End(xlUp).Row

'lr = Sheet3.Cells(Rows.Count, "B").End(xlUp).Row
    Sheet3.Range("D7:D" & lr).End(xlUp).AutoFilter Field:=3, Criteria1:=Array( _
        "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t"), Operator:=xlFilterValues
    Sheet3.Range("D7:D" & lr).End(xlUp).Select
 
    Selection.NumberFormat = "#,##0.00"
    Sheet3.Range("D7:D" & lr).End(xlUp).AutoFilter Field:=3, Criteria1:=Array( _
         "cái", "cây", "b?i", "ð/b?i", "ð/cây", "ð?ng/thuêbao", "g?c, su?t"), Operator:=xlFilterValues
    Sheet3.Range("D7:D" & lr).End(xlUp).Select
    Selection.NumberFormat = "#,##0"
End Sub
Pacific, GPE xem giúp mình tý, code nó vẫn chạy, nhựng định dạng lại không đúng àh
 
Upvote 0
Em chựu thôi. Cái này em không làm được rồi
tại sao lại chịu, bỏ ăn bỏ ngủ cũng nên viết tiếp
các dấu tiếng Việt code VBA không hổ trợ, bạn dùng hàm Chrw(mã) để thế vào chổ các dấu ?
file mình lấy trên diễn đàn
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
tại sao lại chịu, bỏ ăn bỏ ngủ cũng nên viết tiếp
các dấu tiếng Việt code VBA không hổ trợ, bạn dùng hàm Chrw(mã) để thế vào chổ các dấu ?
file mình lấy trên diễn đàn
Em không nghĩ được cách nào anh ạ. Anh ra tay làm giúp anh ấy đi. (mà anh ấy định dạng cột số lượng mà mấy bài trước em lại đị định dạng cột thành tiền :oops: hì hì...)
 
Upvote 0

File đính kèm

Upvote 0
Thôi em làm kiểu này vậy. Hình như khâu định dạng là khâu cuối cùng . Nếu nó chạy chậm quá thì anh ra hút 1 điếu thuốc vào là nó làm xong. (Coi như là tự cho mình nghỉ thư giãn tý... :D) Cần thêm định dạng loại gì thì anh thêm đơn vị vào cột A của Sheet1 nha
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom