Cập nhật dữ liệu giữa 2 sheet. (gửi file giùm bạn!)

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Gữi file giùm bạn!

Có 1 bạn nhờ tôi giúp lập công thức cho file.. Nhìn file thì khá đơn giản, bạn ấy cũng đã ghi yêu cầu vào file, nhưng sao tôi nhìn mãi cũng ko hiểu rõ dc yêu cầu chính xác của bạn ấy là gì !!!
Tôi gữi lên đây hy vọng nhờ đông tay có khi phát hiện ra gì chăng!
Các bạn xem nhé!
ANH TUẤN
hieuhuy_bmt đã viết:
Em không phải là dân ghiền Excel nên có bài toán nhỏ này không làm được
Ở sshet 1 em có các nội dung sau: “gửi kèm File”
tt ! Tên công cụ ! ĐVT ! Giá !
-------!--------------------- !----------!---------!
1 ! A ! Chiếc ! 5 !
2 ! B ! Bộ ! 7 !
3 ! E ! Chiếc ! 3 !
4 ! F ! Chiếc ! 16 !
5 ! J ! Chiếc ! 2 !
! ............. ! Chiếc ! !
! ............ ! Chiếc ! !


Công việc phải làm ở sheet 2
tt ! Tên công cụ ! ĐVT ! Giá !
-------!--------------------- !----------!---------!
1 ! E ! ? ! ? !
2 ! C ! ? ! ? !
4 ! F ! ? ! ? !
5 ! J ! ? ! ? !
6 ! ... ! ! !
7 ! ... ! ! !
Ghi chú: Thứ tự đã bị thay đổi
yêu cầu: Dùng hàm để chuyển dữ liệu ở sheet 1 mang sang cột "ĐVT, cột đơn giá".
Các thầy gúp em với nhé công việc thường xuyên phải lặp đi lặp lại ở cơ quan (Nếu được dùng VBA thì càng tốt).
Kết quả xin gửi về “ktnghia_bmt@yahoo.com.vn”
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
anhtuan1066 đã viết:
Có 1 bạn nhờ tôi giúp lập công thức cho file.. Nhìn file thì khá đơn giản, bạn ấy cũng đã ghi yêu cầu vào file, nhưng sao tôi nhìn mãi cũng ko hiểu rõ dc yêu cầu chính xác của bạn ấy là gì !!!
Tôi gữi lên đây hy vọng nhờ đông tay có khi phát hiện ra gì chăng!
Các bạn xem nhé!
ANH TUẤN

tigertiger đoán có gì đâu,

đó là ở sheet Vl_SH(sheet2) lập công thức sao cho sau khi chọn khoản trong danh mục -> thì cột đơn giá sẽ tự chọn theo như dữ liệu bên sheet Danh muc vat lieu (sheet1)

còn bên trong : thì [Tinh tien] = [Don gia]*[DM]

hi vọng là đúng
 
Nếu bạn đoán dc thì xin làm giùm với... Tôi nghĩ tới nghĩ lui vẫn thấy có gì đó ko ổn!
Cảm ơn bạn trước
ANH TUẤN
 
Bác Tuấn à, theo em thì mục đích chính ở đây là lấy dữ liệu từ cột đơn giá của sheet 1 điền sang cột đơn giá của sheet 2.Sau đó lấy ô đơn giá của từng dòng tương ứng ở sheet 2 nhân với cột định mức. Bình thường dùng Vlookup rất dơn giản , nhưng ở đây lại đặt cột mã ở bên phải bảng,có hàm CSDL có thể tham chiếu theo kiểu này nhưng em không nhớ và chưa dùng.Hơn nữa hình như bác ấy thích viết = VBA , bác Tuấn xem có đúng như thế thì làm giúp .
 
Xem file em nghĩ là bạn của bác muốn lấy cột đơn giá vật liệu (Sheet chuyển) sang (Sheet2) nhưng không hiểu bạn của bác lại dùng data validation list (vatlieu) mà nhập mã vật tư không theo list vatlieu bác xem thử xem.
 
anhtuan1066 đã viết:
Nếu bạn đoán dc thì xin làm giùm với... Tôi nghĩ tới nghĩ lui vẫn thấy có gì đó ko ổn!
Cảm ơn bạn trước
ANH TUẤN

tigertiger đã làm theo ý hiểu, hy vọng là trúng ý của tác giả
 

File đính kèm

Cảm ơn bạn! Thì tôi cũng làm như bạn vậy! Nhưng nó ra kết quả #NA... file bạn cũng thế...
Vì vậy tôi e rằng chúng ta chưa hiểu đúng ý tác giã... Lý nào chọn Validation lại cho kết quả #NA ???
ANH TUẤN
 
