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

Liên hệ QC

ke_co_don

Thành viên mới
Tham gia
30/7/06
Bài viết
5
Được thích
0
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!
 
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:
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

  • VD chèn thêm cột (1).xlsx
    9.6 KB · Đọc: 43
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
 
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
 
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 ạ :)
 
Có ai giúp em vấn đề này với ạ, em đã thử search mà không tháy có code
Em muốn insert dòng trống theo số cho sẵn ở 1 cột Q'TY, vd số 2 thì insert 2 dòng, số 5 thì insert 5 dòng.... chỉ cần dòng trống hoặc có dữ liệu hàng , em có đính kèm file.
Em cám ơn ạ.
 

File đính kèm

  • PALU3-TAPH#1-DUCT-PL6-1B.xlsx
    14 KB · Đọc: 6
@Tác gia #8:

PHP:
Sub ThemDongTheoSoDinhSan()
' Khai Báo Các Biên Xài Trong Macro '
 Dim Rws As Long, J As Long, W As Long, DgThem As Integer, Col As Integer, Cot As Integer
 Dim WF As Object
 
 Rws = Sheet1.UsedRange.Rows.Count
 Cot = Sheet1.[A3].End(xlToRight).Column
 Set WF = Application.WorksheetFunction
 DgThem = WF.Sum([G3].Resize(Rws))
 ReDim Arr(1 To (Rws + DgThem + 9), 1 To Cot)
 For J = 4 To Rws
    W = W + 1:                  Arr(W, 1) = W
    For Col = 2 To Cot
        Arr(W, Col) = Cells(J, Col).Value
    Next Col
    If Cells(J, "G").Value > 0 Then _
        W = W + Cells(J, "G").Value
 Next J
 Sheet2.[A4].Resize(W, Cot).Value = Arr()
End Sub
 
Có ai giúp em vấn đề này với ạ, em đã thử search mà không tháy có code
Em muốn insert dòng trống theo số cho sẵn ở 1 cột Q'TY, vd số 2 thì insert 2 dòng, số 5 thì insert 5 dòng.... chỉ cần dòng trống hoặc có dữ liệu hàng , em có đính kèm file.
Em cám ơn ạ.
Về học lại cách "search" đi. Trước mắt là trình độ "search" của bạn quá tệ.
Code "insert dòng trống theo số cho sẵn" ở đây hằng hà sa số.
Có thể nói là yêu cầu thường xuyên nhất ở GPE.
 
Có ai giúp em vấn đề này với ạ, em đã thử search mà không tháy có code
Em muốn insert dòng trống theo số cho sẵn ở 1 cột Q'TY, vd số 2 thì insert 2 dòng, số 5 thì insert 5 dòng.... chỉ cần dòng trống hoặc có dữ liệu hàng , em có đính kèm file.
Em cám ơn ạ.
Thử tham khảo thêm code này xem sao:
Mã:
Option Explicit

Sub ThemDong()
Dim i&, j&, Lr1&, Lr2&
With Sheet1
i = 3
    Do
        i = i + 1
        Lr1 = .Cells(100000, "G").End(xlUp).Row
        For i = i To Lr1
            If .Range("G" & i) <> Empty Then
                .Range("G" & i + 1, "G" & .Range("G" & i) + i).EntireRow.Insert
                Exit For
            End If
        Next i
        Lr2 = .Cells(100000, "G").End(xlUp).Row
        i = i + .Range("G" & i)
    Loop While Lr1 < Lr2
End With
End Sub
Làm xong mới trông thấy bài của anh SA_DQ, Thôi thì cứ đăng lên vậy.
 
@Tác gia #8:

PHP:
Sub ThemDongTheoSoDinhSan()
' Khai Báo Các Biên Xài Trong Macro '
 Dim Rws As Long, J As Long, W As Long, DgThem As Integer, Col As Integer, Cot As Integer
 Dim WF As Object
 
 Rws = Sheet1.UsedRange.Rows.Count
 Cot = Sheet1.[A3].End(xlToRight).Column
 Set WF = Application.WorksheetFunction
 DgThem = WF.Sum([G3].Resize(Rws))
 ReDim Arr(1 To (Rws + DgThem + 9), 1 To Cot)
 For J = 4 To Rws
    W = W + 1:                  Arr(W, 1) = W
    For Col = 2 To Cot
        Arr(W, Col) = Cells(J, Col).Value
    Next Col
    If Cells(J, "G").Value > 0 Then _
        W = W + Cells(J, "G").Value
 Next J
 Sheet2.[A4].Resize(W, Cot).Value = Arr()
End Sub
cảm ơn anh nhiều .
 
Insert dòng để tạo danh sách merge ?
Nếu đúng thì tạo luôn vào sheet khác
Trước đây một cô giáo có nhờ mình làm chuyện tương tự,
Up lên cho ai có nhu cầu thì tham khảo...
 

File đính kèm

  • PALU3-TAPH#1-DUCT-PL6-1B (222).xlsm
    28.9 KB · Đọc: 8
Web KT
Back
Top Bottom