Chuyên mục xử lý, gỡ rối code VBA (1 người xem)

Liên hệ QC

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

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,957
Bạn này đang có ý tưởng viết lại hàm của anh Biil. Chỉ có chị "đẹp" mới hỗ trợ được thôi :p
Mình không rãnh để lấy trứng chọi đá.
Hay!, GPE2 nó lại vô tình trùng với địa chỉ của ô GPE2. Sửa nó thành GPE_2 xem, mà cũng chả hiểu hàm của bạn nó làm cái gì nữa.
Topic của nó đây nhé, hiền xem giúp tôi xem, tôi đặt hàm đâu có trùng nhỉ
http://www.giaiphapexcel.com/dienda...vùng-dữ-liệu-không-đầy-đủ.129352/#post-811300
 
Upvote 0
Hay!, GPE2 nó lại vô tình trùng với địa chỉ của ô GPE2. Sửa nó thành GPE_2 xem, mà cũng chả hiểu hàm của bạn nó làm cái gì nữa.
đúng là như thế, rất cảm ơn bạn, đúng thật là hồ đồ quá, sau này đặt hàm sẽ đặt>3 chữ
Mã:
Function Tlookup(Rng As Range, SP As String, Num As Long)
    Dim frng As Range
    Set frng = Rng.Resize(, 1).Find(SP, , xlValues, xlWhole, , , True)(, 2)
    Tlookup = IIf(Num < 1 Or frng(, 2) + 1 < frng + Num, Space(0), frng + Num - 1)
    Set frng = Nothing
End Function
 
Upvote 0
Xin các anh giải đáp giúp em bài toán này với: Khi em làm 1 tool nhỏ để nhập dữ liệu, em có 3 Textbox là 1,2,3 và muốn ghi vào cột A,B,C
Textbox 1 là một chuỗi các ký tự ( chẵn ký tự)
Textbox 2 và 3 là các giá trị cố định
Các anh giúp em code để khi em thao tác nhập dữ liệu thì hệ thống sẽ tự lấy dữ liệu ở Textbox 1 cứ 2 ký tự 1 nó ghi vào 1 dòng của cột A và tương ứng giá trị cố định của Textbox 2 và 3
Ví dụ em nhập
Textbox 1 : abcd1234
Textbox 2: a
Textbox 3: 1
Thì cột A có 4 dòng là ab, cd, 12, 34 và cột B giá trị a, cột C giá trị 1

Em mới tim hiểu nên từ ngữ còn chưa định nghĩa được hết, mong các anh giúp em giải bài này với ạ. Em cảm ơn nhiều !
 
Upvote 0
Xin các anh giải đáp giúp em bài toán này với: Khi em làm 1 tool nhỏ để nhập dữ liệu, em có 3 Textbox là 1,2,3 và muốn ghi vào cột A,B,C
Textbox 1 là một chuỗi các ký tự ( chẵn ký tự)
Textbox 2 và 3 là các giá trị cố định
Các anh giúp em code để khi em thao tác nhập dữ liệu thì hệ thống sẽ tự lấy dữ liệu ở Textbox 1 cứ 2 ký tự 1 nó ghi vào 1 dòng của cột A và tương ứng giá trị cố định của Textbox 2 và 3
Ví dụ em nhập
Textbox 1 : abcd1234
Textbox 2: a
Textbox 3: 1
Thì cột A có 4 dòng là ab, cd, 12, 34 và cột B giá trị a, cột C giá trị 1

Em mới tim hiểu nên từ ngữ còn chưa định nghĩa được hết, mong các anh giúp em giải bài này với ạ. Em cảm ơn nhiều !
Đại khái vầy. Bạn thay [A1] thành ô đầu tiên của vùng ghi dữ liệu.
PHP:
Dim i As Long, KetQua As Variant
ReDim KetQua(1 To Len(Textbox1.Value) \ 2, 1 To 3)
For i = 1 To UBound(KetQua, 1)
    KetQua(i, 1) = Mid(Textbox1.Value, (i - 1) * 2 + 1, 2)
    KetQua(i, 2) = Textbox2.Value
    KetQua(i, 3) = Textbox3.Value
Next
[A1].Resize(UBound(KetQua, 1), 3).Value = KetQua
 
Upvote 0
Đại khái vầy. Bạn thay [A1] thành ô đầu tiên của vùng ghi dữ liệu.
PHP:
Dim i As Long, KetQua As Variant
ReDim KetQua(1 To Len(Textbox1.Value) \ 2, 1 To 3)
For i = 1 To UBound(KetQua, 1)
    KetQua(i, 1) = Mid(Textbox1.Value, (i - 1) * 2 + 1, 2)
    KetQua(i, 2) = Textbox2.Value
    KetQua(i, 3) = Textbox3.Value
