wuchengcai
Thành viên chính thức


- Tham gia
- 22/6/10
- Bài viết
- 87
- Được thích
- 15
Bạn nói rõ xem nào.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!
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.Bạn nói rõ xem nào.
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.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.
Thực ra mình dùng công thức trên để gắn vào file như đính kèm dưới.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.
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ì.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 B1225 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.
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.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 B1225 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ừ B1215 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.
.
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
Các shapes đó chắc tạo từ phần mềm bản đồ copy dạng ảnh sang ExcelThì 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.
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ác shapes đó chắc tạo từ phần mềm bản đồ copy dạng ảnh sang Excel
Thoải mái. Bản đồ các nước luônBác có tọa độ các tỉnh? (tọa độ đường ranh giới)?
Shapes có đầy đủ trên web này nhé: https://yourfreetemplates.com/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/
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
2. Chỉnh sửa sheetMã: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
- 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
Tôi không có nhu cầu bạn ạ.Shapes có đầy đủ trên web này nhé: https://yourfreetemplates.com/
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 CustomerMì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! B12chỉ kéo dữ liệu Customer!A4:C.
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.1. Bỏ ẩn View!E:E
3. Xóa giúp mình Dropdown View!A1:B1
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 đó.2. View! B12kẻ đườ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
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 đó.
2. Chọn 1 trong 2Bạn giúp mình làm mục 2 và 4 nhé.
=$B12<>""
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
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