Các câu hỏi về mảng trong VBA (Array)

Liên hệ QC

viehoai

Thành viên gắn bó
Tham gia
22/5/09
Bài viết
2,600
Được thích
2,907
Xin các anh chị giúp đỡ Code Gán các giá trị của một Range là các phần tử của Mãng
Ví dụ: Tôi có các giá trị của Range("A1:A10"). Tôi muốn viết code để gán giá trị của các cells từ A1:A10 là các phần tử của Mãng Arr chẳn hạn.
Xin cảm ơn các anh chị
 
Em chào anh/chị ạ.

Em là thành viên mới, em bây giờ mới tập tành về code, nên mạn phép lên đây nhờ anh/chị chỉ giáo em đôi chút ạ.
Em không biết nhấn vào đâu để viết câu hỏi mới, nên đành phải gửi qua hình thức trả lời bình luận của anh/chị trong topic :((
Hiện tại em có học trên mạng 1 dãy code "Gộp nhiều sheet excel vào chung 1 sheet", nhưng trong phần code này lại chỉ viết RangeAddress đối với các sheet có số cột và số dòng giống nhau, chứ không có code áp dụng đối với các sheet có số dòng khác nhau (2000 dòng; 3000 dòng hoặc 4000 dòng thì sao ạ?)
Anh/chị chỉ giúp em code đối với đề bài "Gộp nhiều sheet excel vào chung 1 sheet cùng form, số dòng khác nhau" với ạ. Em cảm ơn nhiều.

Bài viết đầu có hơi lủng củng, mong anh/chị thông cảm ạ.Capture.PNG
 
Upvote 0
Em chào anh/chị ạ.

Em là thành viên mới, em bây giờ mới tập tành về code, nên mạn phép lên đây nhờ anh/chị chỉ giáo em đôi chút ạ.
Em không biết nhấn vào đâu để viết câu hỏi mới, nên đành phải gửi qua hình thức trả lời bình luận của anh/chị trong topic :((
Hiện tại em có học trên mạng 1 dãy code "Gộp nhiều sheet excel vào chung 1 sheet", nhưng trong phần code này lại chỉ viết RangeAddress đối với các sheet có số cột và số dòng giống nhau, chứ không có code áp dụng đối với các sheet có số dòng khác nhau (2000 dòng; 3000 dòng hoặc 4000 dòng thì sao ạ?)
Anh/chị chỉ giúp em code đối với đề bài "Gộp nhiều sheet excel vào chung 1 sheet cùng form, số dòng khác nhau" với ạ. Em cảm ơn nhiều.

Bài viết đầu có hơi lủng củng, mong anh/chị thông cảm ạ.View attachment 212451
Khai báo địa chỉ lớn nhất như 10000 dòng
Select thêm điều kiện Where f1 is not null vào cuối
 
Upvote 0
Khai báo địa chỉ lớn nhất như 10000 dòng
Select thêm điều kiện Where f1 is not null vào cuối
Cho em hỏi, em viết như thế này đúng không ạ?

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sh As Worksheet
Dim I As Long, k As Long, CountFiles As Long, J As Long

SheetName = "Platium" & "$"
RangeAddress = "A12:AD1000" Where f1 is not null

Dim files As Variant
files = Application.GetOpenFilename(, , , , True)

If VarType(files) = vbBoolean Then Exit Sub

Set sh = Sheets("Sheet1")
 
Upvote 0
Cho em hỏi, em viết như thế này đúng không ạ?

Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sh As Worksheet
Dim I As Long, k As Long, CountFiles As Long, J As Long

SheetName = "Platium" & "$"
RangeAddress = "A12:AD1000" Where f1 is not null

Dim files As Variant
files = Application.GetOpenFilename(, , , , True)

If VarType(files) = vbBoolean Then Exit Sub

Set sh = Sheets("Sheet1")
Thêm: & " Where f1 is not null" vào sau "]" của Set rst
 
Upvote 0
Thêm: & " Where f1 is not null" vào sau "]" của Set rst
A ơi. Xin lỗi cho em làm phiền chút ạ.

Bài trên em có hỏi về code VBA về "cách gộp nhiều sheet tách biệt vào chung 1 sheet duy nhất", đối với các file có nhiều sheetcó số dòng khác nhau ạ.

Em thấy trên mạng có code này, nhưng em thử đi thử lại không chạy được, không biết bị lỗi gì ạ???

Em có 3 file dữ liệu: AB,ABB và ABBB, và em muốn gộp dữ liệu của sheet name "Hoa" của 3 file đó vào 1 sheet "Master" của file Test.

Em gửi anh đính kèm file và code em chạy, anh có thể xem giúp em lỗi code ở đâu với ạ.

Em cảm ơn anh nhiều.Capture.PNG
 

File đính kèm

  • AB.xlsx
    10.4 KB · Đọc: 1
  • ABB.xlsx
    10.5 KB · Đọc: 1
  • ABBB.xlsx
    11 KB · Đọc: 1
  • Test.xlsm
    13.2 KB · Đọc: 1
Upvote 0
Sau khi em tick 1 loạt Microsoft ActiveX Data Objects x.x Library

Vẫn hiện ra lỗi này ạ.
Bạn copy Code của ai thì phải Copy toàn bộ code hoặc tải file người đấy đăng. Không thì các hàm tự tạo trong code lấy đâu mà nó chạy được.
Không thì bạn học VBA ngay thôi
 
Upvote 0
Bạn Vào Tools , Vào References ... , Tìm Microsoft ActiveX Data Objects x.x Library đánh dấu
Bấm xong nó hiện ra ntn ạ.
1550725144843.png
1550725113040.png
Bài đã được tự động gộp:

Bạn copy Code của ai thì phải Copy toàn bộ code hoặc tải file người đấy đăng. Không thì các hàm tự tạo trong code lấy đâu mà nó chạy được.
Không thì bạn học VBA ngay thôi
Em copy toàn bộ code của ng đó rồi ạ. Nhưng không có file để tải nên em tự tạo file để áp dụng ấy ạ.
 
Upvote 0
Upvote 0
Xin chào các bạn,
OT có một vấn đề sau chưa biết cách xử lý, nhờ các bạn xem và giúp đỡ ạ.
 

File đính kèm

  • Book1.xlsx
    13.4 KB · Đọc: 27
Upvote 0
Có quy luật gì không ta.Hay cứ lấy hên sui.
Qui luật là bí mật quốc gia. Nhìn kết quả mong đợi rồi đoán thôi. :D

Vd. bắn lên. Ta đã có thông tin là dòng dưới bắn lên trên (lần này súng bắn một chiều). Nhưng bắn cả dòng dưới lên hay chỉ bắn những ô có dữ liệu của dòng dưới lên? Tôi cho vd.

Giả sử G10 = G11 = hichic. Sau khi bắn thì
- Z10 = 55, Z11 = 600, G10 = G11 = rỗng do G12 = G13 = rỗng bắn lên (bắn cả dòng dưới lên, ghi đè)
- Z10 = 55, Z11 = 600, G10 = G11 = hichic (chỉ bắn các ô <> rỗng của dòng dưới lên trên)

Trường hợp nào đây?

Nếu chỉ bắn các ô <> rỗng của dòng dưới lên trên thì cũng lại có câu hỏi: thế nếu ô tương ứng ở dòng trên đã <> rỗng thì có bắn vào các ô ấy không hay bỏ qua?

Thế nếu có 3 dòng cùng mã thì dòng 3 chỉ bắn lên dòng 2 hay bắn cả lên tới dòng 1?

Tóm lại kết quả mong đợi chỉ là bổ sung cho mô tả. Không thể lấy kết quả mong đợi thay thế cho mô tả khi vấn đề có thể hiểu theo nhiều kiểu.
 
Upvote 0
Cảm ơn snow25 đã quan tâm,
Quy luật là copy ở dưới đưa lên cái trên và đưa vào những mã giống nhau ạ.
Bạn xem nhé.
Mã:
Sub laydulieu()
    Dim arr, i As Long, dic As Object, a As Long, b As Long, dk As Long, k As Long, j As Long
    Set dic = CreateObject("scripting.dictionary")
    With Sheet1
        arr = .Range("E4:z25").Value
        For i = 1 To UBound(arr, 1) Step 2
            For j = 3 To UBound(arr, 2)
                If Len(arr(i, j)) > 0 Then
                   dic.Item(arr(i, 1)) = i
                   Exit For
                End If
            Next j
        Next i
        For i = 1 To UBound(arr, 1) Step 2
            a = dic.Item(arr(i, 1))
               If a And a <> i Then
                 For k = 0 To 1
                  For j = 3 To UBound(arr, 1)
                      arr(i + k, j) = arr(a + k, j)
                  Next j
                 Next k
               End If
       Next i
       .Range("Ac4:Ax25").Value = arr
   End With
 
Upvote 0
Web KT
Back
Top Bottom