Next
[A1].Resize(UBound(KetQua, 1), 3).Value = KetQua
Anh Huu Thang xử lý nhanh thật.
 
Upvote 0
Chào mọi người, em muốn hỏi 1 chút về việc chèn số liệu từ textbox vào 1 sheet trong excel thỏa mãn điều kiện trong listbox như sau.
Ở Sheet1 em có 1 list các ngày từ 1/9 đến 31/9
Em có 1 userform gồm : 1 Combobox và 1 textbox.
Combobox lấy list từ Sheet1!A4:A34
Textbox là dữ liệu mình muốn thêm vào
Giờ em muốn là sau khi chọn ngày, ví dụ ngày 4/9 ở Combobox
Textbox là nhập 1 số liệu nào đó thì.
Ở Sheet2 sẽ điền số liệu vào cột B7 có điều kiện là ở cột A7 (ở đây 4 tương đương với ngày 4/9, từ 1 đến 31 sẽ tương đương với ngày từ 1/9 đến 31/9)
 

File đính kèm

Upvote 0
Chào mọi người, em muốn hỏi 1 chút về việc chèn số liệu từ textbox vào 1 sheet trong excel thỏa mãn điều kiện trong listbox như sau.
Ở Sheet1 em có 1 list các ngày từ 1/9 đến 31/9
Em có 1 userform gồm : 1 Combobox và 1 textbox.
Combobox lấy list từ Sheet1!A4:A34
Textbox là dữ liệu mình muốn thêm vào
Giờ em muốn là sau khi chọn ngày, ví dụ ngày 4/9 ở Combobox
Textbox là nhập 1 số liệu nào đó thì.
Ở Sheet2 sẽ điền số liệu vào cột B7 có điều kiện là ở cột A7 (ở đây 4 tương đương với ngày 4/9, từ 1 đến 31 sẽ tương đương với ngày từ 1/9 đến 31/9)
Bạn dùng Code sau cho Form
Mã:
Private Sub CommandButton1_Click()
    Range("B" & ComboBox1.ListIndex + 4) = TextBox1
End Sub
 
Upvote 0
Bạn dùng Code sau cho Form
Mã:
Private Sub CommandButton1_Click()
    Range("B" & ComboBox1.ListIndex + 4) = TextBox1
End Sub
Cái hàm Range là với Sheet2 hiện thời đang mở, nhưng khi có nhiều sheet và active sheet không phải là sheet2 thì thêm cái gì vào trước Range được ạ ?
Workbook("Sheet2").Range phải không ạ ?
Với em giờ không muốn đặt theo tên Sheet nữa mà muốn đặt theo tên cố định của Sheet nhìn thấy khi trong cửa sổ VBA thì phải làm thế nào ạ, vd như Sheet2 đổi tên thành abc, nhưng trong VBA thì nó vẫn nhận là Sheet2 ý ạ .
Em xin cảm ơn!
 
Upvote 0
Cái hàm Range là với Sheet2 hiện thời đang mở, nhưng khi có nhiều sheet và active sheet không phải là sheet2 thì thêm cái gì vào trước Range được ạ ?
Workbook("Sheet2").Range phải không ạ ?
Với em giờ không muốn đặt theo tên Sheet nữa mà muốn đặt theo tên cố định của Sheet nhìn thấy khi trong cửa sổ VBA thì phải làm thế nào ạ, vd như Sheet2 đổi tên thành abc, nhưng trong VBA thì nó vẫn nhận là Sheet2 ý ạ .
Em xin cảm ơn!
Cấu trúc này thì dạng nó là:
Mã:
Sheets("Tên sheet").Range

