Hỏi đáp về VBA (các vấn đề căn bản nhất)

Liên hệ QC

havietchuong

Thành viên tiêu biểu
Tham gia
16/6/09
Bài viết
490
Được thích
570
Giới tính
Nam
Nghề nghiệp
Giáo viên tiểu học.
Tôi không biết đặt đặt câu hỏi này nơi nào cho đúng, xin gởi vào đây. Nếu có sai xin thông cảm cho người mới học VBA.
Trong 1 cửa sổ Module có thể ghi nhiều nhiều Macro và mỗi macro có thể ứng với 1 tổ hợp phím nào đó được không?
Tôi thử nhiều lần thì khi được khi không. Không biết nó thế nào? Trong tập tin sau có lỗi gì không trong cách ghi Macro? Cám ơn.
 

File đính kèm

  • baitap1.xls
    28 KB · Đọc: 244
Lần chỉnh sửa cuối:
Xin viết code trong dự toán

Bác chỉnh giùm em
ô E8 thành kiểu dữ liệu như trong ô E9, thay đổi cho cả cột E
 

File đính kèm

  • dutoan.rar
    11.9 KB · Đọc: 16
Upvote 0
Bác chỉnh giùm em
ô E8 thành kiểu dữ liệu như trong ô E9, thay đổi cho cả cột E

PHP:
Sub them_chuoi()
Dim i, kq(), tam
kq = Range([E8], [E65536].End(3)).Value
   For i = 1 To UBound(kq)
      If kq(i, 1) <> "" Then
         tam = kq(i, 1): tam = Replace(tam, " ", ""): tam = Replace(tam, "=", "")
         kq(i, 1) = Replace(tam, ":", ":" & String(15, Space(1))) & Space(5) & "="
      End If
   Next
[E8].Resize(i - 1) = kq
End Sub
 
Upvote 0
Bác chỉnh giùm em
ô E8 thành kiểu dữ liệu như trong ô E9, thay đổi cho cả cột E

@ thangcola114: bạn nên mô tả dữ liệu một chút và mô tả kết quả phải thế nào. Bạn quá kiệm lời đấy.
Tôi thử miêu tả xem đúng như ý bạn không nhé?

Trong ô tại cột E gõ:

[chuoi1 = chuỗi ký tự kết thúc bằng ký tự ":" đầu tiên (chuỗi có thể có nhiều ":" không? Nếu luôn có 1 và chỉ 1 ":" thì bỏ chữ "đầu tiên")][chuỗi ký tự " " (có thể có TAB không?)][chuoi2 = chuỗi bắt đầu và cũng kết thúc đều bằng chữ số (hay cả chữ cái?) và không chứa ký tự "="][chuỗi ký tự tùy ý (dấu cách, =, chữ cái, chữ số ...)]

Chỉ có "chuoi1" và "chuỗi2" luôn luôn có?

Và kết quả là cả mớ "hổ lốn" đó được thay bằng chuoi1 & " " & chuoi2 & " " đúng không?


Ví dụ tôi gõ "bla : 1*2,2*2,2*0,5*1,22 + 1 + 2 TAB TAB =3 = 4 ========xyz"
thì chuyển thành "bla : 1*2,2*2,2*0,5*1,22 + 1 + 2 "?

Mà bạn giải thích không chính xác đấy.

