Tìm vùng dữ liệu

Liên hệ QC

Yumi_Nagata

Thành viên mới
Tham gia
10/6/21
Bài viết
14
Được thích
19
Xin chào các anh chị
Em đang học về VBA và có 1 vấn đề xin được nhờ anh chị chỉ giúp
Tại ô F1 là ô điền số cần tìm
Vùng dữ liệu cần tìm là ở A1:B10
Khi F1 = 1 thì ô G1:H5 sẽ bằng A1:B5
Khi F1 = 2 thì ô G1:H5 sẽ bằng A6:B10
Em đã tự lập lên Code nhưng không hoạt động, ( không dùng Spiner )
Em mong được sự chỉ bảo của anh chị trong diễn đàn
Chúc mọi người buổi tối vui vẻ, em xin chân thành cảm ơn
Sub timn()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim c As Long
Set wb = ThisWorkbook
Set sh = wb.Sheets("Sheet2")
c = sh.Range("Sheet2!f2")
a = sh.Range("Sheet2!A1:B5")
b = sh.Range("Sheet2!A6:B10")

If c = 1 Then
sh.Range("Sheet2!G1:H5") = a
End If
If c = 2 Then
sh.Range("Sheet2!G1:H5") = b
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • VBA.xlsm
    14.3 KB · Đọc: 7
Lần chỉnh sửa cuối:
Mình mạnh dạng khuyên bạn: Do mới học như bạn nói thì nên viết 'Code' 1 cách hết sức tường minh:
a./ Các biến nên khai báo đầy đủ từ đầu & kiểu dữ liệu của nó nữa;
b.?
PHP:
a = sh.Range("Sheet2!A1:B5")
b = sh.Range("Sheet2!A6:B10")
Sau 2 câu lệnh này thì tham biến a & b sẽ chứa gì, theo bạn muốn?
. . . .

Thực tế chả có luật nào cấm bạn đi bộ với 1 chưn trên vĩa hè & 1 chưn dưới lòng đường;
Nhưng nhiều người sẽ cho rằng bạn đang từ khùng đến điên!
 
Mình mạnh dạng khuyên bạn: Do mới học như bạn nói thì nên viết 'Code' 1 cách hết sức tường minh:
a./ Các biến nên khai báo đầy đủ từ đầu & kiểu dữ liệu của nó nữa;
b.?
PHP:
a = sh.Range("Sheet2!A1:B5")
b = sh.Range("Sheet2!A6:B10")
Sau 2 câu lệnh này thì tham biến a & b sẽ chứa gì, theo bạn muốn?
. . . .

Thực tế chả có luật nào cấm bạn đi bộ với 1 chưn trên vĩa hè & 1 chưn dưới lòng đường;
Nhưng nhiều người sẽ cho rằng bạn đang từ khùng đến điên!
Dạ vâng. Em xin tiếp thu, rút kinh nghiệm
Em là tự học VBA qua Recode ( ghi VBA) chứ không qua trường lớp gì nên trình độ vẫn còn nhiều hạn chế. Chưa hiểu hết ý anh chỉ bảo ạ
Em chỉ muốn khi em ấn số 1 vào ô F1 thì ô G1:H5 sẽ bằng A1:B5, F1 = 2 thì ô G1:H5 sẽ bằng A6:B10
Em mong nhận được sự chỉ bảo của anh. Có gì em còn sai sót mong anh thông cảm ạ
 
Dạ vâng. Em xin tiếp thu, rút kinh nghiệm
Em là tự học VBA qua Recode ( ghi VBA) chứ không qua trường lớp gì nên trình độ vẫn còn nhiều hạn chế. Chưa hiểu hết ý anh chỉ bảo ạ
Em chỉ muốn khi em ấn số 1 vào ô F1 thì ô G1:H5 sẽ bằng A1:B5, F1 = 2 thì ô G1:H5 sẽ bằng A6:B10
Em mong nhận được sự chỉ bảo của anh. Có gì em còn sai sót mong anh thông cảm ạ
1) Bài của bạn chỉ có 1 và 2 ở cell F2 hay nhiều hơn?
2) Nếu F2 > 2 thì Vùng (G1:H5) luôn lấy 5 dòng dữ liệu ở Vùng dữ liệu bắt đầu ở [A1] ?
 
1) Bài của bạn chỉ có 1 và 2 ở cell F2 hay nhiều hơn?
2) Nếu F2 > 2 thì Vùng (G1:H5) luôn lấy 5 dòng dữ liệu ở Vùng dữ liệu bắt đầu ở [A1] ?
Dạ em chỉ cần 1 và 2 tại F1 thôi ạ. Nếu lớn hơn 2 thì sẽ báo lỗi ạ
Em đang học mò nên bài này chỉ lấy ra làm ví dụ để em hiểu bản chất. Chứ công việc của em không liên quan gì mấy tới bài này ạ
Kính mong được sự chỉ bảo của anh ạ
 
...
Em đã tự lập lên Code nhưng không hoạt động, ( không dùng Spiner )
...
Khi mới học code thì sẽ có rất nhiều lỗi.
Vì vậy, việc bạn cần học hơn hết hiện nay là diễn giải vấn đề và lỗi cho rõ. Điều này tốt cho bạn hơn người giúp bạn. Chịu khó diễn giải vấn đề thì bạn sẽ hiểu nó hơn, nhớ nó hơn, và nhiều khả năng áp dụng dụng về sau này.

Trước mắt, bạn cần nói rõ hơn "không hoạt động" nghĩa là gì?
1. nó nổ cái đùng, báo lỗi gì đó: ghi lại cái lỗi ấy, và chỗ báo lỗi.
2. nó chạy êm ái, nhưng không ra kết quả bạn muốn: cho biết bạn muốn gì và nó ra gì.
3. nó "có vẻ" như không làm gì hết: nói rõ là nó có vẻ như chạy xong nhưng chả thấy chuyện gì xảy ra.
 
Dạ em nghĩ là tại các anh đánh giá trình độ của em ở mức tiểu học nên sẽ khó hiểu ý em ạ. Trình em cao hơn thế cơ ạ, là ở mức lớp chồi 2 tuổi đấy ạ. :yu:
Ý tưởng của em rất đơn giản ạ. Khi em nhập số 1 hoặc 2 vào ô F1 thì ô G1:H5 sẽ tự động bằng A1:B5 hoặc A6:A10 mà không phải dùng Spiner. Đại loại như kiểu hàm vlookup ý ạ.
Em kính mong các anh chị có thể cho em xin vài phút để tải file excel của em về sẽ hiểu ngay ý tưởng ạ
Em mong nhận được sự giúp đỡ của mọi người. Em xin chân thành cảm ơn và chúc anh em trong GPE ngày mới an lành, vui vẻ
 
. . . . Khi em nhập số 1 hoặc 2 vào ô F1 thì ô G1:H5 sẽ tự động bằng A1:B5 hoặc A6:A10 mà không phải dùng Spiner. Đại loại như kiểu hàm vlookup ý ạ.
Vế 1 thì ổn: Nhập số 1 -> F1 thì ô G1:H5 sẽ tự động bằng A1:B5
Nhưng vế sau thì có vấn đề: vì A6:A10 chưa đủ để cho vô G1:H5;
Bạn nên tìm tiếp thêm 5 ô nữa để nhét vô những ô kết quả cho đợt II này đi nha!
 

File đính kèm

  • 611.jpg
    611.jpg
    68.2 KB · Đọc: 3
Lần chỉnh sửa cuối:
PHP:
Sub timn()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim c As Integer 'Dùng Integer là đủ'
    Set SH = ThisWorkbook.Sheets("Sheet2")
    With SH
    'Với With và End With thì giống như bạn gọi riêng SH lên bảng'
    'thay vì SH.Range("F2") thì mình có thể dùng .Range("F2")'
        c = .Range("F2").Value
            If c = 1 Then
                .Range("G1:H5") = .Range("A1:B5").Value
                'Ban có thể gán trực tiếp từ vùng A sang vùng B'
                'Việc nạp vào biến a hoặc b nếu bạn kg làm gì với tụi này thì kg cần thiết'
            ElseIf c = 2 Then
                'bạn dùng If và Else hoặc If và ElseIF thay vì If 2 lần'
                .Range("G1:H5") = .Range("A6:B10").Value
                'Chỗ này bạn sai vì cái kích thước mảng nó không bằng nhau, lấy thằng 4 gán vào thành 5 thì thiếu'
            End If
    End With
    'Bạn nên khai báo tường minh a,b,c là gì và nên đặt theo kiểu quy định toán học để sau này'
    'khi dòm lại code bạn đỡ bỡ ngỡ hơn'
    'Nếu biến là Array thì nên dùng Arr1, Arr2, Arr3'
    'các ký tự chữ thường thì dùng cho biến là số đơn, giá trị'
    'chuỗi thì dùng String thì đặt Str, Str1, Str2'
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Cái này mình sửa lại đúng code của bạn để bạn hiểu. Chứ trong này có nhiều cái, như phải xóa cái vùng kết quả, ... ghi xuống bằng kích thước mảng. Cái có để thẩm thấu từ từ.
 
Lần chỉnh sửa cuối:
PHP:
Sub timn()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim c As Integer 'Dùng Integer là đủ'
    Set SH = ThisWorkbook.Sheets("Sheet2")
    With SH
    'Với With và End With thì giống như bạn gọi riêng SH lên bảng'
    'thay vì SH.Range("F2") thì mình có thể dùng .Range("F2")'
        c = .Range("F2").Value
            If c = 1 Then
                .Range("G1:H5") = .Range("A1:B5").Value
                'Ban có thể gán trực tiếp từ vùng A sang vùng B'
                'Việc nạp vào biến a hoặc b nếu bạn kg làm gì với tụi này thì kg cần thiết'
            ElseIf c = 2 Then
                'bạn dùng If và Else hoặc If và ElseIF thay vì If 2 lần'
                .Range("G1:H5") = .Range("A6:B10").Value
                'Chỗ này bạn sai vì cái kích thước mảng nó không bằng nhau, lấy thằng 4 gán vào thành 5 thì thiếu'
            End If
    End With
    'Bạn nên khai báo tường minh a,b,c là gì và nên đặt theo kiểu quy định toán học để sau này'
    'khi dòm lại code bạn đỡ bỡ ngỡ hơn'
    'Nếu biến là Array thì nên dùng Arr1, Arr2, Arr3'
    'các ký tự chữ thường thì dùng cho biến là số đơn, giá trị'
    'chuỗi thì dùng String thì đặt Str, Str1, Str2'
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Cái này mình sửa lại đúng code của bạn để bạn hiểu. Chứ trong này có nhiều cái, như phải xóa cái vùng kết quả, ... ghi xuống bằng kích thước mảng. Cái có để thẩm thấu từ từ.
Em xin chân thành cảm ơn anh đã cho chữ. Code anh cho rất hay, gắn gọn và dễ hiểu.
Nhưng em xin anh giúp nốt em 1 chút ạ. Khi em nhập 1, 2 vào F2 thì G1:H5 không tự động nhẩy số, mà phải thông qua Run Macro.
Có thể em diễn giải khó hiểu. Em xin được đăng ảnh lên các anh chị xem giúp em ạ
 

File đính kèm

  • 16233786021876949261475555335279.jpg
    16233786021876949261475555335279.jpg
    48.5 KB · Đọc: 5
Em xin chân thành cảm ơn anh đã cho chữ. Code anh cho rất hay, gắn gọn và dễ hiểu.
Nhưng em xin anh giúp nốt em 1 chút ạ. Khi em nhập 1, 2 vào F2 thì G1:H5 không tự động nhẩy số, mà phải thông qua Run Macro.
Có thể em diễn giải khó hiểu. Em xin được đăng ảnh lên các anh chị xem giúp em ạ
Bạn dùng code sự kiện để chạy code, code trong sheet2
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$2" Then
    Application.EnableEvents = False
    Call timn
    Application.EnableEvents = True
End If
End Sub

.
 

File đính kèm

  • VBA.xlsm
    17.1 KB · Đọc: 6
PHP:
Sub timn()
...
.Range("G1:H5") = .Range("A6:B10").Value
  'Chỗ này bạn sai vì cái kích thước mảng nó không bằng nhau, lấy thằng 4 gán vào thành 5 thì thiếu'
...End Sub
Không có sai. Từ A6 đến B10 có 5 dòng.

Em xin chân thành cảm ơn anh đã cho chữ. Code anh cho rất hay, gắn gọn và dễ hiểu.
Nhưng em xin anh giúp nốt em 1 chút ạ. Khi em nhập 1, 2 vào F2 thì G1:H5 không tự động nhẩy số, mà phải thông qua Run Macro.
...
Bạn không có chịu đọc kỹ bài #6 . Còn nói chuyện "đánh giá trình độ" cái mốc xì gì. Trình độ thì không biết chứ thái độ học thì là zê rô.
Muốn làm gì thì phải nêu cho rõ ra. Cái từ "không hoạt động " của bài #1 nó không giúp người ta đoán được cái cụm từ chủ yếu là "tự động "

Điển hình là bạn vừa nêu rõ "không tự động nhảy số" ở bài #10 thì có bài #11 giải quyết liền.

Chú: spiner là cái gì? có dùng tiếng Tây thì cũng chịu khó viết cho đúng chính tả chứ.
 
Không có sai. Từ A6 đến B10 có 5 dòng.


Bạn không có chịu đọc kỹ bài #6 . Còn nói chuyện "đánh giá trình độ" cái mốc xì gì. Trình độ thì không biết chứ thái độ học thì là zê rô.
Muốn làm gì thì phải nêu cho rõ ra. Cái từ "không hoạt động " của bài #1 nó không giúp người ta đoán được cái cụm từ chủ yếu là "tự động "

Điển hình là bạn vừa nêu rõ "không tự động nhảy số" ở bài #10 thì có bài #11 giải quyết liền.

Chú: spiner là cái gì? có dùng tiếng Tây thì cũng chịu khó viết cho đúng chính tả chứ.
Lại bị thầy cốc đầu.
 
Bạn dùng code sự kiện để chạy code, code trong sheet2
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$2" Then
    Application.EnableEvents = False
    Call timn
    Application.EnableEvents = True
End If
End Sub

.
Em đã làm được anh ạ, em xin chân thành cảm ơn anh đã quan tâm và giúp đỡ.
Chúc anh có 1 ngày làm việc vui vẻ và hiệu quả ạ. :1a:
Bài đã được tự động gộp:

Không có sai. Từ A6 đến B10 có 5 dòng.


Bạn không có chịu đọc kỹ bài #6 . Còn nói chuyện "đánh giá trình độ" cái mốc xì gì. Trình độ thì không biết chứ thái độ học thì là zê rô.
Muốn làm gì thì phải nêu cho rõ ra. Cái từ "không hoạt động " của bài #1 nó không giúp người ta đoán được cái cụm từ chủ yếu là "tự động "

Điển hình là bạn vừa nêu rõ "không tự động nhảy số" ở bài #10 thì có bài #11 giải quyết liền.

Chú: spiner là cái gì? có dùng tiếng Tây thì cũng chịu khó viết cho đúng chính tả chứ.
dạ thưa anh em xin phản hồi lại chút ạ ( không có ý cãi cọ )
Công việc em làm chả liên quan mấy đến excel, nhất là bài này. Vì em muốn biết lên em mới học, không biết mới hỏi -> Thái độ học là có
Từ lời nói em đều rất chú trọng câu chữ, thái độ hỏi bài lịch sự -> Thái độ nghiêm túc
Nếu như ta không biết đường mà bắt ta tả đường cho 1 người khác là rất khó -> Biết VBA thì hỏi bài rất dễ , ngu VBA thì rất khó
Bài đã được tự động gộp:

Lại bị thầy cốc đầu.
Thương cho roi cho vọt anh ạ. Em còn dại lắm, mong sau này sẽ được các anh chị chỉ bảo thêm ạ
 
Lần chỉnh sửa cuối:
...Từ lời nói em đều rất chú trọng câu chữ, thái độ hỏi bài lịch sự -> Thái độ nghiêm túc
Nếu như ta không biết đường mà bắt ta tả đường cho 1 người khác là rất khó -> Biết VBA thì hỏi bài rất dễ , ngu VBA thì rất khó
...
Ví dụ lệch lạc hết.
Bạn hỏi đường chứ không phải chỉ dẫn đường. Vì vậy đâu có cần "tả đường". Hãy bình tĩnh mà suy nghĩ, khi hỏi đường thì cần gì: tên đường? tên một hộ nổi tiếng trên đường (ví dụ đường lên nhà ông Cả X)? Nếu hoàn toàn chả biết tên đường thì ít nhất phải có một cái gì đặc thù để người ta có thể đoán (con đường nhỏ đâm thẳng ra bến đò ABC). Dĩ nhiên là hỏi "tôi muốn tìm đường đến nhà ngoại tôi" thì có trời mà đoán. Trừ phi may mắn cho bạn cả vùng chỉ có một vài người lớn tuổi thì bên kia người ta sẽ hỏi lại "có phải cháu ông A, hay là cháu bà B?" (*1)

Bạn chưa biết VBA thì dựa vào đâu mà khẳng định "Biết VBA thì hỏi bài rất dễ"? Cái bạn chưa trải qua thì sao biết nó dễ hay khó?

Khi toi nói về "thái độ học" là tôi nói về cách thức đối diện với bài học của bạn. Chả liên quan gì đến người nào khác.

(*1) chỉ riêng cái ví dụ hỏi thăm đường bạn cũng thấy là chính bạn cần cải tiến. Tôi không nghĩ là bạn không biết cách hỏi thăm đường. Chỉ là khi viết lên giấy, gõ lên phím thì bạn không quen cách diễn đạt.
 
Em xin chân thành cảm ơn anh đã cho chữ. Code anh cho rất hay, gắn gọn và dễ hiểu.
Nhưng em xin anh giúp nốt em 1 chút ạ. Khi em nhập 1, 2 vào F2 thì G1:H5 không tự động nhẩy số, mà phải thông qua Run Macro.
Có thể em diễn giải khó hiểu. Em xin được đăng ảnh lên các anh chị xem giúp em ạ
Code đặt trong "Sheet2"
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Address = "$F$2" Then
            If .Value = 1 Then
                Range("G1:H5") = Range("A1:B5").Value
            ElseIf .Value = 2 Then
                Range("G1:H5") = Range("A6:B10").Value
            End If
        End If
    End With
End Sub
Sau khi bạn hiểu hết từ chỉ dẩn của phuocam, thì bạn chạy cái này thử.
 
Lần chỉnh sửa cuối:
Code đặt trong "Sheet2"
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Address = "$F$2" Then
           If .Value = 1 Then Range("G1:H5") = Range("A1:B5").Value
           If .Value = 2 Then Range("G1:H5") = Range("A6:B10").Value
        End If
    End With
End Sub
Sau khi bạn hiểu hết từ chỉ dẩn của phuocam, thì bạn chạy cái này thử.
Em cảm ơn anh nhiều nhé, nhờ những code mà các anh chỉ bảo em được mở mang kiến thức thêm nhiều. Rất chân thành cảm ơn và chúc anh sức khỏe để có thể giúp đỡ cho nhiều người nữa ạ
 
Em cảm ơn anh nhiều nhé, nhờ những code mà các anh chỉ bảo em được mở mang kiến thức thêm nhiều. Rất chân thành cảm ơn và chúc anh sức khỏe để có thể giúp đỡ cho nhiều người nữa ạ
Bạn chậm rãi đọc các ý của anh VietMini nhé. Cách suy nghĩ khiến hành động của mình khác đi nhiều lắm á :D
 
Web KT
Back
Top Bottom