Target.Address lấy giá trị sheet khác

Liên hệ QC

wuchengcai

Thành viên chính thức
Tham gia
22/6/10
Bài viết
87
Được thích
15
Mình có bảng tính với 2 sheet "DL" và "QL", khi dữ liệu "G1" của "DL" thay đổi thì "A6:C" của "QL" tự động cập nhật dữ liệu theo.
Bác nào viết giúp đoạn code VBA với hàm Target.Address nhé.
Tks!
 

File đính kèm

  • Lấy dữ liệu sheet khác.xls
    41.5 KB · Đọc: 25
Khi mình nhập Tô Văn G vào ô G1 sheet "DL" thì giá trị A6:C6 sheet "QL" cũng thay đổi theo. Mình muốn dùng Target.Address để lấy dữ liệu qua nhưng không biết viết code.
Cứ mỗi lần nhập G1 thì dữ liệu được thêm nối tiếp vào sheet QL hay ghi đè vào A6:C6? Nếu ghi đè thì dùng luôn công thức chứ code làm gì? Vd. dùng công thức với VLOOKUP.
 
Cứ mỗi lần nhập G1 thì dữ liệu được thêm nối tiếp vào sheet QL hay ghi đè vào A6:C6? Nếu ghi đè thì dùng luôn công thức chứ code làm gì? Vd. dùng công thức với VLOOKUP.
Thực ra mình dùng công thức trên để gắn vào file như đính kèm dưới.
Trong file đính kèm, mỗi khi bấm vào hình tròn màu đỏ sheet "View" để chọn 1 tỉnh thành thì dữ liệu B12:D25 sẽ TỰ ĐỘNG CẬP NHẬT theo dữ liệu sheet "Customer". Hiện tại mình đang dùng ô phụ L5 sheet "View" để cập nhật thủ công, không chuyên nghiệp và tốn thời gian.
 

File đính kèm

  • B2 Sales.xlsm
    2 MB · Đọc: 32
Thực ra mình dùng công thức trên để gắn vào file như đính kèm dưới.
Trong file đính kèm, mỗi khi bấm vào hình tròn màu đỏ sheet "View" để chọn 1 tỉnh thành thì dữ liệu B12:D25 sẽ TỰ ĐỘNG CẬP NHẬT theo dữ liệu sheet "Customer". Hiện tại mình đang dùng ô phụ L5 sheet "View" để cập nhật thủ công, không chuyên nghiệp và tốn thời gian.
Vì tập tin của bạn chứa dữ liệu tiếng nước ngoài nên tôi không biết cái gì là gì.

Bạn nên miêu tả cụ thể bằng 1 ví dụ. Vd. tôi nhấn nút đỏ của Bình định thì TextBox 26 sẽ hiện "BINH DINH". Tiếp theo bạn muốn kéo dữ liệu từ Customer sang View. Nhưng dựa trên tiêu chí nào? Tiêu chí "BINH DINH"? Nhưng người không biết ngôn ngữ "kia" làm sao biết được BINH DINH nó ở đâu để mà tìm? Hay là kéo từ data chứ không phải là kéo từ Customer?

Mà dù kéo từ sheet nào thì cũng dùng công thức được chứ nhỉ.

Mà thôi. Nếu bạn muốn người khác giúp thì giải thích cặn kẽ. Giả sử tôi chọn BINH DINH thì code phải làm những gì, cụ thể từng bước một: lấy cái gì trên cơ sở nào, xào nấu ra sao và theo tiêu chí nào v...v

Góp ý ngoài lề:
- không nên chèn hàng loạt shape ở dạng nút đỏ.
- không nên có hàng loạt sub Sub QuangTri, Sub ThuaThienHue ...

Khi tạo bản đồ thì gán cho các shape những tên như QuangTri, ThuaThienHue ... Lúc đó chỉ dùng 1 sub TINH gán (Assign macro) cho tất cả các shape. Trong sub TINH code sẽ xác định shape nào được nhấn từ đó có tên Tỉnh.

Bạn tạo bản đồ bằng cách nào vì tôi không thấy code tạo bản đồ? Tôi nghĩ là bạn chạy code 1 lần để tạo bản đồ rồi xóa code rồi. Nếu các shape trong data không cần nữa thì xóa đi cho nhẹ tập tin chứ nhỉ.
 
Vì Dashboard này để báo cáo cho các sếp nước ngoài xem nên mình mới dùng tiếng Trung.
Tại sheet View, hiện tại khi nhấn nút đỏ các tỉnh thì chỉ có dữ liệu của các biểu đồ thay đổi, còn dữ liệu B12:D25 phải bấm chọn ô L5 mới hiện ra.
Yêu cầu của mình là: Khi nhấn nút đỏ của Bình Định thì TextBox 26 sẽ hiện "BINH DINH" và dữ liệu từ B12:D15 sheet View sẽ kéo dữ liệu từ A40:C43 sheet Customer bỏ qua. Thao tác tương tự lập lại cho các nút đỏ của tỉnh thành khác.
Bản đồ không có code nào hết nhé bạn.

Bạn giúp mình chỉnh cái này luôn nhé:
Góp ý ngoài lề:
- không nên chèn hàng loạt shape ở dạng nút đỏ.
- không nên có hàng loạt sub Sub QuangTri, Sub ThuaThienHue ...

Khi tạo bản đồ thì gán cho các shape những tên như QuangTri, ThuaThienHue ... Lúc đó chỉ dùng 1 sub TINH gán (Assign macro) cho tất cả các shape. Trong sub TINH code sẽ xác định shape nào được nhấn từ đó có tên Tỉnh.
 
Tôi đã yêu cầu rất rõ. Nếu không hiểu thì không ai giúp được.
Tại sheet View, hiện tại khi nhấn nút đỏ các tỉnh thì chỉ có dữ liệu của các biểu đồ thay đổi, còn dữ liệu B12:D25 phải bấm chọn ô L5 mới hiện ra.
Yêu cầu của mình là: Khi nhấn nút đỏ của Bình Định thì TextBox 26 sẽ hiện "BINH DINH" và dữ liệu từ B12:D15 sheet View sẽ kéo dữ liệu từ A40:C43 sheet Customer bỏ qua.
Bản đồ không có code nào hết nhé bạn.
.
Cụ thể là thế nào nếu tôi nhấn BINH DINH? Căn cứ vào đâu, dựa trên cái gì, để lấy từ đâu. Hãy liệt kê tỉ mỉ tất cả các bước "B12: D15 sheet View sẽ kéo dữ liệu từ A40:C43 sheet Customer ". Tôi không muốn bỏ công ra dò xem bạn làm như thế nào khi chính bạn có thể nói qua.

Thì bản thân tôi cũng nói là không có code tạo bản đồ. Vì thế tôi hỏi bạn đã tạo ra bằng cách nào. Từ các shape bên sheet data? Muốn gộp các phần sau thì phải đặt tên cho các shape tỉnh ngay trong quá trình tạo bản đồ. Vì thế tôi hỏi. Nếu bạn muốn tôi có thể tạo cho bạn bản đồ vì tôi có các tọa độ của các tỉnh. Lúc đó không dùng các shape của bạn trong sheet data.

Bản phải giải thích chi tiết. Mà thực ra cũng không bắt buộc. Tùy bạn chọn thôi. Nói sao cho người khác hiểu.
 
Sheet View dòng code như dưới:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$L&$5" Then TR

End Sub
--------------------------------------------------------------------
Sub TR()
Application.ScreenUpdating = False
Sheets("View").Select
Range("A3:E65536").Clear
Sheets("Customer").Select
Range("A3.D65536").AdvancedFilter _
xlFilterCopy, [F1.F2], Sheets("View").[B11]
Sheets("View").Select
Range("E:E").Select
Selection.EntireColumn.Hidden = True
Range("B12:D25").ShrinkToFit = True


Application.ScreenUpdating = True
End Sub


Vị trí L5 trong đoạn code If Target.Address = "$L&$5" Then TR nếu lấy từ địa chỉ F2 sheet Customer thì chỉnh thành đoạn code thế nào?
 
Vấn đề của bạn mà bạn không thể mô tả từ A tới Z? Đừng mô tả từ H đến N.
Tôi mô tả từ A tới Z theo cách hiểu của tôi. Đúng ý thì tốt, ngược lại thì thôi.

"Khi nhấn mỗi nút đỏ được gán cho một tỉnh cụ thể thì code thực hiện các bước: nhập tên tỉnh hiện hành vào X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33 -> nhập tên tỉnh vào TextBox 26 -> nhập tên tỉnh bằng tiếng Trung vào data!T2 -> nhập data!T2 vào TextBox 168 -> lọc Customer!A: D theo cột D - cột province với điều kiện là data!T2 (tên tỉnh bằng tiếng Trung)"

