Làm sao để insert dòng trong VBA nhỉ

ke_co_don

Thành viên mới
Tham gia ngày
30 Tháng bảy 2006
Bài viết
5
Được thích
0
Điểm
0
Tuổi
35
Tôi đang làm 1 file vBA trên excel, chủ yếu là record lại nhưng hoạt động mình đã làm. Tuy nhiên, tôi gặp phải một số vấn đề khó khăn sau

Thứ nhất: Tôi đặt lệnh đổi tên sheet, nếu như ô A1 của sheet2 = C thì sheet 1 đổi tên là C. Tương tự, đặt tên sheet1 theo ô A1 của sheet 2, tôi phải dùng hàm như thế nào nhỉ!

Thứ 2. Tôi muốn insert dòng. Ví dụ như sau. Tôi có 1 chuỗi dữ liệu từ cột C1-C10 của sheet 1; Dữ liệu lần lượt là 1, 1, 2, 2, 3, 4, blank, 5, 6, 6. Tôi muốn nếu như ô C2 = C1 thì nothing happen, nếu C2<>C1 thì insert một dòng giữa C2 và C1. Tương tự như vậy với các số còn lại. Blank cũng coi như là khác 4. Mọi người giúp giùm

Thứ 3: Tôi chưa biết cách sử dụng Dim, tôi chẳng hiểu gì về integer, boolean với string cả, chỉ nhớ mang máng ngày trước học Pascal thì có biết sơ sơ thôi! Do chập chững vào VBA nhờ cái tool Record Macro thôi! Thật sự rất mong mọi người giúp đỡ. Cám ơn nhiều!
 

nvson

Geotechnics
Thành viên danh dự
Tham gia ngày
20 Tháng chín 2006
Bài viết
794
Được thích
1,268
Điểm
860
Nơi ở
Thái Bình - Quảng Ninh
Thứ 3: Tôi chưa biết cách sử dụng Dim, tôi chẳng hiểu gì về integer, boolean với string cả, chỉ nhớ mang máng ngày trước học Pascal thì có biết sơ sơ thôi! Do chập chững vào VBA nhờ cái tool Record Macro thôi! Thật sự rất mong mọi người giúp đỡ. Cám ơn nhiều!
Biến:
Trong VB hay VBA nếu bạn đã đặt "Option Explicit" ở đầu (Module, Form....) tức là tất cả các biến có trong chương trình thì đều phải khai báo. Cách khai báo trong VB, VBA là dùng từ khoá Dim sau đó đến tên_biến, tiếp theo là từ khoá As và cuối cùng là kiểu của biến, nếu có nhiều biến thì được ngăn cách với nhau bởi dấu phẩy.
Cú pháp như sau:
Mã:
Dim <tên_biến> [As <kiểu dữ liệu>]
VD:
Dim i As Integer, j As Integer, col As Integer
Có nghĩa là ta khai báo 3 biến có tên là i, j và col có kiểu là Integer.

Kiểu dữ liệu:
Có rất nhiều kiểu dữ liệu: Kiểu số (Integer, Long, Double và Currency), kiểu Byte, kiểu String, Kiểu Booean, kiểu Date, kiểu Object, kiểu Variant...
Kiểu Byte nhận giá trị trong khoảng 0 - 255
Kiểu String: kiểu chuỗi ký tự
Kiểu Date: kiểu ngày tháng
Kiểu Boolean: Kiểu này chỉ nhận 2 giá trị True (1) hoặc False (0).
Kiểu Integer: Kiểu số nhận giá trị trong khoảng từ -32767 đến 32767
.....

Thứ 2. Tôi muốn insert dòng. Ví dụ như sau. Tôi có 1 chuỗi dữ liệu từ cột C1-C10 của sheet 1; Dữ liệu lần lượt là 1, 1, 2, 2, 3, 4, blank, 5, 6, 6. Tôi muốn nếu như ô C2 = C1 thì nothing happen, nếu C2<>C1 thì insert một dòng giữa C2 và C1. Tương tự như vậy với các số còn lại. Blank cũng coi như là khác 4. Mọi người giúp giùm
Trong cửa sổ VBA nhấn Insert/ Module, rồi thêm đoạn code sau:
Mã:
Option Explicit
Public Sub Insert_Row()
On Error GoTo thoat
Dim rngData As Range
Dim rngThaydoi As Range
Dim i As Integer, j As Integer
Set rngData = Selection
i = 2
For j = 2 To rngData.Rows.Count * 2
    If rngData.Cells(i, 1) <> rngData.Cells(i - 1, 1) And Not IsEmpty(rngData.Cells(i, 1)) Then
        rngData.Cells(i, 1).Select
        Selection.EntireRow.Insert
        i = i + 2
    Else
        i = i + 1
    End If
    
Next j
rngData.Cells(1, 1).Select
thoat:
End Sub
Cách sử dụng:
Chọn vùng, sau đó chạy Macro trên.
 
Lần chỉnh sửa cuối:

nhkimhanh

Thành viên mới
Tham gia ngày
21 Tháng năm 2018
Bài viết
2
Được thích
0
Điểm
163
Có ai giúp em vấn đề này với ạ, em đã thử search mà chưa thấy ai giải code này :(
Em muốn insert dòng trống theo số cho sẵn ở 1 cột, vd số 2 thì insert 2 dòng, số 5 thì insert 5 dòng.... chỉ cần dòng trống không cần công thức, em có đính kèm file.
Em cám ơn ạ.
 

File đính kèm

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
6,281
Được thích
10,349
Điểm
1,860

phuocam

Thành viên mới
Tham gia ngày
16 Tháng năm 2013
Bài viết
2,330
Được thích
3,069
Điểm
560
Dùng thử:
Mã:
Public Sub InsertRow()
Dim i As Long
Dim lastRow As Long
lastRow = Range("D" & Rows.Count).End(xlUp).Row
For i = lastRow To 2 Step -1
    If Cells(i, 4).Value > 1 Then
    Rows(i).Offset(1).Resize(Cells(i, 4).Value).Insert
    End If
Next i
End Sub
 

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,253
Được thích
16,015
Điểm
1,860
Tuổi
60
Nơi ở
An Giang
Có ai giúp em vấn đề này với ạ, em đã thử search mà chưa thấy ai giải code này :(
Em muốn insert dòng trống theo số cho sẵn ở 1 cột, vd số 2 thì insert 2 dòng, số 5 thì insert 5 dòng.... chỉ cần dòng trống không cần công thức, em có đính kèm file.
Em cám ơn ạ.
Muốn gán kết quả vào đâu thì bạn tùy chỉnh.
PHP:
Public Sub GPE()
Dim sArr(), dArr(1 To 100000, 1 To 4), I As Long, J As Long, K As Long, N As Long, R As Long
sArr = Range("A2", Range("A100000").End(xlUp)).Resize(, 4).Value
R = UBound(sArr)
For I = 1 To R
    If sArr(I, 4) <> Space(0) Then
        N = sArr(I, 4)
        K = K + 1
        For J = 1 To 4
            dArr(K, J) = sArr(I, J)
        Next J
        If N > 0 Then K = K + N
    End If
Next I
Range("A2").Resize(K, 4) = dArr
End Sub
 

nhkimhanh

Thành viên mới
Tham gia ngày
21 Tháng năm 2018
Bài viết
2
Được thích
0
Điểm
163
Dùng thử:
Mã:
Public Sub InsertRow()
Dim i As Long
Dim lastRow As Long
lastRow = Range("D" & Rows.Count).End(xlUp).Row
For i = lastRow To 2 Step -1
    If Cells(i, 4).Value > 1 Then
    Rows(i).Offset(1).Resize(Cells(i, 4).Value).Insert
    End If
Next i
End Sub
Em cám ơn nhiều lắm ạ
Bài đã được tự động gộp:

Em cám ơn ạ.
Bài đã được tự động gộp:

Muốn gán kết quả vào đâu thì bạn tùy chỉnh.
PHP:
Public Sub GPE()
Dim sArr(), dArr(1 To 100000, 1 To 4), I As Long, J As Long, K As Long, N As Long, R As Long
sArr = Range("A2", Range("A100000").End(xlUp)).Resize(, 4).Value
R = UBound(sArr)
For I = 1 To R
    If sArr(I, 4) <> Space(0) Then
        N = sArr(I, 4)
        K = K + 1
        For J = 1 To 4
            dArr(K, J) = sArr(I, J)
        Next J
        If N > 0 Then K = K + N
    End If
Next I
Range("A2").Resize(K, 4) = dArr
End Sub
Em cám ơn nhiều lắm ạ :)
 
Top Bottom