Sheet1.Range (Trong đó cái Sheet1 là cái bạn nhìn trong cửa sổ VBE
 
Upvote 0
Vâng, vì em muốn là dù không may người ta có thay đổi tên của Sheet thì công thức cũng sẽ không bị lỗi
 
Upvote 0
Cấu trúc này thì dạng nó là:
Mã:
Sheets("Tên sheet").Range

Sheet1.Range (Trong đó cái Sheet1 là cái bạn nhìn trong cửa sổ VBE
Em muốn thêm code check tại textbox1, yêu cầu nhập tại hộp textbox1 phải là số lớn hơn 0 thì thêm đoạn code nào vào được ạ ?
 
Upvote 0
Đại khái vầy. Bạn thay [A1] thành ô đầu tiên của vùng ghi dữ liệu.
PHP:
Dim i As Long, KetQua As Variant
ReDim KetQua(1 To Len(Textbox1.Value) \ 2, 1 To 3)
For i = 1 To UBound(KetQua, 1)
    KetQua(i, 1) = Mid(Textbox1.Value, (i - 1) * 2 + 1, 2)
    KetQua(i, 2) = Textbox2.Value
    KetQua(i, 3) = Textbox3.Value
Next
[A1].Resize(UBound(KetQua, 1), 3).Value = KetQua

Anh Hữu Thắng ơi em muốn hoi thêm 1 chút nữa được không ạ
Em muốn thêm 1 vài dòng định nghĩa cho cái textbox1 khi em có nhiều ô giá trị giống nhau
ví dụ em điền a1 vào ô textbox 1 thì vba sẽ tính nó là "112211221122"
a2 vào textbox 1 vba sẽ tính nó là "ssbbccgghh"
a3 vào textbox 1 vba sẽ tính nó là "sgsbbgccggghgh" chẳng hạn
 
Upvote 0
Anh Hữu Thắng ơi em muốn hoi thêm 1 chút nữa được không ạ
Em muốn thêm 1 vài dòng định nghĩa cho cái textbox1 khi em có nhiều ô giá trị giống nhau
ví dụ em điền a1 vào ô textbox 1 thì vba sẽ tính nó là "112211221122"
a2 vào textbox 1 vba sẽ tính nó là "ssbbccgghh"
a3 vào textbox 1 vba sẽ tính nó là "sgsbbgccggghgh" chẳng hạn
Bạn thử vầy thử xem. Tôi làm chay nên cũng không biết có lỗi gì không.
PHP:
Dim i As Long, KetQua As Variant, sTextbox1 As String
sTextbox1 = Textbox1.Value
Select Case sTextbox1
Case "a1"
    sTextbox1 = "112211221122"
Case "a2"
    sTextbox1 = "ssbbccgghh"
Case "a3"
    sTextbox1 = "sgsbbgccggghgh"
End Select
ReDim KetQua(1 To Len(sTextbox1) \ 2, 1 To 3)
For i = 1 To UBound(KetQua, 1)
    KetQua(i, 1) = Mid(sTextbox1, (i - 1) * 2 + 1, 2)
    KetQua(i, 2) = Textbox2.Value
    KetQua(i, 3) = Textbox3.Value
Next
[A1].Resize(UBound(KetQua, 1), 3).Value = KetQua
 
Upvote 0
Nhờ các bạn chỉ giúp!
Ban đầu mình có một vùng dữ liệu từ ô B2:F15 và đã đặt tên là MAINDATA (đây là vùng dữ liệu động, vùng này sẽ thay đổi vị trí mỗi khi kết qua tính toán thay đổi, nhưng số lượng của hàng và cột không đổi) Mình muốn gán một biến cho vùng này qua tên đã đặt, chứ không qua địa chỉ hàng/cột như trên. Để cho dù là bất cứ kết quả nào thì vẫn chỉ là vùng MAINDATA mà thôi.
Mình đang chỉ dùng được cách: "Set rng = Range("B2:F15")". nhưng khi dùng "Set rng = Range("MAINDATA")" thì không được. Do vậy, khi kết quả thay đổi thì đoạn code cũng đi tong luôn.
Các bạn chỉ giúp minh cách gán biến 'rng' cho vùng dữ liệu MAINDATA này với.
 
Upvote 0
Nhờ các bạn chỉ giúp!
Ban đầu mình có một vùng dữ liệu từ ô B2:F15 và đã đặt tên là MAINDATA (đây là vùng dữ liệu động, vùng này sẽ thay đổi vị trí mỗi khi kết qua tính toán thay đổi, nhưng số lượng của hàng và cột không đổi) Mình muốn gán một biến cho vùng này qua tên đã đặt, chứ không qua địa chỉ hàng/cột như trên. Để cho dù là bất cứ kết quả nào thì vẫn chỉ là vùng MAINDATA mà thôi.
Mình đang chỉ dùng được cách: "Set rng = Range("B2:F15")". nhưng khi dùng "Set rng = Range("MAINF")" thì không được. Do vậy, khi kết quả thay đổi thì đoạn code cũng đi tong luôn.
Các bạn chỉ giúp minh với.
Vì sao bạn không làm cách này?
PHP:
Set rng = Range("B2:F15")
 
Upvote 0
Nếu scope của name là worksheet thì chỉ khi nào sheet ấy đang active mới sử dụng được.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom