Chuyên đề giải đáp những thắc mắc về code VBA

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,408
Được thích
2,276
Điểm
360
Các thầy/anh ơi, mình có thể tạo ra Function mà có thể gọi tên sheet, hoặc tạo ra 1 mảng tên các sheet được ko ạ?
Bạn thử.
Mã:
Function tensheet(ByVal so As Integer) As String
        tensheet = Sheets(so).Name
End Function
Mã:
=tensheet(1)
 

iamnobika

Thành viên mới
Tham gia ngày
2 Tháng tám 2013
Bài viết
17
Được thích
0
Điểm
363
Tuổi
31
Bạn thử.
Mã:
Function tensheet(ByVal so As Integer) As String
        tensheet = Sheets(so).Name
End Function
Mã:
=tensheet(1)
em cám ơn anh, nhưng sao em kết hợp =tensheet(row(1:4)) không tạo ra được mảng tên sheet anh ạ
 
Lần chỉnh sửa cuối:

iamnobika

Thành viên mới
Tham gia ngày
2 Tháng tám 2013
Bài viết
17
Được thích
0
Điểm
363
Tuổi
31
Bạn kéo nó dài ra nhé.Cái này nó chỉ hiện tên 1 sheets thôi mà.
em muốn kết hợp công thức mảng vào cái hàm tensheet đó anh để tạo ra mảng {TH, ab, cd, xy} sau đó sẽ dùng tiếp hàm indirect để giải quyết theo mục đích
Cơ mà =tensheet{1,2,3,4} nó báo lỗi value
Có phải function tạo ra không thể tạo mảng nhưng trong công thức excel phải ko ạ?
 
Lần chỉnh sửa cuối:

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,408
Được thích
2,276
Điểm
360
em muốn kết hợp công thức mảng vào cái hàm tensheet đó anh để tạo ra mảng {TH, ab, cd, xy} sau đó sẽ dùng tiếp hàm indirect để giải quyết theo mục đích
Cơ mà =tensheet{1,2,3,4} nó báo lỗi value
Có phải function tạo ra không thể tạo mảng nhưng trong công thức excel phải ko ạ?
Bạn thử cái hàm mảng này.
 

File đính kèm

haog

Thành viên mới
Tham gia ngày
14 Tháng chín 2017
Bài viết
11
Được thích
0
Điểm
163
Kính nhờ các anh chị chỉ giúp mình 1 đoạn code về tìm ngày trong dữ liệu.
Giả sử cột A chứa dữ liệu dạng Date, format dd/mm/yyyy, sắp xếp tăng dần (các giá trị có thể không liên tục, có thể có nhiều dòng có cùng giá trị).
Có thể dùng code Function sau
Function TimDong(arr As Range, gt As Date) As Integer
Dim k As Range
For Each k In arr
If k.Value >= gt Then
TimDong = k.Row
Exit Function
End If
Next
End Function

Không cần bẫy lỗi vì nếu không có thì cho KQ = 0.
 

bazooka.92

Thành viên mới
Tham gia ngày
26 Tháng mười 2019
Bài viết
2
Được thích
0
Điểm
13
Tuổi
27
chào các anh. các anh cho em hỏi cái nyaf là em bị lồi gì ạ

Private Sub Textcaphanmem_Change()
On Error Resume Next
Textcaphanmem.Text = Format(Textcaphanmem.Text, "#,##0")
End Sub

em dùng hàm này trong userfrom mà trong textbox thì hiện đúng nhưng trong file nhập excel thì bị thiều mất 3 số 0
VD như trong textbox nhập 2000000 textbox sẽ hiện 2,000,000 trong execl là 2.000.000
nhưng khi nhập 200000 texbox hiện 200,000 exel chỉ hiện 200
em đã chỉnh lại trong Format cells/Number/Custome #,##0 đung như trong textbox rồi :(
 

lantn90

Thành viên mới
Tham gia ngày
27 Tháng mười 2019
Bài viết
1
Được thích
0
Điểm
13
Tuổi
29
Help Me!!!
Kính gửi các anh chị trên diễn đàn mình, em mới học VBA nên chưa biết sửa code đúng cách, rất mong các anh chị chỉ giáo giúp em.
chẳng là e muốn lấy danh sách những ông bà (gồm tất cả các cột như trong file data1) mà có giá trị tại cột PENINT và/hoăc cột BILINT và/hoặc cột BILPRN #0 sang báo cáo tại file final. Tức là nếu giá trị tại 3 cột trền đều bằng 0 thì e ko lấy.
E đã viết code, nhưng mắc lỗi và không biết sửa.
P/s: Các anh/chị có thể thay đổi đương dẫn trong code để mở file data1 ạ.
Mong các anh chị xem sớm giúp e với, em cảm ơn rất rất nhiều ạ.
 

File đính kèm

Lần chỉnh sửa cuối:

huongmuine

Thành viên GPE
Tham gia ngày
27 Tháng năm 2010
Bài viết
208
Được thích
30
Điểm
385
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
 

snow25

Thành viên gắn bó
Tham gia ngày
24 Tháng bảy 2018
Bài viết
2,408
Được thích
2,276
Điểm
360
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
Bạn hiểu đoạn code trên không.Đó là 4 hàm if lồng nhau.Cái điều kiện cuối cùng thì cần phải đúng 4 cái thì mới được thực hiện.Nên không thể rút gọn được.
 

leonguyenz

Thành viên mới
Thành viên BQT
Moderator
Tham gia ngày
2 Tháng tám 2010
Bài viết
4,471
Được thích
7,847
Điểm
610
Nơi ở
Bình Dương
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
Nếu D48 = Empty và D54 <> Empty thì AQ53 có bằng "." không? Nếu AQ53 = "." thì tôi nghĩ code trên còn thiếu.
 

HieuCD

Thành viên gạo cội
Tham gia ngày
14 Tháng chín 2010
Bài viết
6,187
Được thích
11,494
Điểm
1,560
Bạn hiểu đoạn code trên không.Đó là 4 hàm if lồng nhau.Cái điều kiện cuối cùng thì cần phải đúng 4 cái thì mới được thực hiện.Nên không thể rút gọn được.
Dùng
For ...
if ....
....
else
exit for
end if
next
 

hungyen2010

Thành viên mới
Tham gia ngày
18 Tháng mười 2010
Bài viết
7
Được thích
0
Điểm
363
hi cả nhả e đang làm thông báo điểm với bảng điểm từ file excel sang file thông báo là file word nhưng vị trí bảng điểm hiện thị trong file word không đúng vị trí mà luôn hiện ở cuối trang word mong các bác giúp em.Em cảm ơn
 

File đính kèm

tonnydung

Thành viên chính thức
Tham gia ngày
4 Tháng một 2016
Bài viết
55
Được thích
1
Điểm
170
Em nhờ các bác giúp 4 trường hợp sau giúp:


1/ Code VBA để coppy sau VD: Sheet 1
Khi ta dang Mở File A ở Sheet 1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet1 File C những cột A,B,C,D Nếu thỏa cột B có chữ "nhà xe" vào Sheet1 File A


2/ Code VBA để coppy sau VD: Sheet 2
Khi ta dang Mở Sheet2 File A ở Sheet 2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet2 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa cột C Không có chữ "HQ" vào Sheet2 File A

3/ Code VBA để coppy sau VD: Sheet 3
Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột A trong Sheet3 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet3 FileC không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột C,D,E của Sheet3 FileC sang các cột C,D,E của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

4/ Code VBA trong Form VD: Sheet 4
Trong 1 Form có 2 text boxt sau:
Text boxt 1, Text boxt 2
Khi nhập dữ liệu vào Text boxt 1 bấm enter thì Text boxt 2 ktra 3 ký tự đầu của
Text boxt 1 nếu có 3 chữ "kle" thì Text boxt 2 sẽ tự điền là "kh" còn ko có Text boxt 2 sẽ điền "nhà xe"
 

File đính kèm

Thong Hoang Tien 250691

Thành viên hoạt động
Tham gia ngày
14 Tháng năm 2017
Bài viết
136
Được thích
120
Điểm
180
Tuổi
28
Nơi ở
Tiên Du - Bắc Ninh
Em nhờ các bác giúp 4 trường hợp sau giúp:


1/ Code VBA để coppy sau VD: Sheet 1
Khi ta dang Mở File A ở Sheet 1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet1 File C những cột A,B,C,D Nếu thỏa cột B có chữ "nhà xe" vào Sheet1 File A


2/ Code VBA để coppy sau VD: Sheet 2
Khi ta dang Mở Sheet2 File A ở Sheet 2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet2 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa cột C Không có chữ "HQ" vào Sheet2 File A

3/ Code VBA để coppy sau VD: Sheet 3
Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột A trong Sheet3 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet3 FileC không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột C,D,E của Sheet3 FileC sang các cột C,D,E của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

4/ Code VBA trong Form VD: Sheet 4
Trong 1 Form có 2 text boxt sau:
Text boxt 1, Text boxt 2
Khi nhập dữ liệu vào Text boxt 1 bấm enter thì Text boxt 2 ktra 3 ký tự đầu của
Text boxt 1 nếu có 3 chữ "kle" thì Text boxt 2 sẽ tự điền là "kh" còn ko có Text boxt 2 sẽ điền "nhà xe"
Anh đọc lại nội quy đăng bài nhé. "2. Không được viết một câu hỏi nhiều lần hay gửi cùng một câu hỏi trong nhiều box khác nhau. Khi câu hỏi chưa được trả lời thì không có nghĩa là không ai biết thông tin liên quan đến câu hỏi của bạn và mọi người đang tìm thông tin để trả lời cho câu hỏi đó. "
Câu hỏi của anh em đã trả lời ở bên kia rồi.
 

