Hỏi nhanh - Đáp nhanh về macro (dành cho các thành viên mới học lập trình)

Liên hệ QC

tuananhya2

Thành viên mới
Tham gia
18/8/12
Bài viết
8
Được thích
0
Co ai chỉ dùm cách tạo pass marco với
 
Cảm ơn bạn nhưng cho mình hởi thêm là: Cái commandbutton khi insert lên trang tính thì làm sao để nó hoạt động?
Cái button khi insert lên trang tính mình đã biết cách dùng ghi macro và có thể xây dựng code. Lại giúp mình nữa nhé!
 
Upvote 0
Cảm ơn bạn nhưng cho mình hởi thêm là: Cái commandbutton khi insert lên trang tính thì làm sao để nó hoạt động?
Cái button khi insert lên trang tính mình đã biết cách dùng ghi macro và có thể xây dựng code. Lại giúp mình nữa nhé!

Khi bạn insert nó, hiện tại nó đang ở chế độ thiết kế (Design Mode), bạn double click vào nó, tự nhiên nó hiện trong Sheet Module dòng lệnh thủ tục cho sự kiện Click như sau:

Mã:
Private Sub CommandButton1_Click()


End Sub

Bạn chỉ việc thêm thủ tục của bạn vào giữa chúng, sau đó để sử dụng được thì bạn phải tắt Design Mode này mới bấm được nút lệnh.
 
Upvote 0
Cần giúp đỡ về VBA - Macro

Mình cần giúp đỡ viết code xóa những hàng không có dữ liệu như file đính kèm.
Xin các cao thủ giúp đỡ
 

File đính kèm

  • tien.xls
    34.5 KB · Đọc: 15
Lần chỉnh sửa cuối:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub xoa()
 Dim i As Long
 For i = [G65536].End(3).Row To 4 Step -1
    If Cells(i, 7).Value = "" Then
        Cells(i, 7).EntireRow.Delete
    End If
 Next
 End Sub
Làm một phát luôn, khỏi lặp nè bé Còi:
[GPECODE=vb]Sub Xoa_1()
Range([G4], [G65536].End(xlUp)).SpecialCells(4).EntireRow.Delete
End Sub[/GPECODE]
Nhưng mà cái tiêu đề topic này có vẻ không ổn lắm. Mong rằng các Smod và Mod phụ trách sửa giùm.
 
Upvote 0
Cho mình hỏi 1 chút cũng về hàm IF nhưng trong VBA:
Mã:
    If ((Target.Column = 28) Or (Target.Column = 31) Or (Target.Column = 36) Or _
        (Target.Column = 41) Or (Target.Column = 44) Or (Target.Column = 47) Or _
        (Target.Column = 52) Or (Target.Column = 57)) Then
tức là nếu cột đang chọn là cột 28 hay 31... thì làm gì đó!
Vậy có cách nào để hàm IF này ngắn hơn ko mong các bác chỉ giúp!
 
Lần chỉnh sửa cuối:
Upvote 0
cho em hỏi về muti listbox với ah
- Em muốn tạo ra môt form có 2 listbox gồm nhiều cột, listbox một chứa dữ liệu , khi ta chọn nhứng ITEM trong listbox 1 và bấm nút thì sẽ copy qua box2 (box2 cũng chứa nhiều cột).

em cũng mới biết VBA hơn một tháng nên mong các bác chỉ rõ cho ah em có đính kèm file vd
 

File đính kèm

  • list 1.rar
    13.9 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
nhờ các cao thủ viết hộ đoạn code

em đang vọc VBA,chưa biết j nhiều,tự làm 1 ví dụ nhưng chưa biết cách giải,mong các anh,chị giúp đỡ,gợi ý.em xin phép post file lên nhờ mọi người
 

File đính kèm

  • bt6 - offset.xls
    36.5 KB · Đọc: 6
Upvote 0
Các anh cho em hỏi.

Em cần khai báo mảng. Nhưng không biết trước kích thước của mảng. Em khai báo thế này thì nó báo lỗi ở cái "i". i là một biến được em tính toán trong code.
Mã:
Dim Matrix_1(i) as double
Vậy cho em hỏi làm thế nào để khai báo mảng này. Và gán giá trị cho mảng như thế nào.

Ví dụ em cần gán Matrix_1(i-1) thì gán thế nào,
 
Upvote 0
Các anh cho em hỏi.

Em cần khai báo mảng. Nhưng không biết trước kích thước của mảng. Em khai báo thế này thì nó báo lỗi ở cái "i". i là một biến được em tính toán trong code.
Mã:
Dim Matrix_1(i) as double
Vậy cho em hỏi làm thế nào để khai báo mảng này. Và gán giá trị cho mảng như thế nào.

Ví dụ em cần gán Matrix_1(i-1) thì gán thế nào,
Bạn chỉ cần
Dim Matrix_1() as double
Khi bạn đã xác định được số phần tử i rồi bạn dùng
Redim Matrix_1(i)
 
Upvote 0
Các anh cho em hỏi.

Em cần khai báo mảng. Nhưng không biết trước kích thước của mảng. Em khai báo thế này thì nó báo lỗi ở cái "i". i là một biến được em tính toán trong code.
Mã:
Dim Matrix_1(i) as double
Vậy cho em hỏi làm thế nào để khai báo mảng này. Và gán giá trị cho mảng như thế nào.

Ví dụ em cần gán Matrix_1(i-1) thì gán thế nào,


Khi khai báo mảng, nếu ta biết chắc chắn kích thước của nó bao nhiêu thì điền vào luôn, chẳng hạn:

Dim Matrix_1(0 to 9) as double

Lưu ý: Ta phải đảm bảo mảng có bao nhiêu phần tử và chạy từ đâu đến đâu, viết như trên ta thấy được mảng có 10 phần tử, chạy từ 0 đến 9. Nếu ta viết:

Dim Matrix_1(9) as double, thì mảng vẫn chứa 10 phần tử, nhưng mặc định của nó là từ 0 đến 9.

Nhưng ta muốn phần tử đầu tiên, bắt đầu từ 1 thì ta làm như sau:

Dim Matrix_1(1 to 10) as double

---------------------------------------------------

Khi ta không chắc mảng có bao nhiêu phần tử thì bắt buộc ta phải ReDim, cách làm như sau:

Mã:
Sub test()
    Dim TestArray() As Double
    i = 20
    ReDim TestArray(1 To i) As Double
End Sub
 
Upvote 0
Khi khai báo mảng, nếu ta biết chắc chắn kích thước của nó bao nhiêu thì điền vào luôn, chẳng hạn:

Dim Matrix_1(0 to 9) as double

Lưu ý: Ta phải đảm bảo mảng có bao nhiêu phần tử và chạy từ đâu đến đâu, viết như trên ta thấy được mảng có 10 phần tử, chạy từ 0 đến 9. Nếu ta viết:

Dim Matrix_1(9) as double, thì mảng vẫn chứa 10 phần tử, nhưng mặc định của nó là từ 0 đến 9.

Nhưng ta muốn phần tử đầu tiên, bắt đầu từ 1 thì ta làm như sau:

Dim Matrix_1(1 to 10) as double

---------------------------------------------------

Khi ta không chắc mảng có bao nhiêu phần tử thì bắt buộc ta phải ReDim, cách làm như sau:

Mã:
Sub test()
    Dim TestArray() As Double
    i = 20
    ReDim TestArray(1 To i) As Double
End Sub

Cái này em hiểu rồi nhưng còn vấn đề nữa là khi em gán giá trị ví dụ như:

Matrix_1(i) = 120

thì không được. Vậy khi muốn gán giá trị mà chưa biết trước phần tử thì phải làm thế nào
 
Upvote 0
Cái này em hiểu rồi nhưng còn vấn đề nữa là khi em gán giá trị ví dụ như:

Matrix_1(i) = 120

thì không được. Vậy khi muốn gán giá trị mà chưa biết trước phần tử thì phải làm thế nào

Như vầy nha, bạn có Sheet1, tại cột A, từ A1 đến A5 bạn gõ lần lượt từ 1 đến 5 (thử nghiệm nên cho vài phần tử thôi hen).

Và code của bạn sẽ như sau:

Mã:
Sub Test()

    Dim MyRange As Range, MyArray() As Double, _
        EndRow As Long, RowsCount As Long, i As Long
    
