Nhiều điều kiện trong excel (1 người xem)

Liên hệ QC

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

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,701
Được thích
2,434
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Chào mọi người trên diễn đàn Giaiphapexcel.com

Trong quá trình làm việc em có vấn đề như sau:

Em có file này:

Trong file này có 2 sheet:

Sheet1: Data( trong file này cột movement date là kiểu text em muốn chuyển qua ngày tháng)

sheet 2: dk

câu hỏi nằm ở sheet2:
Trong sheet 2 em muốn lấy cột code gold kết hợp cột Su để lấy ra ngày nhận hàng, số lượng bao nhiêu

Ví dụ nếu trong sheet này có code gold có 3 ngày nhận hàng thì lấy tất cả ngày nhân hàng và số lượng tương ứng.05/10, 06/10, 07/10.

ví dụ Số lượng nhận hàng: 30-30-30 đó.

Vì máy em đang dùng máy công ty định dạng control panel là mm/dd/yyyy nên nhờ mọi người giúp em vấn đề này:

Em cảm ơn mọi người nhiều!

P/s: chủ đề này trước đây em có đưa lên rồi mà trong quá trình làm việc em có vấn đề nên em đưa lại chủ đề này mong BQT thông cảm giúp em, vì gửi bài hai lần.
 

File đính kèm

Lần chỉnh sửa cuối:
Chào mọi người trên diễn đàn Giaiphapexcel.com

Trong quá trình làm việc em có vấn đề như sau:

Em có file này:

Trong file này có 2 sheet:

Sheet1: Data( trong file này cột movement date là kiểu text em muốn chuyển qua ngày tháng)

sheet 2: dk

câu hỏi nằm ở sheet2:
Trong sheet 2 em muốn lấy cột code gold kết hợp cột Su để lấy ra ngày nhận hàng, số lượng bao nhiêu

Ví dụ nếu trong sheet này có code gold có 3 ngày nhận hàng thì lấy tất cả ngày nhân hàng và số lượng tương ứng.05/10, 06/10, 07/10.

ví dụ Số lượng nhận hàng: 30-30-30 đó.

Vì máy em đang dùng máy công ty định dạng control panel là mm/dd/yyyy nên nhờ mọi người giúp em vấn đề này:

Em cảm ơn mọi người nhiều!

P/s: chủ đề này trước đây em có đưa lên rồi mà trong quá trình làm việc em có vấn đề nên em đưa lại chủ đề này mong BQT thông cảm giúp em, vì gửi bài hai lần.

0. Viết loằng nhoằng cái gì hổng có hiểu.

1. Thao tác chuẩn xác như sau:
- Tại sheet data, chọn cell [N1], nhấn ctrl + C
- Click chọn cả cột I, click phải chuột vào vùng chọn, Paste special...
- Cửa sổ Paste Special hiện ra:
+ Mục Paste: Values
+ Mục Operation: Add
+ Click OK
- Format cột I là date.
Kết thúc 1.

2. Sheet dk, Format cột B là date.
Mã:
B2=VLOOKUP(A2,data!$B$2:$K$1521,8,0)
C2=VLOOKUP(A2,data!$B$2:$K$1521,4,0)
 
Lần chỉnh sửa cuối:
Upvote 0
0. Viết loằng nhoằng cái gì hổng có hiểu.

1. Thao tác chuẩn xác như sau:
- Tại sheet data, chọn cell [N1], nhấn ctrl + C
- Click chọn cả cột I, click phải chuột vào vùng chọn, Paste special...
- Cửa sổ Paste Special hiện ra:
+ Mục Paste: Values
+ Mục Operation: Add
+ Click OK
- Format cột I là short date (dd/mm/yyyy)
Kết thúc 1.

2. Sheet dk, Format cột B là date.
Mã:
B2=VLOOKUP(A2,data!$B$2:$K$1521,8,0)
C2=VLOOKUP(A2,data!$B$2:$K$1521,4,0)


Anh ơi. em nêu rõ vấn đề cho Anh hiểu.