Móng: 1+2 = 4
tự động chuyển thành:
Móng: 1+2 (xóa phần sau dấu "="

Nếu chỉ còn "Móng: 1+2 " thì có nghĩa là xóa cả dấu "=". Nếu chỉ xóa phần sau dấu "=" thì dĩ nhiên dấu "=" vẫn còn
 
Lần chỉnh sửa cuối:
Upvote 0
@ thangcola114: bạn nên mô tả dữ liệu một chút và mô tả kết quả phải thế nào. Bạn quá kiệm lời đấy.
Tôi thử miêu tả xem đúng như ý bạn không nhé?

Trong ô tại cột E gõ:

[chuoi1 = chuỗi ký tự kết thúc bằng ký tự ":" đầu tiên (chuỗi có thể có nhiều ":" không? Nếu luôn có 1 và chỉ 1 ":" thì bỏ chữ "đầu tiên")][chuỗi ký tự " " (có thể có TAB không?)][chuoi2 = chuỗi bắt đầu và cũng kết thúc đều bằng chữ số (hay cả chữ cái?) và không chứa ký tự "="][chuỗi ký tự tùy ý (dấu cách, =, chữ cái, chữ số ...)]

Chỉ có "chuoi1" và "chuỗi2" luôn luôn có?

Và kết quả là cả mớ "hổ lốn" đó được thay bằng chuoi1 & " " & chuoi2 & " " đúng không?


Ví dụ tôi gõ "bla : 1*2,2*2,2*0,5*1,22 + 1 + 2 TAB TAB =3 = 4 ========xyz"
thì chuyển thành "bla : 1*2,2*2,2*0,5*1,22 + 1 + 2 "?
n
Em cần code đúng như bác miêu tả. Thỏa mãn 2 nguyên tắc:
1. Nguyên tắc để tính giá trị của chuỗi 2 (quan trọng nhất): Giúp em xóa phần bắt đầu từ dấu "=" đầu tiên trở về sau (xóa cả dấu "=")
2. Nguyên tắc về chính tả khi viết: không tồn tại 2 dấu Tab (dấu cách) liền kề nhau trong chuỗi thu được cuối cùng (Giống tác dụng của hàm Trim)
Chuỗi cuối cùng thu được:
chuoi1 & " " & ":" chuoi2 & " " (sau chuỗi 2 cũng như trong toàn văn bản chỉ được phép có <=1 dấu Tab liền kề nhau)
 
Upvote 0
PHP:
Sub them_chuoi()
Dim i, kq(), tam
kq = Range([E8], [E65536].End(3)).Value
   For i = 1 To UBound(kq)
      If kq(i, 1) <> "" Then
         tam = kq(i, 1): tam = Replace(tam, " ", ""): tam = Replace(tam, "=", "")
         kq(i, 1) = Replace(tam, ":", ":" & String(15, Space(1))) & Space(5) & "="
      End If
   Next
[E8].Resize(i - 1) = kq
End Sub
Em nhầm, xóa bắt đầu từ dấu "=" trở về sau (xóa cả dấu "=")
Code này vẫn tồn tại 2 dấu Tab liền kề nhau a à.
Anh xem giúp em 1 code giải quyết 2 yêu cầu:
1. Về giá trị: code bài 198 của anh quanghai đã giải quyết xong (xóa cả dấu "="
2. Về nguyên tắc chính tả: không tồn tại 2 dấu Tab liền kề nhau trong ô
Thank a nhiều
 
Upvote 0
Em cần code đúng như bác miêu tả. Thỏa mãn 2 nguyên tắc:
1. Nguyên tắc để tính giá trị của chuỗi 2 (quan trọng nhất): Giúp em xóa phần bắt đầu từ dấu "=" đầu tiên trở về sau (xóa cả dấu "=")
2. Nguyên tắc về chính tả khi viết: không tồn tại 2 dấu Tab (dấu cách) liền kề nhau trong chuỗi thu được cuối cùng (Giống tác dụng của hàm Trim)
Chuỗi cuối cùng thu được:
chuoi1 & " " & ":" chuoi2 & " " (sau chuỗi 2 cũng như trong toàn văn bản chỉ được phép có <=1 dấu Tab liền kề nhau)

Nói chuyện với bạn khó quá.
Tôi đã miêu tả chuoi1 có cả dấu ":" rồi mà bạn lại viết:

Chuỗi cuối cùng thu được:
chuoi1 & " " & ":" chuoi2

Thế thì kết quả có 2 dấu ":"?
Thôi tôi cứ viết đại. Mà đúng là viết đại thôi vì biết đâu có thể viết pattern khác hay hơn.
code cho sheet "Du toan". Bạn cứ viết đại một cái gì đấy ở cột E (vd. ở ô trống nào đó) rồi xem

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, kq
    If Not Intersect(Target, Range([E8], [E65536].End(3))) Is Nothing Then
        Application.EnableEvents = False
        kq = Range([E8], [E65536].End(3)).Offset(, -1).Resize(, 2).Value
        With CreateObject("vbscript.regexp")
           .Pattern = "(.*:)\s*(\w[^=]*\w*\b).*"
           For i = 1 To UBound(kq)
              If kq(i, 1) = "" Then
                 If kq(i, 2) <> "" Then
                    kq(i, 2) = .Replace(kq(i, 2), "$1 $2 ")
                 End If
              End If
           Next
        End With
        [D8].Resize(i - 1, 2) = kq
        Application.EnableEvents = True
    End If
End Sub

code ở bài #198 của quanghai chưa xóa các dấu cách thừa ở sau ":"
Có thể lấy cách đó để xóa từ "=" đầu tiên cho tới cuối, sau đó xóa tiếp các dấu cách sau ":" nếu nhiều quá. Cách đi 2 bước thì cả 2 pattern đơn giản hơn.
 
Upvote 0
Nói chuyện với bạn khó quá.
Tôi đã miêu tả chuoi1 có cả dấu ":" rồi mà bạn lại viết:



Thế thì kết quả có 2 dấu ":"?
Thôi tôi cứ viết đại. Mà đúng là viết đại thôi vì biết đâu có thể viết pattern khác hay hơn.
code cho sheet "Du toan". Bạn cứ viết đại một cái gì đấy ở cột E (vd. ở ô trống nào đó) rồi xem

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, kq
    If Not Intersect(Target, Range([E8], [E65536].End(3))) Is Nothing Then
        Application.EnableEvents = False
        kq = Range([E8], [E65536].End(3)).Offset(, -1).Resize(, 2).Value
        With CreateObject("vbscript.regexp")
           .Pattern = "(.*:)\s*(\w[^=]*\w*\b).*"
           For i = 1 To UBound(kq)
              If kq(i, 1) = "" Then
                 If kq(i, 2) <> "" Then
                    kq(i, 2) = .Replace(kq(i, 2), "$1 $2 ")
                 End If
              End If
           Next
        End With
        [D8].Resize(i - 1, 2) = kq
        Application.EnableEvents = True
    End If
End Sub

code ở bài #198 của quanghai chưa xóa các dấu cách thừa ở sau ":"
Có thể lấy cách đó để xóa từ "=" đầu tiên cho tới cuối, sau đó xóa tiếp các dấu cách sau ":" nếu nhiều quá. Cách đi 2 bước thì cả 2 pattern đơn giản hơn.
Em giờ mới tìm hiểu về VBA nên mong được các bác giúp.
1. Code trên vẫn chưa giải quyết triệt để nguyên tắc về chính tả là không tồn tại 2 dấu Tab liền kề nhau trong ô.
- Nếu 2 dấu Tab này nằm trong chuỗi 2 thì sẽ làm sai giá trị, ví dụ chuỗi 2 là:
(1+2*3)/10 có giá trị là 0.7
nhưng nếu có lỗi 2 dấu Tab liền kề nhau: (1+2*3)/Tab Tab 10 có giá trị là 10
- 2 dấu Tab này nằm trong chuỗi 1 (không ảnh hưởng đến giá trị, chỉ là chưa được đúng chính tả khi nhập)
2. Em chỉ mới biết dùng Dạng Sub, dạng private Sub muốn áp dụng thì phải làm thế nào, có phải là phải copy vào sheet dutoan mỗi khi mở 1 file
3. Không phải khi nào cũng có chuỗi 1&" "
4. Cells đang có 2 lỗi, giờ cần sửa nên tạo macro (1 macro giải quyết 2 yêu cầu là tốt nhất) (dữ liệu cần sửa nhiều nên ưu tiên tốc độ xử lý và đã có sẵn nên có thể bỏ qua bước sửa lúc nhập sai):
- Macro xoa_chuoi tại bài 198 đã giải quyết xong vấn đề về giá trị
- Cần tiếp macro giải quyết bài toán chính tả: không tồn tại 2 dấu Tab trong Cells thuộc cột E chứa giá trị mà cột D tương ứng rỗng.
- File em đã up ở bài 201
Giúp em, đang cần gấp
 
Lần chỉnh sửa cuối:
Upvote 0
Em giờ mới tìm hiểu về VBA nên mong được các bác giúp.
1. Code trên vẫn chưa giải quyết triệt để nguyên tắc về chính tả là không tồn tại 2 dấu Tab liền kề nhau trong ô.
- Nếu 2 dấu Tab này nằm trong chuỗi 2 thì sẽ làm sai giá trị, ví dụ chuỗi 2 là:
(1+2*3)/10 có giá trị là 0.7
nhưng nếu có lỗi 2 dấu Tab liền kề nhau: (1+2*3)/Tab Tab 10 có giá trị là 10
- 2 dấu Tab này nằm trong chuỗi 1 (không ảnh hưởng đến giá trị, chỉ là chưa được đúng chính tả khi nhập)
2. Em chỉ mới biết dùng Dạng Sub, dạng private Sub muốn áp dụng thì phải làm thế nào, có phải là phải copy vào sheet dutoan mỗi khi mở 1 file
3. Không phải khi nào cũng có chuỗi 1&" "
4. Cells đang có 2 lỗi, giờ cần sửa nên tạo macro (1 macro giải quyết 2 yêu cầu là tốt nhất) (dữ liệu cần sửa nhiều nên ưu tiên tốc độ xử lý và đã có sẵn nên có thể bỏ qua bước sửa lúc nhập sai):
- Macro xoa_chuoi tại bài 198 đã giải quyết xong vấn đề về giá trị
- Cần tiếp macro giải quyết bài toán chính tả: không tồn tại 2 dấu Tab trong Cells thuộc cột E chứa giá trị mà cột D tương ứng rỗng.
- File em đã up ở bài 201
Giúp em, đang cần gấp

Với tôi thì tôi kết thúc tại đây tới khi bạn miêu tả cái mà bạn gõ.
1. Trước dấu ":" có bao nhiêu chuỗi "rời nhau? Chỉ có 1 chuỗi dạng "abc...xyz" + nhiều TAB + dấu cách + ":" hay nhiều chuỗi "rời" kiểu "abc" + Tab, dấu cách + "xyz" + Tab, dấu cách + ":"?
2. Sau ":" có thể có Tab, dấu cách sau đó là "chuỗi". Cái "chuỗi" này bắt đẫu bàng chữ số? Kết thúc bằng chữ số? Còn trong "giữa" là có gì? Chữ số + chữ cái + tab, dấu cách + "+, -, *, /" (4 phép tính số học)?
3. Sau "chuỗi" ở trên là là Tab, dấu cách và "=" và một loạt ký tự tùy ý cho tới cuối?
Miêu tả cho rõ bạn ạ. Bạn kêu là code chưa chuẩn nhưng người ta có biết rõ dữ liệu của bạn thế nào đâu để viết cho chuẩn?
Bạn nói: Macro xoa_chuoi tại bài 198 đã giải quyết xong vấn đề về giá trị
Thế code của tôi chưa giải quyết xong vấn đề về giá trị?
Bạn không miêu tả, chỉ cho ví dụ thì 1000 ví dụ chưa chắc đã nói hết về kiểu dữ liệu. Mất thời gian với bạn quá.
Tôi cũng nói rồi: dùng cách của quanghai thì sau khi đã cắt "đuôi" "=...." thì làm tiếp bỏ các dấu cách và Tab.
Mà bạn miêu tả kết quả phải có nữa nhé. Tôi cho vd. Nếu có phép tính +, -, *, / thì trước và sau mỗi toán tử có phải cho dấu cách không? Vd. 1 + 2 hay phải là 1+2? Bạn cung cấp thông tin nhỏ gọt thì tôi xin rút lui.
 
Upvote 0
Em giờ mới tìm hiểu về VBA nên mong được các bác giúp.
1. Code trên vẫn chưa giải quyết triệt để nguyên tắc về chính tả là không tồn tại 2 dấu Tab liền kề nhau trong ô.
- Nếu 2 dấu Tab này nằm trong chuỗi 2 thì sẽ làm sai giá trị, ví dụ chuỗi 2 là:
(1+2*3)/10 có giá trị là 0.7
nhưng nếu có lỗi 2 dấu Tab liền kề nhau: (1+2*3)/Tab Tab 10 có giá trị là 10
- 2 dấu Tab này nằm trong chuỗi 1 (không ảnh hưởng đến giá trị, chỉ là chưa được đúng chính tả khi nhập)
2. Em chỉ mới biết dùng Dạng Sub, dạng private Sub muốn áp dụng thì phải làm thế nào, có phải là phải copy vào sheet dutoan mỗi khi mở 1 file
3. Không phải khi nào cũng có chuỗi 1&" "
4. Cells đang có 2 lỗi, giờ cần sửa nên tạo macro (1 macro giải quyết 2 yêu cầu là tốt nhất) (dữ liệu cần sửa nhiều nên ưu tiên tốc độ xử lý và đã có sẵn nên có thể bỏ qua bước sửa lúc nhập sai):
- Macro xoa_chuoi tại bài 198 đã giải quyết xong vấn đề về giá trị
- Cần tiếp macro giải quyết bài toán chính tả: không tồn tại 2 dấu Tab trong Cells thuộc cột E chứa giá trị mà cột D tương ứng rỗng.
- File em đã up ở bài 201
Giúp em, đang cần gấp
Mình cũng đã cố hết khả năng để giúp cho bạn nhưng với cách bạn mô tả yêu cầu thì mình xin chào thua. Hãy kiên nhẫn đợi thành viên khác giúp nhé.
 
Upvote 0
Rất cảm ơn các bác Hoàng Trọng Nghĩa, quanghai1969,siwtom đã nhiệt tình giúp đỡ và chỉ bảo cho em.
Hiện tại em có thể sử dụng code ở bài 198 để sử dụng trong khi làm dự toán xây dựng do nhu cầu của em là tốc độ và dễ sử dụng (em không biết sử dụng hàm Private Sub nên các bác thông cảm cho).
Em chỉ thắc mắc về bài toán viết chính tả khi nhập dữ liệu (giống tác dụng của hàm Trim):
Giá trị cần thao tác tại cột E có giá trị, cột D tương ứng rỗng.
Có thể tạo macro: sau khi chạy macro thì chuyển E8 thành Trim(E8) (thao tác tất cả trong ô E8, nếu phải đặt ô phụ thì sẽ xoá đi sau khi macro chạy xong)
 
Upvote 0
Nhờ các bác xem giúp em code chèn nhiều dòng
Sub Themdong()
Dim tongdong, message, title, default
message = "Chuyen con tro len tren dong TONG CONG va nhap so dong muon them:"
title = "Them dong"
default = "10"
tongdong = InputBox(message, title, default)
If tongdong = "" Then
Exit Sub
End If
For sodong = 1 To tongdong
Selection.EntireRow.Insert
Next sodong
End Sub
Code xử lý chậm khi số dòng lớn, ví dụ như 2000 trở lên. Nhờ bác nào viết code tác dụng tương tự tối ưu tốc độ xử lý
 
Upvote 0
Rất cảm ơn các bác Hoàng Trọng Nghĩa, quanghai1969,siwtomđã nhiệt tình giúp đỡ và chỉ bảo cho em.
Hiện tại em có thể sử dụng code ở bài 198 để sử dụng trong khi làm dự toán xây dựng do nhu cầu của em là tốc độ và dễ sử dụng (em không biết sử dụng hàm Private Sub nên các bác thông cảm cho).
Em chỉ thắc mắc về bài toán viết chính tả khi nhập dữ liệu (giống tác dụng của hàm Trim):
Giá trị cần thao tác tại cột E có giá trị, cột D tương ứng rỗng.
Có thể tạo macro: sau khi chạy macro thì chuyển E8 thành Trim(E8) (thao tác tất cả trong ô E8, nếu phải đặt ô phụ thì sẽ xoá đi sau khi macro chạy xong)

Mượn lại code của QuangHai, tôi chỉ chỉnh một tí xíu, bạn xem có đúng ý bạn chưa?

Mã:
Sub xoa_chuoi1()
Dim i, kq()
kq = Range([E8], [E65536].End(3)).Offset(, -1).Resize(, 2).Value
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "=.*"
   For i = 1 To UBound(kq)
      If kq(i, 1) = "" Then
         If kq(i, 2) <> "" Then
            kq(i, 2) = .Replace([COLOR=#ff0000][B]WorksheetFunction.Trim([/B][/COLOR]kq(i, 2)[B][COLOR=#ff0000])[/COLOR][/B], "")
         End If
      End If
   Next
End With
[D8].Resize(i - 1, 2) = kq
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình cũng vừa mới tập tành VBA và có cái file nghich ngợm về Tổ tôm không biết cho vào chủ đề nào muốn hỏi các bro mấy vấn đề là:
1. Tại sao khi chạy Sub Chia_bai thì lúc đầu các quân bài hiện ra nhanh, sau đó lại chậm dần.
2. Có thể bỏ mấy Sheet trung gian và hiện thẳng quân bài vào Sheet hinh_anh_cac_bai như thế nào.
3. Có thể gọn các dòng sau các case thế nào, hoặc có cách gì gọn hơn được không.

Case "1sa"
Cells(row_to_check + 1, column_to_check).Select
Sheets("quan_bai").Select
ActiveSheet.Shapes.Range(Array("1sa")).Select
Selection.Copy
Sheets("hinh_anh_cac_bai").Select
ActiveSheet.Paste


File đính kèm View attachment VuiCungToTom.rar
Xin cảm ơn trước.
 
Lần chỉnh sửa cuối:
Upvote 0
Mượn lại code của QuangHai, tôi chỉ chỉnh một tí xíu, bạn xem có đúng ý bạn chưa?

Mã:
Sub xoa_chuoi1()
Dim i, kq()
kq = Range([E8], [E65536].End(3)).Offset(, -1).Resize(, 2).Value
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "=.*"
   For i = 1 To UBound(kq)
      If kq(i, 1) = "" Then
         If kq(i, 2) <> "" Then
            kq(i, 2) = .Replace([COLOR=#ff0000][B]WorksheetFunction.Trim([/B][/COLOR]kq(i, 2)[B][COLOR=#ff0000])[/COLOR][/B], "")
         End If
      End If
   Next
End With
[D8].Resize(i - 1, 2) = kq
End Sub
Bác xem giúp em cái file em gửi lên, chạy macro xong bị lỗi giá trị của ô E21, tăng gấp 1000 lần so với giá trị ban đầu.
Còn lại các dòng khác xử lý rất hay, đúng theo yêu cầu không tồn tại 2 dấu Tab liền kề nhau.
 

File đính kèm

  • dutoan2.xls
    31 KB · Đọc: 14
Upvote 0
Bác xem giúp em cái file em gửi lên, chạy macro xong bị lỗi giá trị của ô E21, tăng gấp 1000 lần so với giá trị ban đầu.
Còn lại các dòng khác xử lý rất hay, đúng theo yêu cầu không tồn tại 2 dấu Tab liền kề nhau.

Đọc xong chả hiểu cái gì là cái gì hết! Diễn giải trong Sheet càng khó hiểu hơn, lúc thì ô E21, khi thì ô E23 mà thực sự giá trị ban đầu nó thế nào? Và muốn nó thành như thế nào?
 
Upvote 0
Đọc xong chả hiểu cái gì là cái gì hết! Diễn giải trong Sheet càng khó hiểu hơn, lúc thì ô E21, khi thì ô E23 mà thực sự giá trị ban đầu nó thế nào? Và muốn nó thành như thế nào?
Diễn giải em ghi nhầm,đúng là ô 21.
Em đã tìm ra lỗi tăng gấp 1000 lần là do trong phần mềm aciit mặc định lại dấu "," và dấu "."
Macro của bác Hoàng Trọng Nghĩa ở bài 212 đã giải quyết triệt để 2 yêu cầu em cần. Macro này sẽ rất hữu ích cho ai sử dụng phần mềm dự toán aciitt trong xây dựng.
1 lần nữa cảm ơn các bác rất nhiều.
 
Upvote 0
Diễn giải em ghi nhầm,đúng là ô 21.
Em đã tìm ra lỗi tăng gấp 1000 lần là do trong phần mềm aciit mặc định lại dấu "," và dấu "."
Macro của bác Hoàng Trọng Nghĩa ở bài 212 đã giải quyết triệt để 2 yêu cầu em cần. Macro này sẽ rất hữu ích cho ai sử dụng phần mềm dự toán aciitt trong xây dựng.
1 lần nữa cảm ơn các bác rất nhiều.

Nói rõ hơn, cái Macro này là của quanghai1969 tôi chỉ sửa lại chút xíu thôi. Dù sao nó chạy hiệu quả là tốt rồi!
 
Upvote 0
Hỏi về cách viết code?

Xin chào Thầy Cô và Anh Chị trong GPE!
Em có 1 câu hỏi dưới đây mong mọi người tìm cách giúp Em với ạ!
Em hay viết code kiểu này:
HTML:
…
Sheets("$").Visible = 2
Sheets(1).Visible = 2
Range("F10:F361").AutoFilter Field:=1
Range("F11:F355"). EntireRow.Hidden = False
…
Và đôi khi Em cũng hay phải thêm sheet , xóa sheet và thay đổi tên sheet. Nên code lại phải chỉnh sửa lại.
Hoặc là khi insert dòng cột cũng phải sửa lại vùng v..v..Vì vậy em muốn hỏi có cách viết code nào khác để mỗi lần khi có sự thay đổi như vậy mình không phải thao tác trong cửa sổ lập trình nữa không ạ?
Vì file này nhiều người sử dụng nên Em mới hỏi cho vấn đề này ạ.
Em mới chỉ biết cái Range("F10:F361") này ta có thể đặt name là :kumi= '$'!$F$10:$F$361 chẳng hạn. Sau đó code sẽ viết thành:Range(kumi).
Nhưng còn cách viết code cho Sheets thì Em chịu thôi. Thầy Cô và Anh Chị xem có cách viết nào khác không giúp Em với ạ!
Trân thành cám ơn!
 
Upvote 0
Xin chào Thầy Cô và Anh Chị trong GPE!
Em có 1 câu hỏi dưới đây mong mọi người tìm cách giúp Em với ạ!
Em hay viết code kiểu này:
HTML:
…
Sheets("$").Visible = 2
Sheets(1).Visible = 2
Range("F10:F361").AutoFilter Field:=1
Range("F11:F355"). EntireRow.Hidden = False
…
Và đôi khi Em cũng hay phải thêm sheet , xóa sheet và thay đổi tên sheet. Nên code lại phải chỉnh sửa lại.
Hoặc là khi insert dòng cột cũng phải sửa lại vùng v..v..Vì vậy em muốn hỏi có cách viết code nào khác để mỗi lần khi có sự thay đổi như vậy mình không phải thao tác trong cửa sổ lập trình nữa không ạ?
Vì file này nhiều người sử dụng nên Em mới hỏi cho vấn đề này ạ.
Em mới chỉ biết cái Range("F10:F361") này ta có thể đặt name là :kumi= '$'!$F$10:$F$361 chẳng hạn. Sau đó code sẽ viết thành:Range(kumi).
Nhưng còn cách viết code cho Sheets thì Em chịu thôi. Thầy Cô và Anh Chị xem có cách viết nào khác không giúp Em với ạ!
Trân thành cám ơn!
Xóa sheet thì ăn nhậu gì được nữa?
Thay đổi tên sheet bạn lấy CodeName sheet thì code không thay đổi
VD: Sheet1.Range(..).. chứ khong phải là Sheets("Sheet1").Range(..)...
 
Upvote 0
Hỏi để hiểu thêm về vòng lặp và cấu trúc điều khiển If

Mình tập tành học VBA nhưng vì tự học nên có nhiều khi bí rị. Mình nhờ các bạn chỉ một chút để mình có thể áp dụng vào hiểu thêm về vòng lặp và cấu trúc điều khiển If. Ví dụ như nếu ô C4 là "Giỏi" thì ô D4 được gán giá trị "5", nếu là C4 là "Khá" thì D4 được gán "4" và cứ lặp như thế trong vùng C4:C8 để gán giá trị tương ứng cho D4:D8. Tương tự như vậy là dò tìm giá trị cho E4:E8 để gán giá trị cho F4:F8.
Cách thông thường là dùng hàm If hoặc dùng Vlookup. Nhưng mình muốn hiểu thêm về vòng lặp và cấu trúc điều khiển If trong VBA. Mong các bạn viết đoạn code mẫu để mình học thêm. Cám ơn rất nhiều.
 

File đính kèm

  • Gan_Gia_Tri.rar
    5.9 KB · Đọc: 21
Upvote 0
Web KT
Back
Top Bottom