anhtuan1066 đã viết:
Cảm ơn bạn! Thì tôi cũng làm như bạn vậy! Nhưng nó ra kết quả #NA... file bạn cũng thế...
Vì vậy tôi e rằng chúng ta chưa hiểu đúng ý tác giã... Lý nào chọn Validation lại cho kết quả #NA ???
ANH TUẤN

Oh, các dữ liệu cũ của tác giả không chọn theo Validation (có lẽ do tên bình thường và tên quy định khác nhau cách gọi 1 chút) -> bạn nên nói tác giả chọn lại theo validation & còn nếu muốn có tên bình thường (theo tên gọi) thì tác giả nên thêm cột khác / hoặc ghi vào ghi chú,
 
Không rõ ở sheet "Vl_SH(sheet2)" cột STT không được thay đổi nghĩa là sao? Có liên quan gì đến cột số hóa chuyển hệ ở Sheet "Danh muc vat lieu(sheet1)" không?
 
Kính gửi: duongsatdn, anhtuan1066 và các bạn:
Mục đích cuối cùng của mình là trong cái kho"Sheet1" đã có sẵn vật tư (nhưng mà nó mênh mông như thế- ở sheet 1 không có mã vật tư trùng) bây giờ lôi dữ liệu qua Sheet 2 "mang qua cột giá" chỉ có một điều kiện tham chiếu là mã vật liệu giống nhau.
Vậy nhờ các thầy hiểu đơn giản thế thôi "tốt nhất là dùng hàm cho nhanh" nếu dùng được VBA thì còn gì bằng.
bạn duongsatdn ơi: Ở sheet 2 thứ tự từ A đến Z là do định mức qui định " mình thay đổi thì cũng được song khi duyệt giá các Vip mò mất công".
bạn tiger ơi: nhập theo validation thì không lẫn vào đâu được.
Kính chào
 
Lần chỉnh sửa cuối:
kieuhuy_bmt đã viết:
Kính gửi: duongsatdn, anhtuan1066 và các bạn:

bạn tiger ơi: nhập theo validation thì không lẫn vào đâu được.
Kính chào

oh, Nhập validation theo đúng cách là phải chọn đúng giá trị các mục trong đó - tuy vậy nếu ta cố tình vẫn có thể nhập sai được ví dụ chúng ta đánh thẳng vào ô đó nội dung mới:

tigertiger thấy trong file của bạn gửi lên - cụ thể: tại sheet2 ngay ô đầu tiên B8 có giá trih là "Sổ ghi chép công tác" trong khi đó nếu chọn theo Validation thì giá trị là "Sổ ghi chép" như vậy ô này (B8 - sheet2) đâu phai chọn theo validation

không biết thế có đúng ý bạn ko:

---------

kieuhuy_bmt ơi,

phải chăng bạn muốn là: cột danh mục thì đánh theo tên gọi (gần giống tên trong bảng ở sheet1) còn đơn giá thì tra căn cứ vào việc là sau khi đánh thứ tự dòng của nó (trong bảng ở sheet2) tương ứng vào ô ở cột cuối cùng của bảng ở sheet1 / hay nói cách khác: là tra đơn giá đưa vào sheet2 trên cơ sở giá trị ở cột cuối cùng ở bảng của sheet1; có phải ko????

nếu đúng thế chúng tôi sẽ có p/a đề xuất gq' cho bạn
 
Kính : Tiger

Bạn nói đúng rồi mới đầu tôi làm thủ công. định nhập thêm một cột sang sheet1 "như cách làm mà bạn nói" song bây giờ nhờ các bạn xem có còn phương án nào khác không nhé. phương án của Anh Tuấn cũng rất là hay xong tôi đang áp dụng cho một File khác nhưng chưa ra kết quả . Vậy nhờ các bạn bổ sung nhé "viết bằng VBA thì tốt quá".
mình gửi File của anh tuấn đã làm xong
 
Lần chỉnh sửa cuối:
Theo tôi thấy, việc bạn ấy cần làm ở sheet2 là khi nhập vào tên công cụ thì các cột còn lại như ĐVT và giá sẽ tự động cập nhật theo. Nếu thế thì ta dùng hàm Vlookup sẽ nhanh hơn.
 
Tôi cũng nghĩ dùng hàm VLOOKUP. Đây là file của tôi đã làm, không biết có đúng với ý của kieuhuy_bmt khoong?! Các bạn cho ý kiến nhé
 

File đính kèm

Muốn VBA sẽ có VBA:

Vậy nhờ các bạn bổ sung nhé "viết bằng VBA thì tốt quá".
mình gửi File của anh tuấn đã làm xong
Muốn có VBA thì đòi hỏi một số iêu cầu sau: Hàng hóa phải có mã;
Trong File mình đã ấn định mã theo chiều tăng dần ( tại Sheet6 - không phải Sheet1 như bạn coi đâu!). Hơn nữa mình viết sẵn 1 macro để gán mã từ sheet6 sang sheet8 ( cũng như trên- không phải là sheet2 như bạn tưởng đâu!)
Và trong quá trình thực hiện việc này mình phát hiện chí ít bạn có 2 lỗi trong sheet8; đó là:
* Thay vì 'Giấy A0 loại 100g/m²', bạn lại dùng 'Giấy Ao loại 100g/m²'
& dòng kề dưới, sau khi tôi chọn từ List lại & cho chạy macro nêu trên, tôi mới thấy xuất hiện mã của nó;
* Còn 5 mặt hàng bên Sh8 không có trong Sh6, bạn xem lại
Theo tôi, nếu bạn khoái VBA thì nên gán mỗi loại hàng hóa trong list nên có mã (bạn dấu Sheet này đi rồi - & tôi cũng không muốn xem, bỡi đơn giản 1 điều là bạn đã dấu!). Một khi có mã thì tránh được 2 sai sót nêu trên!
(Mà tôi nghĩ, không cứ trong VBA, trong excel cũng không thể LOOKUP() ra được một khi bạn sai chính tả của tên hàng hóa!)

Còn đây là macro, xin kỹ niệm cho bạn!
(Xin nói thêm, mình đã thêm mỗi Sheet 1 cột vô trong Sh8 & Sh6; nếu không thích thì có thể ẩn đi. Và đừng lo lắng, VBA làm việc với cả những gì mà chúng ta không thấy!)

PHP:
 Option Explicit:            Option Base 1
 Dim lRow As Long, lRow0 As Long
 Dim iJ As Long, lZ As Long

Sub CopyDonGia()
 Sheet6.Select:     lRow = Range("B65432").End(xlUp).Row
 ReDim MangMa(lRow, 2)
 For iJ = 6 To lRow
    MangMa(iJ - 5, 1) = Cells(iJ, 2):    MangMa(iJ - 5, 2) = Cells(iJ, 5)
 Next iJ
  
 Sheet8.Select:     lRow0 = Range("A65432").End(xlUp).Row
 For lZ = 8 To lRow0
    With Cells(lZ, 2)
        For iJ = 1 To lRow - 5
            If .Value = MangMa(iJ, 1) Then
                .Offset(, 3) = MangMa(iJ, 2):                  Exit For
            End If
        Next iJ
    End With
 Next lZ
      
End Sub
Chúc vui!
 

File đính kèm

Lần chỉnh sửa cuối:
Cái này cũng giống như tra Định mức trong dự toán! Bạn thử xem!
'Ghi chú:
Tên Define Name “vatlieu” và …. bạn nên chuyển về Dynamic Ranges (xem trên diễn đàn)
‘ Bạn đổi tên Sheet cho dễ quản lý
'Danh muc vat lieu(sheet1) = DMVL
'VL_SH(sheet2) = VL_SH
' Chọn Sheet VL_SH -> Right Click -> View Code , copy MUC 1 vào
' Trong cửa sổ Visual Basic (hoặc cửa sổ Excel: Alt + F11): Insert -> Module -> Copy MUC 2 vào

'MUC 1
Option Explicit

Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 3 Then
If Cells(Target.Row, 3).Value <> "" And Cells(Target.Row, 1).Value = "" Then
' Toi dang de khi Cell trong cot 3 thay doi va phu thuoc Cell cot 1 <> 0
GoTo hang1
Else
Exit Sub
End If
hang1:

Cells(Target.Row, 1) = "=Max(R[-1]C:R8C)+1"
' Tu dong vao so thu tu - Neu ban tu danh so thu tu thi bo: And Cells(Target.Row, 1).Value = ""

With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With

Call Ma ' Call Macro

With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End If
End Sub
'HET MUC 1

'MUC 2
Option Explicit

Sub Ma()
On Error GoTo cuoi:

Dim rVLSr, cVLSr, rVL, cVL As Integer
Dim txtSr As String
Dim c As Object

rVLSr = ActiveCell.Row
cVLSr = ActiveCell.Column
txtSr = Sheets("VL_SH").Cells(rVLSr, cVLSr).Value

With Worksheets("DMVL").Range("B:C")
Set c = .Find(What:="" & txtSr & "", LookIn:=xlValues)
rVL = c.Row
cVL = c.Column
End With

With Worksheets("DMVL")
Cells(rVLSr, cVLSr - 1).Value = .Cells(rVL, cVL - 1).Value ' lay MA
Cells(rVLSr, cVLSr + 1).Value = .Cells(rVL, cVL + 1).Value ' lay DV
Cells(rVLSr, cVLSr + 2).Value = .Cells(rVL, cVL + 2).Value ' lay Gia
‘ ………………. Bạn muốn tính thêm phần nào nữa thì nhập liệu ở đây!……….
ActiveCell.Offset(1, 0).Select ' xuong 1 dong
End With
cuoi:
End Sub
'HET MUC 2
 

File đính kèm

Web KT

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

Back
Top Bottom