tonnydung

Thành viên chính thức
Tham gia ngày
4 Tháng một 2016
Bài viết
55
Được thích
1
Điểm
170
Vì có những vẫn đề phát sinh và gửi nhầm sang chủ đề Form nên em xin gửi lại ở đây nhờ các bác giúp 3 trường hợp sau giúp:

1/ Code VBA để coppy sau VD: Sheet 1

Khi ta dang Mở File A ở Sheet1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet4 File C những cột A,B,C,D Nếu thỏa 2 điều kiện sau:
1/ cột B ở Sheet4 FileC có chữ "nhà xe"
2/ Nếu Sheet1 FileA cột A,C,D có thông tin trùng nhau thì Coppy đè lên cái đã có ở Sheet1 File A

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


2/ Code VBA để coppy sau VD: Sheet 2

Khi ta dang Mở Sheet2 File A ở Sheet2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet5 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa mãn cột C Không có chữ "HQ" vào Sheet2 File A => Để ko coppy nhiều lần nếu cột B,C,E của FileA trùng với dữ liệu sẽ coppy ở FileC sang thì sẽ ghi đè lên Sheet2 ở FileA

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


3/ Code VBA để coppy sau VD: Sheet 3

Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E,F,G,H,I,J,K và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột B trong Sheet6 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet6 FileC ở cột F, K không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột D,E,F,H,I,J của Sheet6 FileC sang các cột C,D,E, H,I,J của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)

Rất mong được giúp đỡ vì em rất cần. Tks
 

File đính kèm

Lần chỉnh sửa cuối:

tonnydung

Thành viên chính thức
Tham gia ngày
4 Tháng một 2016
Bài viết
55
Được thích
1
Điểm
170
Vì có những vẫn đề phát sinh và gửi nhầm sang chủ đề Form nên em xin gửi lại ở đây nhờ các bác giúp 3 trường hợp sau giúp:

1/ Code VBA để coppy sau VD: Sheet 1

Khi ta dang Mở File A ở Sheet1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet4 File C những cột A,B,C,D Nếu thỏa 2 điều kiện sau:
1/ cột B ở Sheet4 FileC có chữ "nhà xe"
2/ Nếu Sheet1 FileA cột A,C,D có thông tin trùng nhau thì Coppy đè lên cái đã có ở Sheet1 File A

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


2/ Code VBA để coppy sau VD: Sheet 2

Khi ta dang Mở Sheet2 File A ở Sheet2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet5 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa mãn cột C Không có chữ "HQ" vào Sheet2 File A => Để ko coppy nhiều lần nếu cột B,C,E của FileA trùng với dữ liệu sẽ coppy ở FileC sang thì sẽ ghi đè lên Sheet2 ở FileA

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)


3/ Code VBA để coppy sau VD: Sheet 3

Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E,F,G,H,I,J,K và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột B trong Sheet6 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet6 FileC ở cột F, K không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột D,E,F,H,I,J của Sheet6 FileC sang các cột C,D,E, H,I,J của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

(Lưu ý: Làm sao ko cần mở file mà vẫn coppy được)

Rất mong được giúp đỡ vì em rất cần. Tks
rất mong được sự giúp đỡ. tks
 

vova2209

Thành viên tiêu biểu
Tham gia ngày
5 Tháng tư 2017
Bài viết
566
Được thích
58
Điểm
220
Tuổi
33
Nơi ở
TP. Tuyên Quang
Chào anh chị! em hỏi về vòng for
cho em xin code về vòng for i = "chọn nhiều ô cell". VD vòng for mình muốn chạy thì chọn ô A1, A5, A7, A8 hoặc quét 1 dãy từ A1~A10 ở những ô đó lấy được giá trị cho vào vòng for
 

batman1

Thành viên gắn bó
Tham gia ngày
8 Tháng chín 2014
Bài viết
2,712
Được thích
4,035
Điểm
560
Chào anh chị! em hỏi về vòng for
cho em xin code về vòng for i = "chọn nhiều ô cell". VD vòng for mình muốn chạy thì chọn ô A1, A5, A7, A8 hoặc quét 1 dãy từ A1~A10 ở những ô đó lấy được giá trị cho vào vòng for
Mã:
Sub test()
Dim cell_ As Range
    For Each cell_ In Application.Selection
'        ...
    Next cell_
End Sub
 
Top Bottom