Xin giúp đỡ về cách điền thông tin hàng loạt

Liên hệ QC

tungquan0075

Thành viên mới
Tham gia
11/5/14
Bài viết
4
Được thích
0
Mình đang muốn làm như sau trong excel nhưng không biết làm như thế nào.
Các bạn xem và chỉ mình cách làm với.
Cụ thể như sau:
Mình có 1 đoạn văn bản là "Tôi yêu excel" nằm trong ô A1.
H mình muốn khi mình điền 1 số n vào ô B1 thì đoạn văn bản trong ô A1 sẽ được gán vào từ dòng C1 đến C(n).
Ví dụ: mình điền số 3 thì sẽ gán đoạn văn bản "Tôi yêu excel" vào 3 dòng c1, c2, c3 như bảng bên dưới.



Mong nhận được sự hỗ trợ từ các bạn và anh, chị.
Thanks!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mình đang muốn làm như sau trong excel nhưng không biết làm như thế nào.
Các bạn xem và chỉ mình cách làm với.
Cụ thể như sau:
Mình có 1 đoạn văn bản là "Tôi yêu excel" nằm trong ô A1.
H mình muốn khi mình điền 1 số n vào ô B1 thì đoạn văn bản trong ô A1 sẽ được gán vào từ dòng C1 đến C(n).
Ví dụ: mình điền số 3 thì sẽ gán đoạn văn bản "Tôi yêu excel" vào 3 dòng c1, c2, c3 như bảng bên dưới.

Mong nhận được sự hỗ trợ từ các bạn và anh, chị.
Thanks!

Mã:
C1=IF(ROW()<=$B$1,$A$1,"")

kéo bí tỉ,để đó
 
Mình đang muốn làm như sau trong excel nhưng không biết làm như thế nào.
Các bạn xem và chỉ mình cách làm với.
....
Mong nhận được sự hỗ trợ từ các bạn và anh, chị.
Thanks!
Bạn xem File. Chỉ cần nhập số vào ô B1 sau đó ấn phím Enter là được!
P/S: Nhớ Ennable Macro trước khi chạy File nhé!
 

File đính kèm

  • chuan.xls
    24 KB · Đọc: 29
Lần chỉnh sửa cuối:
Bạn xem File. Chỉ cần nhập số vào ô B1 sau đó ấn phím Enter là được!
P/S: Nhớ Ennable Macro trước khi chạy File nhé!
Bạn thử xóa cột C rồi nhấn bất kỳ chỗ nào trên sheet. Nhấn vào ô nào trống code cũng phải chạy là sao?
 
Bạn thử xóa cột C rồi nhấn bất kỳ chỗ nào trên sheet. Nhấn vào ô nào trống code cũng phải chạy là sao?
Em mới học VBA thầy ạ, với lại học chắp vá nên còn nhiều thiếu sót. Mong thầy chỉ bảo để code của em được hoàn thiện hơn ạ!
 
Thế bạn hiểu thế nào là selection change? Lúc này cần sự kiện gì?
 
Thế bạn hiểu thế nào là selection change? Lúc này cần sự kiện gì?
Lúc đầu em dùng sự kiện Worksheet_Change nhưng code không chạy. Em không biết mình bị lỗi ở đâu ạ???

Thế bạn hiểu thế nào là selection change? Lúc này cần sự kiện gì?
Em đã tìm ra nguyên nhân tại sao sự kiện Worksheet_change lúc trước của em tại sao không chạy. Em đã sửa lại như sau:
Public Sub Worksheet_Change(ByVal target As Range)
Dim i As Long
On Error Resume Next
With Sheet1
If target.Address = "$B$1" Then
.Range("C1:C" & .Range("C65500").End(xlUp).Row).ClearContents
i = .Range("B1").Value
.Range("C1:C" & i) = Range("A1")
End If
End With
End Sub
Cảm ơn thầy! Nhờ thầy em đã phân biệt được 2 sự kiện này ạ!
 

File đính kèm

  • chuan1.rar
    7 KB · Đọc: 30
Chỉnh sửa lần cuối bởi điều hành viên:
Em đã tìm ra nguyên nhân tại sao sự kiện Worksheet_change lúc trước của em tại sao không chạy. Em đã sửa lại như sau:

