Cộng thêm 1 đơn vị

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

NH_DK

Let's patience
Tham gia
29/7/10
Bài viết
865
Được thích
1,203
Nghề nghiệp
Kế toán
Em có ví dụ này nhờ AC xem dùm và có thể thiết lập cho?Em chỉ muốn tìm số phiếu thu lớn nhất và số phiếu này sẽ công thêm 1 đơn vị được cập nhật vào mục số phiếu khi Form được kích hoạt? (Lưu ý: Chỉ hiện phần số - Phần PT không hiện cùng ô số phiếu)http://www.4shared.com/file/-XF4nbLg/Cau_hoi.html
 
Thì tìm cái max rồi + 1 là xong đúng hông ta? sao bạn là chuyên gia cũng hỏi nữa à :)
 
Upvote 0
Thì tìm cái max rồi + 1 là xong đúng hông ta? sao bạn là chuyên gia cũng hỏi nữa à :)

Mạng nhà yếu quá nến không up được. Hiện tại mình thử với cái này:
PHP:
Private Sub CommandButton1_Click()
    Dim dongcuoi&
    dongcuoi = S1.Range("A30000").End(3).Row
    Me.TextBox1.Value = Application.WorksheetFunction.Max(Right(S1.Cells(dongcuoi, 1), Len(S1.Cells(dongcuoi, 1) - 2)) + 1)
End Sub
nhưng có lẽ không ổn?
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng Countif(Range,"PT*")+1 được không anh nhỉ?
 
Upvote 0
Dùng Countif(Range,"PT*")+1 được không anh nhỉ?
Cám ơn bạn nhiều! Nhưng nếu có 2 phiếu trùng nhau:
Ví dụ:
PT1
PT1
PC1
PC1
PT2
PT2
PHP:
Me.TextBox1 = (Application.WorksheetFunction.CountIf(S1.[A4:A1000], "PT*") - 2) + 1
Thì vẫn không ổn? Chán thật đó. Mãi không ra.....!
Download
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy làm cột phụ được không anh? Làm cột phụ để lọc ra Phiếu thu không trùng?
Có thể dùng Công thức sau: =IF(COUNTIF($A$1:A1,A1)<=1,A1,"")
hoặc dùng Advanced Filter trích lọc ra một cột không trùng các số phiếu
(Trình em kém chỉ nghĩ được tới đó thui ^^)
 
Upvote 0
Vậy làm cột phụ được không anh? Làm cột phụ để lọc ra Phiếu thu không trùng?
Có thể dùng Công thức sau: =IF(COUNTIF($A$1:A1,A1)<=1,A1,"")
hoặc dùng Advanced Filter trích lọc ra một cột không trùng các số phiếu
(Trình em kém chỉ nghĩ được tới đó thui ^^)

Nếu dùng công thức thì không vấn đề gì. Nhưng mình muốn sư dụng code bạn ah!
 
Upvote 0
Dùng công thức mảng trong code được không anh?
Nếu được thì thử công thức mảng này xem
=SUM(IF(FREQUENCY(IF(LEFT(A1:A9,2)="PT",MATCH($A$1:$A$9,$A$1:$A$9,0)),ROW(A1:A9)-ROW(A1)+1),1))
 

File đính kèm

Upvote 0
Phải nhờ các AC viết dùm code cho thui ah. Mãi không làm được....!!
 
Upvote 0
Em có ví dụ này nhờ AC xem dùm và có thể thiết lập cho?Em chỉ muốn tìm số phiếu thu lớn nhất và số phiếu này sẽ công thêm 1 đơn vị được cập nhật vào mục số phiếu khi Form được kích hoạt? (Lưu ý: Chỉ hiện phần số - Phần PT không hiện cùng ô số phiếu)http://www.4shared.com/file/-XF4nbLg/Cau_hoi.html
Thử dùng cái này xem sao:
PHP:
Private Sub CommandButton1_Click()
    If WorksheetFunction.CountIf(S1.[A:A], "PT*") = 0 Then
        TextBox1 = 1
    Else
        TextBox1 = Mid(S1.[A:A].Find("PT*", , , , , xlPrevious), 3, 100) + 1
    End If
End Sub
Nếu muốn khởi tạo giá trị khi Form được kích hoạt thì dán đoạn code trên vào Sub UserForm_Initialize() hoặc Sub UserForm_Activate()
Điều kiện đúng là số phiếu mới luôn được cập nhật vào cuối danh sách.
 
Upvote 0
Phải nhờ các AC viết dùm code cho thui ah. Mãi không làm được....!!
Thì tự viết lấy 1 hàm mà dùng. Ví dụ:
PHP:
Private Function SpMax(ByVal SrcRng As Range, ByVal Prefix As String) As String
  Dim TmpArr, Tmp As Double, TmpMax As Double, Item
  TmpArr = SrcRng
  For Each Item In TmpArr
    If Len(Trim(CStr(Item))) > 0 Then
      If InStr(CStr(Item), Prefix) Then
        Tmp = Val(Replace(CStr(Item), Prefix, ""))
        If TmpMax <= Tmp Then TmpMax = Tmp + 1
      End If
    End If
  Next
  SpMax = Prefix & IIf(TmpMax = 0, 1, TmpMax)
End Function
Code cho CommandButton
PHP:
Private Sub CommandButton1_Click()
  Me.TextBox1 = SpMax(S1.Range("A4:A10000"), "PT")
End Sub
Quá đơn giản
-----------------
Nếu số phiếu được Format theo kiểu PT0001, PT0002... (stt luôn có độ dài bằng nhau) thì sửa code lại chút (dùng hàm Format)
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thì tham gia bổ xung hàm và sub như sau

Mã:
Function TSo(ByVal Ct As String)
Dim temp
Set temp = CreateObject("VBScript.RegExp")
temp.Global = True
temp.Pattern = "[^0-9]"
TSo = temp.Replace(Ct, "")
End Function
'=====================================
Sub Tangso()
Dim Cl As Range, so
For Each Cl In S1.Range(S1.[A4], S1.[A4].End(xlDown))
If InStr(1, Cl, Me.ComboBox1) > 0 Then
If so < TSo(Cl) Then so = TSo(Cl)
End If
Next
TextBox1 = Me.ComboBox1 & Right("0000" & so + 1, 4)
End Sub

Vậy là khi gọi tăng số nó sẽ theo loại Ctu trên Combo rồi tìm ssó lớn nhất +1. Tham khảo trong file
 

File đính kèm

Upvote 0
Thì ra toàn là lập trình mà mình thì chưa biết cái VBA, mấy cái cú pháp chưa hiểu lắm. Chưa biết bắt đầu đọc từ cái gì để lập trình trong VBA nữa. Hồi xưa có học pascal cũng hiểu cơ bản rồi. Sẵn ai có cao kiến gì chỉ mình. Dù sao dùng code sẽ mạnh nhất để làm điều mình muốn nhỉ! :)
 
Upvote 0
Web KT

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

Back
Top Bottom