-
RE: So sánh dữ liệu khi tạo sheet mới
jason > 31-12-16, 11:10 AM
hịc. file này nói đúng hơn là phần mềm .
file này do người khác làm, bạn hỏi cách thức update mình cũng không nắm rõ lắm, mình chỉ biết được logic là sử dụng 1 file AddIn làm file trung gian kết nối tới server , người sử dụng cần sử dụng thì có 1 file template (2 file này được viết code sẵn rồi) người sử dụng chỉ làm thông tin của mã hàng và tính định mức (sheet(n)).
sau đó khi nhấp vào sheet1 thì sẽ tự động update thông tin sheet(n) qua sheet1. và mình biết sheet1 có sử dụng nhiều sự kiện
workbook_beforeSave,sheetChange,...
nói như thế chắc cũng khó cho bạn. access có thể nghiên cứu được có excel mù tịc
mình có làm thử như vầy:
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
'If Target.Column = 9 Then
'If Application.CountIf(Columns(9), Target) > 1 Then
'//If duplicate found notify user
'MsgBox "Duplicate StyleNo, Please check again !", vbCritical
'End If
'End If
getwschange sh, Target
End Sub
kết quả chỉ thông báo được khi sheet1 có 2 mã giống nhau(tức là được update rồi) -
RE: So sánh dữ liệu khi tạo sheet mới
ongke0711 > 31-12-16, 12:18 PM
Tôi nghĩ cái logic xử lý là: Khi click vào sheet 1, nó sẽ gọi hàm kiểm tra với sheet 2 xem có trùng không, nếu có thì không chạy lệnh update (đã có code sẳn trên file của bạn). Và cứ dùng vòng lặp để Loop qua tất cả các sheet 3,4 ..n trong workbook (trừ sheet1).
- Tạo 1 Sub FindDublicate, gọi Sub này khi click vào Sheet1.
- Bạn tự nghiên cứu tiếp vụ Loop qua các sheet nhé.
Mã PHP:Private Sub Worksheet_Activate()
Call FindDublicate
End Sub
Sub FindDublicate()
Dim rng1, rng2, cell1, cell2 As Range
Set rng1 = Worksheets("Sheet1").Range("I2:I100")
Set rng2 = Worksheets("Sheet2").Range("I2:I100")
For Each cell1 In rng1
For Each cell2 In rng2
If IsEmpty(cell2) Then Exit For
If cell1.Value = cell2.Value Then
cell1.Font.Bold = True
cell1.Interior.ColorIndex = 3
cell1.Interior.Pattern = xlSolid
cell2.Font.Bold = True
cell2.Interior.ColorIndex = 3
cell2.Interior.Pattern = xlSolid
MsgBox "Duplicate StyleNo " & cell1 & " , Please check again !", vbCritical
End If
Next cell2
Next cell1
End Sub -
RE: So sánh dữ liệu khi tạo sheet mới
jason > 31-12-16, 03:18 PM
cảm ơn Ongke nhiệt tình giúp đỡ. sẽ báo kết quả cho Ongke biết
chúc Ongke năm mới nhiều sức khỏe và nhiều niềm vui !
Thân -
RE: So sánh dữ liệu khi tạo sheet mới
jason > 05-01-17, 03:24 PM
1.code của bạn mình đã xem và áp dụng thử thì chỉ được 2 sheet và chưa tìm được cách so sánh nhiều sheet ngẫu nhiên có dữ liệu trùng. ví dụ mình có 20sheet thì việc so sánh như thế nào .
2.với mình muốn tô màu nguyên dòng khi tìm được dữ liều trùng thì có thể được không (cái này tìm đến chóng mặt mắc ói luôn mà cũng không thấy)?
thanks ! -
RE: So sánh dữ liệu khi tạo sheet mới
hieuvn > 05-01-17, 04:13 PM
(05-01-17, 03:24 PM)jason Đã viết: 1.code của bạn mình đã xem và áp dụng thử thì chỉ được 2 sheet và chưa tìm được cách so sánh nhiều sheet ngẫu nhiên có dữ liệu trùng. ví dụ mình có 20sheet thì việc so sánh như thế nào .
haha đã theo cách này thì theo ngu ý của mình cứ đổ data của tất cả các sheet vào sheet 1 rồi filter 1 lần trước khi update lên server. Mình tò mò xíu server dùng SQL server hay là loại khác?
2.với mình muốn tô màu nguyên dòng khi tìm được dữ liều trùng thì có thể được không (cái này tìm đến chóng mặt mắc ói luôn mà cũng không thấy)?
thanks ! -
RE: So sánh dữ liệu khi tạo sheet mới
jason > 05-01-17, 04:59 PM
(05-01-17, 04:13 PM)hieuvn Đã viết: haha đã theo cách này thì theo ngu ý của mình cứ đổ data của tất cả các sheet vào sheet 1 rồi filter 1 lần trước khi update lên server. Mình tò mò xíu server dùng SQL server hay là loại khác?
server dùng SQL nha hieuvn
vâng đổ tất cả các sheet thì code sẵn đã làm rồi, vấn đề là những sheet khác (vd sheet2 và sheet3 giống có styleNo thì sẽ báo lỗi không cho đô vào sheet1). vấn đề này khó quá đối với mình.
nên mình đã chọn phương án khác là kiểm tra tren sheet1 thôi nếu có trùng thì báo lỗi, mình đã làm được cái này nhưng muốn khi tìm được thì nguyên dòng có dữ liệu trùng được tô màu . không bt có được không ?
mình share code dưới anh cần thì sài nhé
code này mình tìm trên mạng và tùy biến thêm tác giả quên mất luôn rồi. kết quả ok rồi nhưng chỉ nhuộm được ô có trùng thôi không nhuộm được nguyên dòngMã PHP:Private Sub Worksheet_Activate()
Call FindDuplicate
End Sub
Sub FindDuplicate()
Dim ws As Worksheet
Dim cell As Range
Dim myrng As Range
Dim clr As Long
Dim lastcell As Range
Dim i As Long
Dim lastrow As Long
Set ws = ThisWorkbook.ActiveSheet
Set myrng = ws.Range("i2:i" & Range("i" & ws.Rows.Count).End(xlUp).Row)
With myrng
Set lastcell = .Cells(.Cells.Count)
End With
myrng.Interior.ColorIndex = xlNone
clr = 3
For Each cell In myrng
If Application.WorksheetFunction.CountIf(myrng, cell) > 1 Then
If myrng.Find(what:=cell, lookat:=xlWhole, MatchCase:=False, after:=lastcell).Address = cell.Address Then
cell.Interior.ColorIndex = clr
clr = clr + 1
i = i + 1
Else
cell.Interior.ColorIndex = myrng.Find(what:=cell, lookat:=xlWhole, MatchCase:=False, after:=lastcell).Interior.ColorIndex
End If
End If
Next
If i > 0 Then
MsgBox "Found " & i & " STYLE NO had duplicate. Please check again !", vbCritical
Else
Exit Sub
End If
End Sub
bạn biết giúp mình nhé
thanks -
RE: So sánh dữ liệu khi tạo sheet mới
ongke0711 > 05-01-17, 05:17 PM
Ý bạn hieuvn là ko quan tâm các sheet có trùng hay không, cứ đổ về sheet 1 hết rồi mới xử lý riêng sheet 1, tìm row trùng rồi xoá nó. Làm vậy ko đc à? -
RE: So sánh dữ liệu khi tạo sheet mới
jason > 05-01-17, 05:51 PM
hi Ongke ,
không xóa được nha bạn. tại vì khi nhấp vào sheet1 thì sẽ tự động đổ các sheet qua sheet1, nếu xóa thì xóa sheet khác mới không đổ về sheet1.
hiện tại mình bỏ qua cái đó luôn rồi (nếu bạn nào có cách mình vẫn muốn được học hỏi thêm), mình đang xử lý trên sheet1 như code ở trên, còn vướng cái tô màu nguyên dòng thôi.
bạn biết giúp mình nhé
thanks -
RE: So sánh dữ liệu khi tạo sheet mới
ongke0711 > 06-01-17, 12:09 AM
Muốn tô màu nguyên dòng thì bạn đổi dòng code:
cell.Interior.ColorIndex = clr ==> cell.EntireRow.Interior.ColorIndex = clr