Sheet DATA: cột movement date là kiểu text em muốn chuyển qua số(ngày tháng)
Sheet dk:
Em muốn lấy đk cột Code gold kết hợp với cột Su để lấy ra ngày nhận hàng và số lượng nhận hàng tương ứng
Vì máy em đang dùng ở công ty định dang control panel là mm/dd/yyyy em muốn định dạng như máy công ty bên em.
Nhờ Anh hỗ trợ giúp em
 
Upvote 0
Anh ơi. em nêu rõ vấn đề cho Anh hiểu.

Sheet DATA: cột movement date là kiểu text em muốn chuyển qua số(ngày tháng)
Sheet dk:
Em muốn lấy đk cột Code gold kết hợp với cột Su để lấy ra ngày nhận hàng và số lượng nhận hàng tương ứng
Vì máy em đang dùng ở công ty định dang control panel là mm/dd/yyyy em muốn định dạng như máy công ty bên em.
Nhờ Anh hỗ trợ giúp em
Bạn cho ví dụ đi.

Cụ thể, sheet dk dòng đầu tiên có "code gold" là: 82517, thì cột B bạn muốn ra cái gì?

Cho thêm ví dụ 1 ít nữa càng tốt.

Chúc bạn ngày vui.
 
Upvote 0
Bạn cho ví dụ đi.

Cụ thể, sheet dk dòng đầu tiên có "code gold" là: 82517, thì cột B bạn muốn ra cái gì?

Cho thêm ví dụ 1 ít nữa càng tốt.

Chúc bạn ngày vui.

Dạ như thế này anh ơi.

Ví dụ code gold là 82517 thì cột B là ngày nhận hàng là ngày nào?
Cột C là số lượng nhận hàng là bao nhiêu?

Em ví dụ cho Anh dễ hiểu nhé

Ví dụ code gold là 1345 có hai ngày nhận hàng 03/10, 05/10 và số lượng là 10,10

Cột B: 03/10-05/10

Cột C: 10-10

Code gold phải kết hợp cột Su đó anh để lấy ngày nhận hàng và số lượng nhận hàng tương ứng
 
Upvote 0
Dạ như thế này anh ơi.

Ví dụ code gold là 82517 thì cột B là ngày nhận hàng là ngày nào?
Cột C là số lượng nhận hàng là bao nhiêu?

Em ví dụ cho Anh dễ hiểu nhé

Ví dụ code gold là 1345 có hai ngày nhận hàng 03/10, 05/10 và số lượng là 10,10

Cột B: 03/10-05/10

Cột C: 10-10

Code gold phải kết hợp cột Su đó anh để lấy ngày nhận hàng và số lượng nhận hàng tương ứng
Bài này phải sử dụng VBA rồi bạn à! vì kết chuỗi theo trích lục có điều kiện.

Tuy nhiên, để anh em khác có thể hiểu rõ hơn, bạn giải thích thêm cho trường hợp mã: 207322 bên sheet data, có tất cả là 8 dòng phát sinh trong 4 ngày: 02/10, 04/10, 05/10 và 06/10 cho cặp số "SU": 0 và 1. Già sử dòng đầu tiên của sheet "dk" nếu là mã 207322 này, nhưng không có số "SU" nào cả, vậy bạn muốn lấy số "SU" là 0 hay 1, hoặc muốn lấy cái gì qua cột B và C sheet "dk"?
 
Upvote 0
Dạ như thế này anh ơi.

Ví dụ code gold là 82517 thì cột B là ngày nhận hàng là ngày nào?
Cột C là số lượng nhận hàng là bao nhiêu?

Em ví dụ cho Anh dễ hiểu nhé

Ví dụ code gold là 1345 có hai ngày nhận hàng 03/10, 05/10 và số lượng là 10,10

Cột B: 03/10-05/10

Cột C: 10-10

Code gold phải kết hợp cột Su đó anh để lấy ngày nhận hàng và số lượng nhận hàng tương ứng

mấy cái vụ nối nối này hàm excel không có làm được đâu
tìm hàm jiontext của tác giả NDU.... trên diễn đàn (hàm tự tao, vba)
 