Cảm ơn thầy! Nhờ thầy em đã phân biệt được 2 sự kiện này ạ!
Quá tuyệt vời. Tôi cũng đang có công việc cần áp dụng cách này. Cảm ơn bạn!
 
Lúc đầu em dùng sự kiện Worksheet_Change nhưng code không chạy. Em không biết mình bị lỗi ở đâu ạ???


Em đã tìm ra nguyên nhân tại sao sự kiện Worksheet_change lúc trước của em tại sao không chạy. Em đã sửa lại như sau:

Cảm ơn thầy! Nhờ thầy em đã phân biệt được 2 sự kiện này ạ!
Mình muốn mở rộng bài toán ra thành:
khi ta nhập 1 số m lên ô B(n) thì nội dung trong ô A(n) sẽ được copy thành thêm m lần. Lần lượt từ ô a(n+1) đến a(n + m).
Thì làm như thế nào ạ.
Thanks!
 
Lần chỉnh sửa cuối:
Mình muốn mở rộng bài toán ra thành:
khi ta nhập 1 số m lên ô B(n) thì nội dung trong ô A(n) sẽ được copy thành thêm m lần. Lần lượt từ ô a(n+1) đến a(n + m).
Thì làm như thế nào ạ.
Thanks!
+ Tạm thời thế này đã. Chức năng tự động xóa dữ liệu cũ ở cột A khi nhập số m vào cột B tôi chưa nghĩ ra. Bạn dùng tạm, khi nào có thời gian tôi sẽ giúp.
+ Mong các Thầy và các bạn có thể sửa thêm code của em để hoàn thiện hơn.
 

File đính kèm

  • chuan2.rar
    7.3 KB · Đọc: 6
Lần chỉnh sửa cuối:
Bạn tải File này nhé! Thêm phần hướng dẫn sử dụng.
 

File đính kèm

  • chuan2.rar
    7.7 KB · Đọc: 8
Đã bổ sung thêm đoạn code xóa tự động dữ liệu cũ ở cột A khi nhập số m mới vào cột B. Bạn xem thử có gì hồi âm lại cho tôi.
 

File đính kèm

  • chuan2_3.rar
    7.4 KB · Đọc: 17
Mình muốn mở rộng bài toán ra thành:
khi ta nhập 1 số m lên ô B(n) thì nội dung trong ô A(n) sẽ được copy thành thêm m lần. Lần lượt từ ô a(n+1) đến a(n + m).
Thì làm như thế nào ạ.
Thanks!
Tham khảo:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, [B1:B65535]) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Offset(, -1)) Then
            Target = Empty
        ElseIf Val(Target) > 0 Then
            If Target > Target.End(4).Row - Target.Row Then
                Target.Offset(1).Resize(Target + Target.Row - Target.End(4).Row).EntireRow.Insert
                Target.Offset(, 1).Resize(Target) = Target.Offset(, -1)
            ElseIf Target < Target.End(4).Row - Target.Row And Target.End(4).Row < 65535 Then
                Target.Offset(1).Resize(Target.End(4).Row - Target.Row - Target).EntireRow.Delete
                Target.Offset(, 1).Resize(Target) = Target.Offset(, -1)
            Else
                Target.Offset(, 1).Resize(Target) = Target.Offset(, -1)
            End If
        End If
        Application.EnableEvents = True
    End If
End Sub
 

File đính kèm

  • chuan1.xls
    40 KB · Đọc: 4
Tham khảo:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, [B1:B65535]) Is Nothing Then
        Application.EnableEvents = False
        If IsEmpty(Target.Offset(, -1)) Then
            Target = Empty
        ElseIf Val(Target) > 0 Then
            If Target > Target.End(4).Row - Target.Row Then
                Target.Offset(1).Resize(Target + Target.Row - Target.End(4).Row).EntireRow.Insert
                Target.Offset(, 1).Resize(Target) = Target.Offset(, -1)
            ElseIf Target < Target.End(4).Row - Target.Row And Target.End(4).Row < 65535 Then
                Target.Offset(1).Resize(Target.End(4).Row - Target.Row - Target).EntireRow.Delete
                Target.Offset(, 1).Resize(Target) = Target.Offset(, -1)
            Else
                Target.Offset(, 1).Resize(Target) = Target.Offset(, -1)
            End If
        End If
        Application.EnableEvents = True
    End If
End Sub
Bạn xem lại, tôi thấy tác giả có yêu cầu:
quote_icon.png
Nguyên văn bởi tungquan0075

Mình muốn mở rộng bài toán ra thành:
khi ta nhập 1 số m lên ô B(n) thì nội dung trong ô A(n) sẽ được copy thành thêm m lần. Lần lượt từ ô a(n+1) đến a(n + m).
Thì làm như thế nào ạ.
Thanks!
Không biết tác giả viết nhầm hay bạn hiểu nhầm.
 
Bạn xem lại, tôi thấy tác giả có yêu cầu:
Không biết tác giả viết nhầm hay bạn hiểu nhầm.
Tôi không đọc kỹ từ đầu mà lấy file bài #11 của bạn để viết tiếp. Cũng là 1 giải pháp, xoay quanh Target, chỉ sử dụng các phương thức Offset, Resize.
 
Tôi không đọc kỹ từ đầu mà lấy file bài #11 của bạn để viết tiếp. Cũng là 1 giải pháp, xoay quanh Target, chỉ sử dụng các phương thức Offset, Resize.
Nếu có thể hôm nào bạn chỉ thêm cho tôi 1 chút về thuộc tính Resize nhé!
 
Lần chỉnh sửa cuối:
Đã bổ sung thêm đoạn code xóa tự động dữ liệu cũ ở cột A khi nhập số m mới vào cột B. Bạn xem thử có gì hồi âm lại cho tôi.
chuot0106 đã viết:
Không biết tác giả viết nhầm hay bạn hiểu nhầm.

Nguyên văn câu hỏi là:
Mình muốn mở rộng bài toán ra thành:
khi ta nhập 1 số m lên ô B(n) thì nội dung trong ô A(n) sẽ được copy thành thêm m lần. Lần lượt từ ô a(n+1) đến a(n + m).

Bạn cũng nhầm nốt. Người ta muốn điền vào 1 ô bất kỳ (Bn) chứ không phải B7 (với 7 đọc từ B1) thì code sẽ chạy tương ứng. Nếu gõ 10 vào B12, yêu cầu sẽ là điền từ B13 đến B23 giá trị của ô A12. Nếu gõ 8 vào ô B15, thì sẽ điền giá trị của A15 vào A16:A23, ...


Còn code của bạn: Chỉ gõ vào ô B7 code mới chạy. Đó là nếu viết đúng. Còn bạn viết sai nên: B7 của bạn đang = 6, gõ 6 vào bất kỳ ô nào trên bảng tính, code cũng chạy. bạn thử xóa A8 trở xuống rồi gõ 6 vào ô bất kỳ sẽ thấy.

Code bài 7 tôi thấy bạn sử dụng Address nên nghĩ rằng bạn đã hiểu, rốt cuộc tới bài này lỗi cũ lập lại.
 
Nguyên văn câu hỏi là:
Mình muốn mở rộng bài toán ra thành:
khi ta nhập 1 số m lên ô B(n) thì nội dung trong ô A(n) sẽ được copy thành thêm m lần. Lần lượt từ ô a(n+1) đến a(n + m).

Bạn cũng nhầm nốt. Người ta muốn điền vào 1 ô bất kỳ (Bn) chứ không phải B7 (với 7 đọc từ B1) thì code sẽ chạy tương ứng. Nếu gõ 10 vào B12, yêu cầu sẽ là điền từ B13 đến B23 giá trị của ô A12. Nếu gõ 8 vào ô B15, thì sẽ điền giá trị của A15 vào A16:A23, ...


Còn code của bạn: Chỉ gõ vào ô B7 code mới chạy. Đó là nếu viết đúng. Còn bạn viết sai nên: B7 của bạn đang = 6, gõ 6 vào bất kỳ ô nào trên bảng tính, code cũng chạy. bạn thử xóa A8 trở xuống rồi gõ 6 vào ô bất kỳ sẽ thấy.

Code bài 7 tôi thấy bạn sử dụng Address nên nghĩ rằng bạn đã hiểu, rốt cuộc tới bài này lỗi cũ lập lại.
Thực sự với yêu cầu thêm của tác giả em thấy hơi bí về thuật toán. Mong thầy giúp đỡ để code được hoàn thiện ạ. Em chân thành cảm ơn thầy.
 
Web KT

Bài viết mới nhất

Back
Top Bottom