Hỗ trợ tìm vị trí, gộp vị trí

Liên hệ QC

Tình nghĩa giang hồ

Thanh sơn bất cải, lục thủy trường lưu
Tham gia
29/9/20
Bài viết
330
Được thích
429
Chào anh chị em có vấn đề này nhờ anh chị GPE hỗ trợ giúp em.
Dữ liệu em gồm 2 cột J, và cột O
(cột A là em đánh vị trí để cho biết, thực tế không có cột này)

Cột K là công thức có sẵn. Cột M, và cột N là kết quả mong muốn của em.
Quy tắc như sau:
Từ giá trị của O2 ta sẽ so sánh với cột J
Nếu O2 là số dương thì tìm số dương lớn hơn nó có sẵn ở cột công thức K, thì giá trị cuối cùng của cột K làm chuẩn.
Cột M sẽ tìm giá trị nào dương, nếu giá trị O2 là số dương, giá trị dương (chỉ tìm tới giá trị cuối cùng của cột K - 1), sau đó ghi vào cột M.
Cột N: là gộp của cột M và giá trị cuối cùng của cột K
Kết quả mong muốn của em là cột M và cột N.
Trường hợp số âm thì làm ngược lại, tìm số âm dựa vào cột O. Em có sẵn 6 ví dụ

Em đăng bài này ở mục lập trình VBA, nhưng nếu công thức có thể đáp ứng thì cũng được nhé anh chị. Không nhất thiết phải là VBA.
Em cảm ơn anh chị nhiều

Em có 1 lưu ý nhỏ là: giá trị số âm là dấu trừ bên phải, theo quy tắc kế toán, và quy tắc của phần mềm cũ
Bài này có 6 ví dụ, 6 sheet, nhưng thực tế là có 1 sheet duy nhất thui nhé anh chị.
Mục đích của bài này là em lấy dữ liệu của phần mềm cho vào excel, rồi phân tích, sao đó đẩy ngược lại phần mềm theo vòng lặp.
 

File đính kèm

  • tìm vị trí.xlsb
    111.6 KB · Đọc: 15
  • 1.JPG
    1.JPG
    84 KB · Đọc: 33
  • 2.JPG
    2.JPG
    90.1 KB · Đọc: 33
Lần chỉnh sửa cuối:
Chào anh chị em có vấn đề này nhờ anh chị GPE hỗ trợ giúp em.
Dữ liệu em gồm 2 cột J, và cột O
(cột A là em đánh vị trí để cho biết, thực tế không có cột này)

Cột K là công thức có sẵn. Cột M, và cột N là kết quả mong muốn của em.
Quy tắc như sau:
Từ giá trị của O2 ta sẽ so sánh với cột J
Nếu O2 là số dương thì tìm số dương lớn hơn nó có sẵn ở cột công thức K, thì giá trị cuối cùng của cột K làm chuẩn.
Cột M sẽ tìm giá trị nào dương, nếu giá trị O2 là số dương, giá trị dương (chỉ tìm tới giá trị cuối cùng của cột K - 1), sau đó ghi vào cột M.
Cột N: là gộp của cột M và giá trị cuối cùng của cột K
Kết quả mong muốn của em là cột M và cột N.
Trường hợp số âm thì làm ngược lại, tìm số âm dựa vào cột O. Em có sẵn 6 ví dụ

Em đăng bài này ở mục lập trình VBA, nhưng nếu công thức có thể đáp ứng thì cũng được nhé anh chị. Không nhất thiết phải là VBA.
Em cảm ơn anh chị nhiều

Em có 1 lưu ý nhỏ là: giá trị số âm là dấu trừ bên phải, theo quy tắc kế toán, và quy tắc của phần mềm cũ
Bài này có 6 ví dụ, 6 sheet, nhưng thực tế là có 1 sheet duy nhất thui nhé anh chị.
Mục đích của bài này là em lấy dữ liệu của phần mềm cho vào excel, rồi phân tích, sao đó đẩy ngược lại phần mềm theo vòng lặp.
Chạy sub ABC . . .
Mã:
Sub ABC()
  Dim arr(), Res(), cond, tmp, bNega As Boolean, sRow&, i&, k&
 
  i = Range("J1000000").End(xlUp).Row
  If i < 2 Then MsgBox ("Khong co du lieu!"): Exit Sub
  arr = Range("J2:J" & i).Value
  cond = Range("O2").Value
  If InStr(1, cond, "-") Then
    cond = Val(Replace(Mid(cond, 1, Len(cond) - 1), ",", ""))
    bNega = True
  End If
  sRow = UBound(arr)
  ReDim Res(1 To sRow, 1 To 2)
  For i = sRow To 1 Step -1
    tmp = arr(i, 1)
    If (InStr(1, tmp, "-") > 0) = bNega Then
      If bNega Then tmp = Val(Replace(Mid(tmp, 1, Len(tmp) - 1), ",", ""))
      k = k + 1
      If tmp > cond Then
        Res(k, 2) = i - 1
        Exit For
      Else
        Res(k, 2) = i - 1
        Res(i, 1) = i - 1
      End If
    End If
  Next i
  Range("M2").Resize(sRow, 2) = Res
End Sub
 
Upvote 0
Chạy sub ABC . . .
Mã:
Sub ABC()
  Dim arr(), Res(), cond, tmp, bNega As Boolean, sRow&, i&, k&
 
  i = Range("J1000000").End(xlUp).Row
  If i < 2 Then MsgBox ("Khong co du lieu!"): Exit Sub
  arr = Range("J2:J" & i).Value
  cond = Range("O2").Value
  If InStr(1, cond, "-") Then
    cond = Val(Replace(Mid(cond, 1, Len(cond) - 1), ",", ""))
    bNega = True
  End If
  sRow = UBound(arr)
  ReDim Res(1 To sRow, 1 To 2)
  For i = sRow To 1 Step -1
    tmp = arr(i, 1)
    If (InStr(1, tmp, "-") > 0) = bNega Then
      If bNega Then tmp = Val(Replace(Mid(tmp, 1, Len(tmp) - 1), ",", ""))
      k = k + 1
      If tmp > cond Then
        Res(k, 2) = i - 1
        Exit For
      Else
        Res(k, 2) = i - 1
        Res(i, 1) = i - 1
      End If
    End If
  Next i
  Range("M2").Resize(sRow, 2) = Res
End Sub
Quá tuyệt vời.
Em cảm ơn anh Hieu CD nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom