Hỏi về hàm nhập liệu đối với bảng merge cell

Liên hệ QC

swatgibl

Thành viên mới
Tham gia
4/5/10
Bài viết
19
Được thích
0
Giới tính
Nam
Chào các anh chị, em có một vướng mắc về việc nhập liệu từ một sheet dữ liệu thô cho sẵn sang 1 bảng dữ liệu bao gồm các ô merge cell (như trong file đính kèm của em là 17 dòng dữ liệu mỗi cột và bao gồm 3 cột tại sheet raw cần nhập liệu vào bảng dữ liệu tại sheet check với mỗi ô nhập liệu được merge từ 4 cell), hiện tại em đã thử hàm lookup và kết hợp công thức cộng để ra giá trị đối chiếu đúng dòng nhưng không thành công nên nhập liệu thủ công bằng cách nhập vào ô đầu tiên cột đầu tiên ở bảng check là raw!A2, ô thứ 2 là raw!A3 (khi copy paste hoặc kéo ô thì nó lại tự động nhảy thành A4 A6 A8....) rồi sau đó copy toàn bộ những ô đã nhập giá trị đối chiếu sang cột B và C. Nên em mong được hướng dẫn nên dùng cách thức nào có thể copy toàn bộ dữ liệu nhanh chóng hoặc kết hợp hàm như thế nào cho đúng. Mong được các anh chị hướng dẫn, em cám ơn.
 

File đính kèm

Chào các anh chị, em có một vướng mắc về việc nhập liệu từ một sheet dữ liệu thô cho sẵn sang 1 bảng dữ liệu bao gồm các ô merge cell (như trong file đính kèm của em là 17 dòng dữ liệu mỗi cột và bao gồm 3 cột tại sheet raw cần nhập liệu vào bảng dữ liệu tại sheet check với mỗi ô nhập liệu được merge từ 4 cell), hiện tại em đã thử hàm lookup và kết hợp công thức cộng để ra giá trị đối chiếu đúng dòng nhưng không thành công nên nhập liệu thủ công bằng cách nhập vào ô đầu tiên cột đầu tiên ở bảng check là raw!A2, ô thứ 2 là raw!A3 (khi copy paste hoặc kéo ô thì nó lại tự động nhảy thành A4 A6 A8....) rồi sau đó copy toàn bộ những ô đã nhập giá trị đối chiếu sang cột B và C. Nên em mong được hướng dẫn nên dùng cách thức nào có thể copy toàn bộ dữ liệu nhanh chóng hoặc kết hợp hàm như thế nào cho đúng. Mong được các anh chị hướng dẫn, em cám ơn.
Xử bằng VBA thì có thể:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("A2", Sheets("raw").Range("A2").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim dArr(1 To R * 2, 1 To 3)
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 3) = sArr(I, 3)
    K = K + 1
Next I
Sheets("check").Range("A2").Resize(K, 3) = dArr
End Sub
 
Xử bằng VBA thì có thể:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("A2", Sheets("raw").Range("A2").End(xlDown)).Resize(, 3).Value
R = UBound(sArr)
ReDim dArr(1 To R * 2, 1 To 3)
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 3) = sArr(I, 3)
    K = K + 1
Next I
Sheets("check").Range("A2").Resize(K, 3) = dArr
End Sub
Do em chưa biết về VBA trong excel nên xin phép hỏi thêm là nếu số ô merge cell tăng lên là 3 hoặc 4 thì cần thay đổi hàm trên như thế nào ạ? (đại lượng nào biểu thị kích cỡ của ô text đã merge?)
 
Lần chỉnh sửa cuối:
Do em chưa biết về VBA trong excel nên xin phép hỏi thêm là nếu số ô merge cell tăng lên là 3 hoặc 4 thì cần thay đổi hàm trên như thế nào ạ? (đại lượng nào biểu thị kích cỡ của ô text đã merge?)
Ngoài ra em có thử thêm 1 cột dữ liệu vào sheet raw, sau đó edit ReDim dArr(1 To R * 2, 1 To 3) thành ReDim dArr(1 To R * 2, 1 To 4) và Resize(,3) thành Resize(,4) rồi thêm : dArr(K, 4) = sArr(I, 4) tuy không báo lỗi nhưng các giá trị ở cột thêm không được điền vào.
Bạn xem ghi chú dưới đây:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("A2", Sheets("raw").Range("A2").End(xlDown)).Resize(, 3).Value     '<----Dữ liệu 3 cột'
R = UBound(sArr)
ReDim dArr(1 To R * 2, 1 To 3)       '<-----------Khai bào mảng kết quả 3 cột'
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 3) = sArr(I, 3)
    K = K + 1                           '<------------ Cách 1 cell (gộp 2 cells)'
Next I
Sheets("check").Range("A2").Resize(K, 3) = dArr              '<----------Kết quả 3 cột'
End Sub
 
Bạn xem ghi chú dưới đây:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("A2", Sheets("raw").Range("A2").End(xlDown)).Resize(, 3).Value     '<----Dữ liệu 3 cột'
R = UBound(sArr)
ReDim dArr(1 To R * 2, 1 To 3)       '<-----------Khai bào mảng kết quả 3 cột'
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 3) = sArr(I, 3)
    K = K + 1                           '<------------ Cách 1 cell (gộp 2 cells)'
Next I
Sheets("check").Range("A2").Resize(K, 3) = dArr              '<----------Kết quả 3 cột'
End Sub
dạ em cám ơn chỉ dẫn chi tiết của anh.
 
Bạn xem ghi chú dưới đây:
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("A2", Sheets("raw").Range("A2").End(xlDown)).Resize(, 3).Value     '<----Dữ liệu 3 cột'
R = UBound(sArr)
ReDim dArr(1 To R * 2, 1 To 3)       '<-----------Khai bào mảng kết quả 3 cột'
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 3) = sArr(I, 3)
    K = K + 1                           '<------------ Cách 1 cell (gộp 2 cells)'
Next I
Sheets("check").Range("A2").Resize(K, 3) = dArr              '<----------Kết quả 3 cột'
End Sub
Em muốn hỏi thêm 1 vấn đề nữa là ví dụ bảng giá trị ở sheet raw có 5 cột, tuy nhiên em muốn bỏ qua việc fill dữ liệu ở cột 3 trong sheet check mà không làm ảnh hưởng dữ liệu đã có (ví dụ em đang dùng hàm sum ở cột 3 chẳng hạn), vì khi em thử bỏ qua khai báo : dArr(K, 3) = sArr(I, 3) mà chỉ áp dụng 1, 2, 4, 5 thì mặc định cột 3 trong sheet check vẫn bị fill khoảng trắng, em đã thử 1 to 2, 4 to 5 nhưng bị lỗi.
 
Nhưng với mình thì khác: Sao bạn lại phải trộn ô làm vậy?
Không trộn không được hay sao?
 
@Ba Tê :D em nói vậy vì dùng hàm chỉ cần copy hàm cho tất cả dòng, cột 1 lần rồi mỗi khi cập nhật sheet raw nó tự nhảy, thuận tiện cho người không biết cách chạy VBA nhất là khi thay đổi thứ tự dòng, cột ở sheet raw thôi ạ :D, còn đoạn VBA anh hướng dẫn thì rút bớt trình tự copy paste value và lọc các định dạng ngày tháng rỗng (hiển thị dạng 00/00/1900), nhưng em có 1 vướng mắc về việc nhập liệu nhảy cột mà không ảnh hưởng đến bảng check như đã hỏi thêm ở phía trên, mong anh hướng dẫn thêm ^^
 
Em muốn hỏi thêm 1 vấn đề nữa là ví dụ bảng giá trị ở sheet raw có 5 cột, tuy nhiên em muốn bỏ qua việc fill dữ liệu ở cột 3 trong sheet check mà không làm ảnh hưởng dữ liệu đã có (ví dụ em đang dùng hàm sum ở cột 3 chẳng hạn), vì khi em thử bỏ qua khai báo : dArr(K, 3) = sArr(I, 3) mà chỉ áp dụng 1, 2, 4, 5 thì mặc định cột 3 trong sheet check vẫn bị fill khoảng trắng, em đã thử 1 to 2, 4 to 5 nhưng bị lỗi.
Chỉ khi nào thấy file, thấy cột công thức của bạn "chừa ra" thế nào, lấy dữ liệu cho các cột nào thì mới sửa code được. Bạn chỉ "ví dụ" thôi thì bạn chỉ có thể vận dụng khi bạn đọc hiểu được Code. Người khác không thể hiểu được ý của bạn bằng mô tả.
 
@Ba Tê Dạ em gửi file minh họa, ở sheet summary thì hàng có tiêu đề colum 4 (cột D) có chứa hàm cộng giá trị, 4 hàng còn lại để trống sẽ fill dữ liệu từ sheet raw (cũng đã sắp xếp theo trình tự giống như ở sheet summary).
Hiện em đang thử đoạn sau thì dù bỏ qua dArr(K, 3) = sArr(I, 3) nhưng khi chạy vẫn bị fill vào Colum 4 của sheet summary
PHP:
Sub test 2()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("B2", Sheets("raw").Range("B2").End(xlDown)).Resize(, 5).Value
R = UBound(sArr)
ReDim dArr(1 To R * 4, 1 To 5)
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 4) = sArr(I, 4): dArr(K, 5) = sArr(I, 5)
    K = K + 3
Next I
Sheets("summary").Range("B6").Resize(K, 5) = dArr
End Sub
[/QUOTE]
Mong anh chỉ dẫn thêm giúp em.
 

File đính kèm

@Ba Tê Dạ em gửi file minh họa, ở sheet summary thì hàng có tiêu đề colum 4 (cột D) có chứa hàm cộng giá trị, 4 hàng còn lại để trống sẽ fill dữ liệu từ sheet raw (cũng đã sắp xếp theo trình tự giống như ở sheet summary).
Hiện em đang thử đoạn sau thì dù bỏ qua dArr(K, 3) = sArr(I, 3) nhưng khi chạy vẫn bị fill vào Colum 4 của sheet summary
PHP:
Sub test 2()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
sArr = Sheets("raw").Range("B2", Sheets("raw").Range("B2").End(xlDown)).Resize(, 5).Value
R = UBound(sArr)
ReDim dArr(1 To R * 4, 1 To 5)
For I = 1 To R
    K = K + 1
    dArr(K, 1) = sArr(I, 1): dArr(K, 2) = sArr(I, 2): dArr(K, 4) = sArr(I, 4): dArr(K, 5) = sArr(I, 5)
    K = K + 3
Next I
Sheets("summary").Range("B6").Resize(K, 5) = dArr
End Sub
Mong anh chỉ dẫn thêm giúp em.[/QUOTE]
Gán luôn công thức vào. Nếu muốn code tự tính luôn càng nhẹ.
PHP:
Sub Test2()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
sArr = Sheets("raw").Range("B2", Sheets("raw").Range("B2").End(xlDown)).Resize(, 5).Value
R = UBound(sArr)
ReDim dArr(1 To R * 4, 1 To 5)
For I = 1 To R
    K = K + 1
    For J = 1 To 5
        dArr(K, J) = sArr(I, J)
        dArr(K, 3) = "=RC[2]+RC[-1]"
    Next J
    K = K + 3
Next I
Sheets("summary").Range("B6").Resize(K, 5) = dArr
End Sub
 
Mong anh chỉ dẫn thêm giúp em.
Gán luôn công thức vào. Nếu muốn code tự tính luôn càng nhẹ.
PHP:
Sub Test2()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
sArr = Sheets("raw").Range("B2", Sheets("raw").Range("B2").End(xlDown)).Resize(, 5).Value
R = UBound(sArr)
ReDim dArr(1 To R * 4, 1 To 5)
For I = 1 To R
    K = K + 1
    For J = 1 To 5
        dArr(K, J) = sArr(I, J)
        dArr(K, 3) = "=RC[2]+RC[-1]"
    Next J
    K = K + 3
Next I
Sheets("summary").Range("B6").Resize(K, 5) = dArr
End Sub
[/QUOTE]
dạ em cám ơn :D em cũng đang dùng cách gán công thức vào sheet raw để fill luôn giá trị nhưng do thắc mắc thêm nên đặt câu hỏi như vậy để biết thêm ^^
 
Hay quá ạ. Em muốn hỏi các anh chị bài toán gần như ngược lại với bài này ạ. Ở bài của em thì cột V có các ô bị merge; mỗi ô merge đó tương ứng với từ 2 dòng trở lên; các dòng này là số liệu của 1 chứng từ. Ví dụ: V1 quy định chứng từ gồm 2 dòng là dòng 1 và dòng 2; V3 quy định chứng từ gồm 5 dòng là từ dòng 3 đến dòng 7. Bây giờ làm cách nào để em có thể điền được thứ tự chứng từ vào cột X tương ứng ạ. Như 2 ví dụ em vừa viết thì X1=X2=1; X3=X4=X5=X6=X7=2;... Các anh chị giúp em với ạ. Em cảm ơn nhiều ạ.
 

File đính kèm

Hay quá ạ. Em muốn hỏi các anh chị bài toán gần như ngược lại với bài này ạ. Ở bài của em thì cột V có các ô bị merge; mỗi ô merge đó tương ứng với từ 2 dòng trở lên; các dòng này là số liệu của 1 chứng từ. Ví dụ: V1 quy định chứng từ gồm 2 dòng là dòng 1 và dòng 2; V3 quy định chứng từ gồm 5 dòng là từ dòng 3 đến dòng 7. Bây giờ làm cách nào để em có thể điền được thứ tự chứng từ vào cột X tương ứng ạ. Như 2 ví dụ em vừa viết thì X1=X2=1; X3=X4=X5=X6=X7=2;... Các anh chị giúp em với ạ. Em cảm ơn nhiều ạ.
vầy được không:
X1=COUNTIF($R$1:$R1,"<>")
copy xuống dưới.
hihi ^o^
 
Web KT

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

Back
Top Bottom