Tôi hướng dẫn cho mô tả ở trên.

1. Trước hết là code
- xóa code trong sheet View
- xóa toàn bộ code trong Module1 và thay bằng
Mã:
Sub Overview()
   
Sheets("data").Range("X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33") = "Overview"
ActiveSheet.Shapes.Range(Array("TextBox 26")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "OVERVIEW"
       
End Sub

Sub write_province()
Dim province As String
    province = Application.Caller
    Sheets("data").Range("X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33") = province
    ActiveSheet.Shapes("TextBox 26").TextFrame2.TextRange.Characters.Text = province
    filter_data Worksheets("data").Range("T2").Value
End Sub

Sub filter_data(ByVal province As String)
Dim lastRow As Long, r As Long, c As Long, count As Long, data()
    With ThisWorkbook.Worksheets("View")
        lastRow = .Cells(Rows.count, "E").End(xlUp).Row
        If lastRow > 11 Then .Range("B12:E" & lastRow).ClearContents
    End With
    With ThisWorkbook.Worksheets("Customer")
        lastRow = .Cells(Rows.count, "B").End(xlUp).Row
        If lastRow < 4 Then Exit Sub
        data = .Range("A4:D" & lastRow).Value
    End With
    For r = 1 To UBound(data)
        If data(r, 4) = province Then
            count = count + 1
            For c = 1 To 4
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then ThisWorkbook.Worksheets("View").Range("B12").Resize(count, 4).Value = data
End Sub
2. Chỉnh sửa sheet
- xóa Customer!F1:F2
- xóa View!O3
- phải chuột trên nút đỏ của Quanh Tri -> trong Name Box ở bên trái của thanh công thức sửa thành Quang Tri -> Với các nút đỏ khác (chỉ các nút đỏ đi với các tỉnh) làm tương tự và nhập tỉnh thích hợp với từng nút. Các tên tỉnh phải đúng như các tên có trong cột data!B
- phải chuột trên nút đỏ của Quanh Tri -> chọn Assign Macro -> chọn write_province. Với các nút đỏ khác (chỉ các nút đỏ đi với các tỉnh) làm tương tự và cũng chọn write_province
 
Thì bản thân tôi cũng nói là không có code tạo bản đồ. Vì thế tôi hỏi bạn đã tạo ra bằng cách nào. Từ các shape bên sheet data? Muốn gộp các phần sau thì phải đặt tên cho các shape tỉnh ngay trong quá trình tạo bản đồ. Vì thế tôi hỏi. Nếu bạn muốn tôi có thể tạo cho bạn bản đồ vì tôi có các tọa độ của các tỉnh. Lúc đó không dùng các shape của bạn trong sheet data.
Các shapes đó chắc tạo từ phần mềm bản đồ copy dạng ảnh sang Excel

Bác có tọa độ các tỉnh? (tọa độ đường ranh giới)?
 
Các shapes đó chắc tạo từ phần mềm bản đồ copy dạng ảnh sang Excel
Thế thì tôi mới hỏi. Tôi có cảm giác là trước tiên các ảnh được chèn bằng tay vào sheet data. Sau đó copy/paste vào sheet View. Tiếp theo bằng tay dùng chuột dịch chuyển các ảnh để làm khớp các ảnh tạo nên bản đồ.

Cách trên làm một lần thì được và phải cần cù. Chứ thỉnh thoảng có tập tin mới cần tạo bản đồ mà làm như thế thì thà nghỉ việc về nhà nhậu cho sướng.

Bác có tọa độ các tỉnh? (tọa độ đường ranh giới)?
Thoải mái. Bản đồ các nước luôn

http://www.amcharts.com/svg-maps/
 
Thế thì tôi mới hỏi. Tôi có cảm giác là trước tiên các ảnh được chèn bằng tay vào sheet data. Sau đó copy/paste vào sheet View. Tiếp theo bằng tay dùng chuột dịch chuyển các ảnh để làm khớp các ảnh tạo nên bản đồ.

Cách trên làm một lần thì được và phải cần cù. Chứ thỉnh thoảng có tập tin mới cần tạo bản đồ mà làm như thế thì thà nghỉ việc về nhà nhậu cho sướng.


Thoải mái. Bản đồ các nước luôn

http://www.amcharts.com/svg-maps/
Shapes có đầy đủ trên web này nhé: https://yourfreetemplates.com/
 
Vấn đề của bạn mà bạn không thể mô tả từ A tới Z? Đừng mô tả từ H đến N.
Tôi mô tả từ A tới Z theo cách hiểu của tôi. Đúng ý thì tốt, ngược lại thì thôi.

"Khi nhấn mỗi nút đỏ được gán cho một tỉnh cụ thể thì code thực hiện các bước: nhập tên tỉnh hiện hành vào X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33 -> nhập tên tỉnh vào TextBox 26 -> nhập tên tỉnh bằng tiếng Trung vào data!T2 -> nhập data!T2 vào TextBox 168 -> lọc Customer!A: D theo cột D - cột province với điều kiện là data!T2 (tên tỉnh bằng tiếng Trung)"

Tôi hướng dẫn cho mô tả ở trên.

1. Trước hết là code
- xóa code trong sheet View
- xóa toàn bộ code trong Module1 và thay bằng
Mã:
Sub Overview()
  
Sheets("data").Range("X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33") = "Overview"
ActiveSheet.Shapes.Range(Array("TextBox 26")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "OVERVIEW"
      
End Sub

Sub write_province()
Dim province As String
    province = Application.Caller
    Sheets("data").Range("X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33") = province
    ActiveSheet.Shapes("TextBox 26").TextFrame2.TextRange.Characters.Text = province
    filter_data Worksheets("data").Range("T2").Value
End Sub

Sub filter_data(ByVal province As String)
Dim lastRow As Long, r As Long, c As Long, count As Long, data()
    With ThisWorkbook.Worksheets("View")
        lastRow = .Cells(Rows.count, "E").End(xlUp).Row
        If lastRow > 11 Then .Range("B12:E" & lastRow).ClearContents
    End With
    With ThisWorkbook.Worksheets("Customer")
        lastRow = .Cells(Rows.count, "B").End(xlUp).Row
        If lastRow < 4 Then Exit Sub
        data = .Range("A4:D" & lastRow).Value
    End With
    For r = 1 To UBound(data)
        If data(r, 4) = province Then
            count = count + 1
            For c = 1 To 4
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then ThisWorkbook.Worksheets("View").Range("B12").Resize(count, 4).Value = data
End Sub
2. Chỉnh sửa sheet
- xóa Customer!F1:F2
- xóa View!O3
- phải chuột trên nút đỏ của Quanh Tri -> trong Name Box ở bên trái của thanh công thức sửa thành Quang Tri -> Với các nút đỏ khác (chỉ các nút đỏ đi với các tỉnh) làm tương tự và nhập tỉnh thích hợp với từng nút. Các tên tỉnh phải đúng như các tên có trong cột data!B
- phải chuột trên nút đỏ của Quanh Tri -> chọn Assign Macro -> chọn write_province. Với các nút đỏ khác (chỉ các nút đỏ đi với các tỉnh) làm tương tự và cũng chọn write_province

Mình làm theo code của bạn được rùi. Tuy nhiên, còn vài chỗ nhờ bạn hỗ trợ giúp:
1. View! B12:D chỉ kéo dữ liệu Customer!A4:C. Bỏ ẩn View!E:E
2. View! B12:D kẻ đường viền border màu hồng (giống border bên Customer) khi dữ liệu thay đổi theo từng tỉnh.
3. Xóa giúp mình Dropdown View!A1:B1
4. Khi ấn nút đỏ của từng tỉnh thì Shapes bản đồ của tỉnh đó (hoặc Nút đỏ của tỉnh đó) sẽ sáng lên.
5. Chạy chữ từ phải sang trái Textbox View!A1:F5
Cám ơn bạn nhiều!
 
Mình làm theo code của bạn được rùi. Tuy nhiên, còn vài chỗ nhờ bạn hỗ trợ giúp:
1. View! B12:D chỉ kéo dữ liệu Customer!A4:C.
Tôi đã cố tình bỏ ẩn View!E:E để xem bạn lấy những cột nào. Tôi thấy cột E có dữ liệu nên lấy cả cột E. Tôi không kiểm tra dữ liệu cột View!E:E vì tôi không biết ngoại ngữ. Nhưng tôi thấy bảng có 4 cột (rõ ràng cột 4 có tiêu đề là Province chứ không phải tôi bịa ra) y như bên Customer
1. Bỏ ẩn View!E:E
3. Xóa giúp mình Dropdown View!A1:B1
Thế bạn không làm bằng tay được à? Tôi chỉ giúp những cái bạn tự không làm được chứ không phải cầy thay bạn.
2. View! B12:D kẻ đường viền border màu hồng (giống border bên Customer) khi dữ liệu thay đổi theo từng tỉnh.
4. Khi ấn nút đỏ của từng tỉnh thì Shapes bản đồ của tỉnh đó (hoặc Nút đỏ của tỉnh đó) sẽ sáng lên.
5. Chạy chữ từ phải sang trái Textbox View!A1:F5
Bạn có 3 cơ hội để mô tả, trình bầy mọi yêu cầu. Nhưng bạn không lợi dụng triệt để các cơ hội đó.
 
Tôi đã cố tình bỏ ẩn View!E:E để xem bạn lấy những cột nào. Tôi thấy cột E có dữ liệu nên lấy cả cột E. Tôi không kiểm tra dữ liệu cột View!E:E vì tôi không biết ngoại ngữ. Nhưng tôi thấy bảng có 4 cột (rõ ràng cột 4 có tiêu đề là Province chứ không phải tôi bịa ra) y như bên Customer

Thế bạn không làm bằng tay được à? Tôi chỉ giúp những cái bạn tự không làm được chứ không phải cầy thay bạn.

Bạn có 3 cơ hội để mô tả, trình bầy mọi yêu cầu. Nhưng bạn không lợi dụng triệt để các cơ hội đó.

Cám ơn bạn nhiều nhé.
Mình mới tập tành excel nên còn nhiều thứ chưa biết.
Mình làm được mục 1,3,5 rồi. Bạn giúp mình làm mục 2 và 4 nhé.
 
Bạn giúp mình làm mục 2 và 4 nhé.
2. Chọn 1 trong 2
- dùng CF: chọn vd. B12: D100 (100 là vd., chọn số dòng đủ lớn cho tương lai) -> phải chuột chọn Format Cells -> thẻ Border -> chọn None (xóa định dạng hiện hành) -> OK -> Conditional Formating -> New Rule -> "Use a formula ..." -> nhập công thức
Mã:
=$B12<>""
-> nhấn nút "Format ..." -> thẻ Border -> chọn mầu hồng -> chọn | , __ , | -> OK -> OK

- dùng code: nội dung mới của filter_data
Mã:
Sub filter_data(ByVal province As String)
Dim lastRow As Long, r As Long, c As Long, count As Long, data()
    With ThisWorkbook.Worksheets("View")
        lastRow = .Cells(Rows.count, "B").End(xlUp).Row
        If lastRow > 11 Then .Range("B12:D" & lastRow).Clear
    End With
    With ThisWorkbook.Worksheets("Customer")
        lastRow = .Cells(Rows.count, "B").End(xlUp).Row
        If lastRow < 4 Then Exit Sub
        data = .Range("A4:D" & lastRow).Value
    End With
    For r = 1 To UBound(data)
        If data(r, 4) = province Then
            count = count + 1
            For c = 1 To 3
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then
        With ThisWorkbook.Worksheets("View").Range("B12").Resize(count, 3)
            .Value = data
            .Borders.Color = RGB(250, 0, 200)
        End With
    End If
End Sub

4. Phải chuột trên từng nút -> Format shape -> Fill -> chọn "Solid fill" -> Close
Nội dung mới của write_province
Mã:
Sub write_province()
Dim province As String, lastShape As Long
    province = Application.Caller
    With Worksheets("View")
'        chuyen mau cua nut cuoi cung ve do
        If .Shapes("Quang Tri").AlternativeText <> "" Then .Shapes(.Shapes("Quang Tri").AlternativeText).Fill.ForeColor.RGB = RGB(255, 0, 0)
'        nho ten nut hien hanh vao AlternativeText cua nut "Quang Tri"
        .Shapes("Quang Tri").AlternativeText = province
'        chuyen mau cua nut hien hanh thanh green
        .Shapes(province).Fill.ForeColor.RGB = RGB(0, 255, 0)
    End With
    Sheets("data").Range("X3,X10,X17,X19,X21,X23,X25,X27,X29,X31,X33") = province
    With ActiveSheet
        .Shapes("TextBox 26").TextFrame2.TextRange.Characters.Text = province
        province = Worksheets("data").Range("T2").Value
        .Shapes("TextBox 168").TextFrame2.TextRange.Characters.Text = province
    End With
    filter_data province
End Sub
 
Cám ơn bạn nhiều nhé.
Chúc bạn năm mới An Khang Thịnh Vượng!
 
Web KT
Back
Top Bottom