Upvote 0
Bài này phải sử dụng VBA rồi bạn à! vì kết chuỗi theo trích lục có điều kiện.

Tuy nhiên, để anh em khác có thể hiểu rõ hơn, bạn giải thích thêm cho trường hợp mã: 207322 bên sheet data, có tất cả là 8 dòng phát sinh trong 4 ngày: 02/10, 04/10, 05/10 và 06/10 cho cặp số "SU": 0 và 1. Già sử dòng đầu tiên của sheet "dk" nếu là mã 207322 này, nhưng không có số "SU" nào cả, vậy bạn muốn lấy số "SU" là 0 hay 1, hoặc muốn lấy cái gì qua cột B và C sheet "dk"?

Ý em muốn lấy điều kiện Cột Code gold kết hợp cột Su để lấy ngày nhận hàng và số lượng tương ứng
Trong ví dụ này ở sheet DATA có mã 207322 có 8 ngày nhận hàng, nhưng Su khác nhau nên em muốn kết hợp để tách riêng ra

Ví Dụ 207322 SU là 0 thì ngày nhận hàng là: 02/10-04/10-05/10-06/10 số lượng là:10-10-5-20 đó anh.
còn 207322 SU là 1 cũng vậy

Xin lỗi cho em gửi lại file anh sẽ thấy dễ hiểu hơn.
 

File đính kèm

Upvote 0
Ý em muốn lấy điều kiện Cột Code gold kết hợp cột Su để lấy ngày nhận hàng và số lượng tương ứng
Trong ví dụ này ở sheet DATA có mã 207322 có 8 ngày nhận hàng, nhưng Su khác nhau nên em muốn kết hợp để tách riêng ra

Ví Dụ 207322 SU là 0 thì ngày nhận hàng là: 02/10-04/10-05/10-06/10 số lượng là:10-10-5-20 đó anh.
còn 207322 SU là 1 cũng vậy

Xin lỗi cho em gửi lại file anh sẽ thấy dễ hiểu hơn.
File mới này đã đầy đủ yêu cầu, cùng với ví dụ về mã 207322 rõ ràng khúc chiết, để anh em khác có thể thực hiện Code cho bạn rồi.

Hy vọng bạn sẽ sớm được anh em hỗ trợ.

Ngoài cách dùng VBA, bạn có nghĩ: mình có thể dùng Pivot table để thực hiện việc này!

Vậy nha.

Chúc bạn ngày vui.
 
Upvote 0
File mới này đã đầy đủ yêu cầu, cùng với ví dụ về mã 207322 rõ ràng khúc chiết, để anh em khác có thể thực hiện Code cho bạn rồi.

Hy vọng bạn sẽ sớm được anh em hỗ trợ.

Ngoài cách dùng VBA, bạn có nghĩ: mình có thể dùng Pivot table để thực hiện việc này!

Vậy nha.

Chúc bạn ngày vui.

Pivot table cũng đk anh nhưng mà file em xuất trên phần mềm về. Cột moventdate là kiểu text em muốn nhờ Anh chuyển qua ngày tháng đó anh.

Em cảm ơn Anh
 
Upvote 0
Chào mọi người trên diễn đàn Giaiphapexcel.com
Trong quá trình làm việc em có vấn đề như sau:
Em có file này:
Trong file này có 2 sheet:
Sheet1: Data( trong file này cột movement date là kiểu text em muốn chuyển qua ngày tháng)
sheet 2: dk

câu hỏi nằm ở sheet2:
Trong sheet 2 em muốn lấy cột code gold kết hợp cột Su để lấy ra ngày nhận hàng, số lượng bao nhiêu

Ví dụ nếu trong sheet này có code gold có 3 ngày nhận hàng thì lấy tất cả ngày nhân hàng và số lượng tương ứng.05/10, 06/10, 07/10.

ví dụ Số lượng nhận hàng: 30-30-30 đó.

Vì máy em đang dùng máy công ty định dạng control panel là mm/dd/yyyy nên nhờ mọi người giúp em vấn đề này:

Em cảm ơn mọi người nhiều!

P/s: chủ đề này trước đây em có đưa lên rồi mà trong quá trình làm việc em có vấn đề nên em đưa lại chủ đề này mong BQT thông cảm giúp em, vì gửi bài hai lần.
bấm ngôi sao chạy code, chỉ chạy 1 lần duy nhất nếu chạy lần thứ 2 thí cột ngày tháng sẽ sai
 

File đính kèm

Upvote 0
bấm ngôi sao chạy code, chỉ chạy 1 lần duy nhất nếu chạy lần thứ 2 thí cột ngày tháng sẽ sai


Anh ơi em thấy có nhiều cái code gold có 01 lần nhận hàng thôi nhưng code Anh lại cho kết quả 2

Anh kiểm tra giúp em với
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi em thấy có nhiều cái code gold có 01 lần nhận hàng thôi nhưng code Anh lại cho kết quả 2
Anh kiểm tra giúp em với
có nhầm trong code, bạn sửa lại
Mã:
    Else
[COLOR=#ff0000]      ik = .Item(Tmp)[/COLOR]
[COLOR=#ff0000]      Arr(ik, 2) = Arr(ik, 2) & "-" & D[/COLOR]
[COLOR=#ff0000]      Arr(ik, 3) = Arr(ik, 3) & "-" & Darr(i, 4)[/COLOR]
    End If
  Next i
End With

đoạn code sau là chỉnh ngày tháng theo dạng ngày tháng trong hệ thống, nếu chạy lần 2 trở đi thì bỏ theo cách
Mã:
'With Sheets("Data")
  '.Range("I2").Resize(UBound(Darr)) = Tarr
  '.Range("I2").Resize(UBound(Darr)).NumberFormat = "dd/mm/yyyy"
'End With
 
Upvote 0
có nhầm trong code, bạn sửa lại
Mã:
    Else
[COLOR=#ff0000]      ik = .Item(Tmp)[/COLOR]
[COLOR=#ff0000]      Arr(ik, 2) = Arr(ik, 2) & "-" & D[/COLOR]
[COLOR=#ff0000]      Arr(ik, 3) = Arr(ik, 3) & "-" & Darr(i, 4)[/COLOR]
    End If
  Next i
End With

đoạn code sau là chỉnh ngày tháng theo dạng ngày tháng trong hệ thống, nếu chạy lần 2 trở đi thì bỏ theo cách
Mã:
'With Sheets("Data")
  '.Range("I2").Resize(UBound(Darr)) = Tarr
  '.Range("I2").Resize(UBound(Darr)).NumberFormat = "dd/mm/yyyy"
'End With

Dạ. Có gì em test có gì bị lỗi em báo lại cho anh.
Cảm ơn anh rất nhiều!
 
Upvote 0
đoạn code sau là chỉnh ngày tháng theo dạng ngày tháng trong hệ thống, nếu chạy lần 2 trở đi thì bỏ theo cách
Code:
'With Sheets("Data")
'.Range("I2").Resize(UBound(Darr)) = Tarr
'.Range("I2").Resize(UBound(Darr)).NumberFormat = "dd/mm/yyyy"
'End With
Anh ơi cho em hỏi câu. Nếu chạy lần 2 thì bỏ theo cách
 
Upvote 0
đoạn code sau là chỉnh ngày tháng theo dạng ngày tháng trong hệ thống, nếu chạy lần 2 trở đi thì bỏ theo cách
Code:
'With Sheets("Data")
'.Range("I2").Resize(UBound(Darr)) = Tarr
'.Range("I2").Resize(UBound(Darr)).NumberFormat = "dd/mm/yyyy"
'End With
Anh ơi cho em hỏi câu. Nếu chạy lần 2 thì bỏ theo cách
nhập dấu nháy trước câu lệnh hoặc xóa luôn
 
Upvote 0
nhập dấu nháy trước câu lệnh hoặc xóa luôn

Code ra đúng rồi Anh ơi. nhưng nếu nhấn code một lần nữa thì ngày tháng sẽ biến mất luôn.

Nhờ Anh có cách nào ngày tháng vẫn giữ nguyên được không Anh? Tại vì em phải xuất file từ phần mềm đó Anh.
Nếu một code có một ngày nhận hàng 2....3 lần thì có thể cộng lại với nhau.

Ví dụ Code gold 33763 có 2 lần nhận hàng trong một ngày nên em muốn nó cộng lại với nhau.

Nhờ Anh hỗ trợ giúp em với

Cảm ơn Anh rất nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Code ra đúng rồi Anh ơi. nhưng nếu nhấn code một lần nữa thì ngày tháng sẽ biến mất luôn.
Nhờ Anh có cách nào ngày tháng vẫn giữ nguyên được không Anh? Tại vì em phải xuất file từ phần mềm đó Anh.
Nếu một code có một ngày nhận hàng 2....3 lần thì có thể cộng lại với nhau.
Ví dụ Code gold 33763 có 2 lần nhận hàng trong một ngày nên em muốn nó cộng lại với nhau.
Nhờ Anh hỗ trợ giúp em với
Cảm ơn Anh rất nhiều!
xuất tạm ngày tháng ra cột , nếu không cần thì xóa đoạn code đó
Mã:
Sub GPE()
Dim Darr As Variant, Tarr As Variant, Arr As Variant, S As Variant, Dic1 As Object, Dic2 As Object
Dim i As Long, k As Long, ik As Long, n As Long, Tmp1 As String, Tmp2 As String, D As Variant
Set Dic1 = CreateObject("scripting.dictionary")
Set Dic2 = CreateObject("scripting.dictionary")
With Sheets("Data")
  Darr = .Range("B2:I" & .Range("B" & Rows.Count).End(xlUp).Row).Value
End With
ReDim Arr(1 To UBound(Darr), 1 To 4)
ReDim Tarr(1 To UBound(Darr), 1 To 1)
For i = 1 To UBound(Darr)
  D = Darr(i, 8)
  If Day(D) < 13 Then
    Tarr(i, 1) = DateSerial(Year(D), Day(D), Month(D))
  Else
    Tarr(i, 1) = DateSerial(CLng(Right(D, 4)), CLng(Mid(D, 4, 2)), CLng(Left(D, 2)))
  End If
  D = Day(Tarr(i, 1)) & "/" & Month(Tarr(i, 1))
  Tmp1 = Darr(i, 1) & "#" & Darr(i, 3)
  Tmp2 = Tmp1 & "#" & D
  If Not Dic1.exists(Tmp1) Then
    k = k + 1
    Dic1.Add Tmp1, k
    Dic2.Add Tmp2, 0
    Arr(k, 1) = Darr(i, 1)
    Arr(k, 2) = D
    Arr(k, 3) = Darr(i, 4)
    Arr(k, 4) = Darr(i, 3)
  Else
    ik = Dic1.Item(Tmp1)
    If Not Dic2.exists(Tmp2) Then
      Dic2.Item(Tmp2) = Dic2.Item(Tmp2) + 1
      Arr(ik, 2) = Arr(ik, 2) & "-" & D
      Arr(ik, 3) = Arr(ik, 3) & "-" & Darr(i, 4)
    Else
      If IsNumeric(Arr(ik, 3)) Then
        Arr(ik, 3) = Arr(ik, 3) + Darr(i, 4)
      Else
        S = Split(Arr(ik, 3), "-")
        n = Dic2.Item(Tmp2)
        S(n) = CLng(S(n)) + Darr(i, 4)
        Arr(ik, 3) = Join(S, "-")
      End If
    End If
  End If
Next i
With Sheets("Data")
  .Range("M2").Resize(UBound(Darr)) = Tarr
  .Range("M2").Resize(UBound(Darr)).NumberFormat = "dd/mm/yyyy"
End With
With Sheets("dk")
  i = .Range("A65500").End(xlUp).Row
  If i > 1 Then .Range("A2:D" & i).ClearContents
  .Range("B2").Resize(k, 2).NumberFormat = "@"
  .Range("A2").Resize(k, 4) = Arr
  .Range("A2:D" & k).Sort .[A2], 1, .[D2], , 1, Header:=xlNo
End With
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom