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,599
Được thích
2,908
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ị
 
Theo nghĩa rộng thì mảng của mảng có thể coi là mảng 2 chiều.
Theo nghĩa chính thức của lập trình thì mảng 2 chiều phải hội đủ 2 điều kiện sau:
1. các phần tử phải cùng một kiểu (type)
2. các phân tử phải liên tục nhau.

cái mảng này:
Arr = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9), Array(10, 11, 12))

Khong BẢO ĐẢM 2 điều kiên trên. Vì vậy, theo định nghĩa của lập trình, nó khong phải là mảng 2 chiều.
Một số ngôn ngữ gọi nó là mảng răng cưa (jagged array).
 
Upvote 0
Các Bạn cho mình hỏi có cách nào khác duyệt File như code sau ngắn gọn hơn Mà không sử dụng Array

mà vẫn duyệt được không ... xin cảm ơn

Mã:
[/B]Sub CheckFile()
    Dim MyFile(), i As Long
    MyFile = [COLOR=#ff0000][B]Array[/B][/COLOR]("x1.xls", "x2.xlsb", "x3.xlsx")
    For i = 0 To UBound(MyFile)
        MsgBox MyFile(i)
    Next
End Sub
[B]
 
Upvote 0
Các Bạn cho mình hỏi có cách nào khác duyệt File như code sau ngắn gọn hơn Mà không sử dụng Array

mà vẫn duyệt được không ... xin cảm ơn

Mã:
Mã:
Sub CheckFile()
    Dim MyFile(), i As Long
    MyFile = [COLOR=#ff0000][B]Array[/B][/COLOR]("x1.xls", "x2.xlsb", "x3.xlsx")
    For i = 0 To UBound(MyFile)
        MsgBox MyFile(i)
    Next
End Sub

Khong dùng Array? bạn muốn nói hàm Array?

for each f in split("x,y,z", ",")
 
Upvote 0
Khong dùng Array? bạn muốn nói hàm Array?

for each f in split("x,y,z", ",")
Chi tiết là vầy ...Nếu ta có 100 File ở nhiều Folder khác nhau thì Cái Array thấy dài quá ...

Vậy mình đang nghĩ có cách nào viết khác mà không phải xài Array cho nó gọn lại đó mà ...mà mục đích cũng vậy

Và cách khai báo này thấy hoài nên cũng đang nghĩ xem khai phá cách viết mới xúc tích ngắn gọn và dễ xài hơn không

Mã:
Private Sub CheckFile1()
    Dim MyFile(), i As Long
    Dim File1 As String, File2 As String, File3 As String
    File1 = "D:\Manh\x1.xls"
    File2 = "E:\Anh\x2.xlsb"
    File3 = "C:\XX\x3.xlsx"
    MyFile = [COLOR=#ff0000][B]Array[/B][/COLOR](File1, File2, File3)
    For i = 0 To UBound(MyFile)
        MsgBox MyFile(i)
    Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bác.
Các bác có thể chuyển dữ liệu tử vùng 1 sang vùng 2 như att file giúp em được ko ạ
Em xin cảm ơn!
 

File đính kèm

  • Book1.xlsx
    9.6 KB · Đọc: 20
Upvote 0
Cám ơn bác rất nhiều. Nhưng lần này em có yêu cầu còn khó hơn nhiều, mong bác lại giúp đỡ. ^^ --=0
 

File đính kèm

  • Book1.xlsx
    20.6 KB · Đọc: 29
Upvote 0
Chờ đợi 2 ngày mà không có cao thủ nào bớt chút thời gian giúp em ah? **~**
 
Upvote 0
Em có một bảng dữ liệu gồm 3 cột A B C chứa các mã vận đơn. Mỗi cột chứa rất nhiều khoảng 2k mã. E muốn kiểm tra các mã có trong cột A ko có trong cột B và C; có trong cột B ko có trong cột A và C; có trong cột C mà ko có trong cột A và B sau đó ghi ra cột D E F. Em đã sử dụng vòng lặp while do để so sánh từng giá trị trong cột B với C và từng giá trị trong B với A và C ; Từng giá trị trong C với A và B ( tại e ko biết cách loại bỏ đối tượng khi đã trùng với đối tượng trước ra khỏi mảng). Làm như vậy máy chạy rất đơ. Nếu ít dữ liệu thì ko sao. Dữ liệu lên lớn lớn tý là treo máy ngay. Các bác cho e lời khuyên với.
Ps: em mới viết đến đoạn lấy A so với B C thì máy đã đơ rùi :D
 
Upvote 0
Em có một bảng dữ liệu gồm 3 cột A B C chứa các mã vận đơn. Mỗi cột chứa rất nhiều khoảng 2k mã. E muốn kiểm tra các mã có trong cột A ko có trong cột B và C; có trong cột B ko có trong cột A và C; có trong cột C mà ko có trong cột A và B sau đó ghi ra cột D E F. Em đã sử dụng vòng lặp while do để so sánh từng giá trị trong cột B với C và từng giá trị trong B với A và C ; Từng giá trị trong C với A và B ( tại e ko biết cách loại bỏ đối tượng khi đã trùng với đối tượng trước ra khỏi mảng). Làm như vậy máy chạy rất đơ. Nếu ít dữ liệu thì ko sao. Dữ liệu lên lớn lớn tý là treo máy ngay. Các bác cho e lời khuyên với.
Ps: em mới viết đến đoạn lấy A so với B C thì máy đã đơ rùi :D
bạn cho file ví dụ và đưa code lên, mọi người sẽ góp ý
 
Upvote 0
Lấy giá trị của Value tăng thêm 1, tăng thêm 1 lượng bằng cột add.
VD:
Code Value Add
b___ 2 ___3
=> b(2+1), b(2+2), b(2+3)
 
Upvote 0
Lấy giá trị của Value tăng thêm 1, tăng thêm 1 lượng bằng cột add.
VD:
Code Value Add
b___ 2 ___3
=> b(2+1), b(2+2), b(2+3
 
Upvote 0
Hi, sorry bạn. Mình diễn giải nhầm mất 1 chút của a lần 2. Mình chỉnh sửa lại rồi nhé.
Giá trị xuất lần 1 giữ nguyên, lần 2 thêm vào ô bên dưới cuối cùng của lần 1, lần n thêm vào ô bên dưới của ô n-1. ( Cọt I)
Rất cảm ơn bạn đã quan tâm!
 

File đính kèm

  • Book1.xlsx
    21.9 KB · Đọc: 9
Upvote 0
Hi, sorry bạn. Mình diễn giải nhầm mất 1 chút của a lần 2. Mình chỉnh sửa lại rồi nhé.
Giá trị xuất lần 1 giữ nguyên, lần 2 thêm vào ô bên dưới cuối cùng của lần 1, lần n thêm vào ô bên dưới của ô n-1. ( Cọt I)
Rất cảm ơn bạn đã quan tâm!
bạn xem file đúng ý chưa
 

File đính kèm

  • Bk1.xlsm
    36 KB · Đọc: 19
Upvote 0
Em có một bảng dữ liệu gồm 3 cột A B C chứa các mã vận đơn. Mỗi cột chứa rất nhiều khoảng 2k mã.
E muốn kiểm tra các mã có trong cột A ko có trong cột B và C;
có trong cột B ko có trong cột A và C;
có trong cột C mà ko có trong cột A và B
sau đó ghi ra cột D E F.

Ps: em mới viết đến đoạn lấy A so với B C thì máy đã đơ rùi :D

Mình fải mất hơn 2H để giả lập file cho bạn; Thế mới biết chưa ai trả lời cho bạn trước mình!

& với chương trình này, máy mình chạy dưới 9 gy.
 

File đính kèm

  • gpeArr.rar
    43.1 KB · Đọc: 35
Upvote 0
Em có một bảng dữ liệu gồm 3 cột A B C chứa các mã vận đơn. Mỗi cột chứa rất nhiều khoảng 2k mã. E muốn kiểm tra các mã có trong cột A ko có trong cột B và C; có trong cột B ko có trong cột A và C; có trong cột C mà ko có trong cột A và B sau đó ghi ra cột D E F. Em đã sử dụng vòng lặp while do để so sánh từng giá trị trong cột B với C và từng giá trị trong B với A và C ; Từng giá trị trong C với A và B ( tại e ko biết cách loại bỏ đối tượng khi đã trùng với đối tượng trước ra khỏi mảng). Làm như vậy máy chạy rất đơ. Nếu ít dữ liệu thì ko sao. Dữ liệu lên lớn lớn tý là treo máy ngay. Các bác cho e lời khuyên với.
Ps: em mới viết đến đoạn lấy A so với B C thì máy đã đơ rùi :D
bạn cho hỏi, nếu cột A có nhiều mã trùng nhau mà không có trong cột B, C thì để nguyên hay chỉ lấy 1? nếu lấy duy nhất thì bạn hoàn toàn có thể làm thủ công nhé.
 
Upvote 0
Chuẩn luôn. Cám ơn bạn rất nhiều. Nhưng nhìn đoạn mã hoa cả mắt, chắc châm cứu ốm xác mới hiểu đc phần nào. ^^
 
Upvote 0
Topic này như bị đóng băng hay sao mà ko có ai hỏi nữa nhỉ? ^^
Nay mình có 2 vấn đề khó lại phiền các cao thủ xuất sơn trợ giúp
Vấn đề 1. Mình nên yêu cầu trong file
Vấn đề 2: Mình cũng nêu trong file
Cả 2 vấn đề chắc cũng tốn không ít thời gian của các bác, mình xin cảm ơn nhiều.
 

File đính kèm

  • Array.xlsx
    10.7 KB · Đọc: 18
  • test.rar
    53.3 KB · Đọc: 24
Upvote 0
Topic này như bị đóng băng hay sao mà ko có ai hỏi nữa nhỉ? ^^
Nay mình có 2 vấn đề khó lại phiền các cao thủ xuất sơn trợ giúp
Vấn đề 1. Mình nên yêu cầu trong file
Vấn đề 2: Mình cũng nêu trong file
Cả 2 vấn đề chắc cũng tốn không ít thời gian của các bác, mình xin cảm ơn nhiều.

đây yêu cầu file "Array"
Mã:
Option Explicit

Sub test()
Dim sRange As Range
Dim rArr(1 To 6000, 1 To 4) As Variant

Dim i, j, k As Long
Set sRange = Range("A2:H7")
rArr(1, 1) = "Date": rArr(1, 2) = "Cells": rArr(1, 3) = "Tittle": rArr(1, 4) = "Font"
k = 1
For i = 3 To sRange.Rows.Count
    For j = 3 To sRange.Columns.Count
    With sRange
        If .Cells(i, j) Like "*.XX" Then
            k = k + 1
            rArr(k, 1) = .Cells(i, 1): rArr(k, 2) = .Cells(i, j)
            rArr(k, 3) = .Cells(1, j)
            If .Cells(i, j).Font.ColorIndex = 3 Then rArr(k, 4) = "Do" Else rArr(k, 4) = "Den"
        End If
    End With
    Next
Next
If k Then
    [a15:d1000].Clear
    [a15].Resize(k, 4) = rArr
End If
End Sub
====
yêu cầu ở file nén của bạn là gì vậy? copy các file ở folder 1-->n về file tổng hợp
 
Upvote 0
Web KT

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

Back
Top Bottom