[COLOR=#0000ff]    ''Xac dinh so hang cuoi cung co du lieu cua cot A:[/COLOR]
    EndRow = Sheet1.Range("A65536").End(xlUp).Row
    
[COLOR=#0000ff]    ''Dat bien Range cho vung:[/COLOR]
    Set MyRange = Sheet1.Range("A1:A" & EndRow)
    
[COLOR=#0000ff]    ''Xac dinh tong so hang cua vung:[/COLOR]
    RowsCount = MyRange.Rows.Count
    
[COLOR=#0000ff]    ''Dat lai bien cho Array:[/COLOR]
    ReDim MyArray(1 To RowsCount) As Double
    
[COLOR=#0000ff]    ''Gan gia tri cho tung phan tu cua mang:[/COLOR]
    For i = 1 To RowsCount
[COLOR=#ff0000]        MyArray(i) = MyRange(i)[/COLOR]
[COLOR=#0000ff]        ''Xem ket qua:[/COLOR]
        MsgBox MyArray(i)
    Next
    
End Sub

Tôi nghĩ sau khi xem code và làm thực tế bạn sẽ hiểu cách gán giá trị cho từng phần tử trong mảng.
 
Upvote 0
Như vầy nha, bạn có Sheet1, tại cột A, từ A1 đến A5 bạn gõ lần lượt từ 1 đến 5 (thử nghiệm nên cho vài phần tử thôi hen).

Và code của bạn sẽ như sau:

Mã:
Sub Test()

    Dim MyRange As Range, MyArray() As Double, _
        EndRow As Long, RowsCount As Long, i As Long
    
[COLOR=#0000ff]    ''Xac dinh so hang cuoi cung co du lieu cua cot A:[/COLOR]
    EndRow = Sheet1.Range("A65536").End(xlUp).Row
    
[COLOR=#0000ff]    ''Dat bien Range cho vung:[/COLOR]
    Set MyRange = Sheet1.Range("A1:A" & EndRow)
    
[COLOR=#0000ff]    ''Xac dinh tong so hang cua vung:[/COLOR]
    RowsCount = MyRange.Rows.Count
    
[COLOR=#0000ff]    ''Dat lai bien cho Array:[/COLOR]
    ReDim MyArray(1 To RowsCount) As Double
    
[COLOR=#0000ff]    ''Gan gia tri cho tung phan tu cua mang:[/COLOR]
    For i = 1 To RowsCount
[COLOR=#ff0000]        MyArray(i) = MyRange(i)[/COLOR]
[COLOR=#0000ff]        ''Xem ket qua:[/COLOR]
        MsgBox MyArray(i)
    Next
    
End Sub

Tôi nghĩ sau khi xem code và làm thực tế bạn sẽ hiểu cách gán giá trị cho từng phần tử trong mảng.

Cảm ơn anh. Em hiểu rồi
 
Upvote 0
các anh chị dịch hộ em đoạn code sau có ý nghĩa như nào với :

Do Until Selection.Offset(0, 2) = ""
Set X = Selection
Set sRng = Rng.Find(X, , xlFormulas, xlWhole)
Selection.Offset(1, 0).Select
'If sRng Is Nothing Or sRng(2, 2) = "" Then
'Selection.Offset(-1, 0).Font.ColorIndex = 3
'Else
'If sRng(3, 2) = "" Then sRng(2, 2).EntireRow.Copy
'If sRng(3, 2) <> "" Then Range(sRng(2, 2), sRng(2, 2).End(xlDown)).EntireRow.Copy
'Selection.Insert Shift:=xlDown
'Selection.End(xlDown).Select
'End If
thank!
 
Upvote 0
các anh chị dịch hộ em đoạn code sau có ý nghĩa như nào với :

Do Until Selection.Offset(0, 2) = ""
Set X = Selection
Set sRng = Rng.Find(X, , xlFormulas, xlWhole)
Selection.Offset(1, 0).Select
'If sRng Is Nothing Or sRng(2, 2) = "" Then
'Selection.Offset(-1, 0).Font.ColorIndex = 3
'Else
'If sRng(3, 2) = "" Then sRng(2, 2).EntireRow.Copy
'If sRng(3, 2) <> "" Then Range(sRng(2, 2), sRng(2, 2).End(xlDown)).EntireRow.Copy
'Selection.Insert Shift:=xlDown
'Selection.End(xlDown).Select
'End If
thank!
Cả 1 trời kiến thức bên trong mấy dòng lệnh sao mà dịch ra hết được.
Trước tiên bạn phải hiểu về vòng lặp Do ... Loop
Tham khảo mấy cái cơ bản này hiểu rồi mới mổ xẻ thêm được
PHP:
Sub Do_Example()
Dim m As Long
Do
   m = m + 1
   MsgBox m
   If m > 10 Then Exit Do
Loop
End Sub
Sub Do_While_Loop_Example()
Dim i As Long
i = 1
Do While i <= 10
   Cells(i, 1) = i
   i = i + 1
   MsgBox i
Loop
End Sub
Sub Do_Loop_While_Example()
Dim i As Long
i = 1
Do
   Cells(i, 3) = i
   i = i + 1
   MsgBox i
Loop While i <= 10
End Sub
Sub Do_Until_Loop_Example()
Dim i As Long
i = 1
Do Until i = 10
   Cells(i, 5) = i
   i = i + 1
   MsgBox i
Loop
End Sub
 
Upvote 0
thế anh gt hộ em mấy dòng này
'If sRng(3, 2) = "" Then sRng(2, 2).EntireRow.Copy

'If sRng(3, 2) <> "" Then Range(sRng(2, 2), sRng(2, 2).End(xlDown)).EntireRow.Copy
'Selection.Insert Shift:=xlDown
'Selection.End(xlDown).Select
thế anh ơi, sRng(3,2) ở đây (3,2) là số dòng,và số cột của mảng ah
mới lại cấu trúc <>
"" Then Range(sRng(2, 2), sRng(2, 2).End(xlDown)).EntireRow.Copy nghĩa là j
end(xldown),end(xlup) là j
Selection.Insert Shift:=xlDown dòng này nghĩa là j
anh gt hộ em cái,

 
Upvote 0
thế anh gt hộ em mấy dòng này
'If sRng(3, 2) = "" Then sRng(2, 2).EntireRow.Copy

'If sRng(3, 2) <> "" Then Range(sRng(2, 2), sRng(2, 2).End(xlDown)).EntireRow.Copy
'Selection.Insert Shift:=xlDown
'Selection.End(xlDown).Select
thế anh ơi, sRng(3,2) ở đây (3,2) là số dòng,và số cột của mảng ah
mới lại cấu trúc <>
"" Then Range(sRng(2, 2), sRng(2, 2).End(xlDown)).EntireRow.Copy nghĩa là j
end(xldown),end(xlup) là j
Selection.Insert Shift:=xlDown dòng này nghĩa là j
anh gt hộ em cái,

Cứ chạy thử từng dòng lệnh và xem kết quả ở bảng tính thì biết dòng nào có ý nghĩa gì
Chẳng hạn Selection.Insert Shift:= XlDown là chèn thêm 1 vùng vào trước vùng được chọn và đẩy vùng chọn xuống dưới
Down là xuống, Up là lên trên... EntireRow là cả dòng, Copy là copy....
Hic chả biết giải thích thế nào nữa
 
Upvote 0
ok để em nghiên cứu thêm,đúng là hỏi ngu ngơ thì là làm khó các bác,em có một ví dụ nhỏ nhờ các bác viết code,bác rảnh thì nghiên cứu hộ em một tí,thanks bác nhiều nhé
p/s: sheet2 với yêu cầu là cứ gõ mã thì tên,đơn vị,giá sẽ tự động hiện (em đã làm)
sheet4 yêu cầu là khi chạy macro thì sẽ phân tích các mã ở sheet 2 cụ thể ra
cơ sở dữ liệu lấy ở sheet1,3,5
 

File đính kèm

  • bt6 - offset.xls
    47 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Chào các anh chị, em mới học về excel nên còn lơ ngơ lắm -+*/ hàng ngày em phải lấy 1 file từ hệ thống xuống, rồi cắt lọc file đấy ra để được một file hoàn chỉnh, rất là thủ công !$@!! mong anh chị chỉ bảo em xem có cách nào tự động được ko ...

Ở file đính kèm thì file "bat dau" là file cần xử lý để thành file "ket thuc"

Mong các anh chị giúp đỡ ...
 

File đính kèm

  • help.rar
    9.9 KB · Đọc: 7
Upvote 0
Web KT
Back
Top Bottom