Tổng hợp hỏi đáp về excel (theo pcworld)

Liên hệ QC

skyonline

Thành viên thường trực
Thành viên danh dự
Tham gia
21/7/06
Bài viết
276
Được thích
646
Nghề nghiệp
Sinh Vien
Không biết mấy vấn đề này đã trùng chưa? Nếu trùng thì post lên chắc cũng không sao để mọi người chú ý hơn.

Hỏi: Dùng hàm VLOOKUP, khi thông số "lookup_value" không có thì kết quả trả về là: #N/A. Có cách nào để thiết lập hàm tự động tìm thông số "lookup_value" ở một sheet khác khi không tìm thấy ở sheet hiện hành?



Đáp: Hàm VLookup (hay bất kỳ hàm thư viện nào khác) đều có đặc tả chức năng rõ ràng và xác định, người dùng phải hiểu và sử dụng đúng theo đặc tả của hàm. Bạn tra cứu tài liệu chỉ dẫn về hàm VLookup thì sẽ biết rõ rằng nếu dò tìm không có (và nếu tham số thứ tư của hàm là False) thì hàm sẽ trả về mã lỗi "#N/A". Nếu muốn tìm tiếp 1 hay nhiều sheet khác khi chưa tìm được trong sheet hiện hành, bạn có thể viết 1 hàm user-defined cho riêng mình. Thí dụ hàm MyVLookup do chúng tôi viết như sau:

'Hàm MyVlookup có danh sách tham số y như VLookup
Public Function MyVLookup(val As Variant, r As Range, c As Integer, flag As Boolean) As Variant
'gọi VLookup
MyVLookup = Application.VLookup(val, r, c, flag)
'kiểm tra xem có lỗi không, nếu có trả về 0
If IsError(MyVLookup) Then MyVLookup = 0
End Function

Nếu bạn đặt hàm trên trong 1 file add-ins (thí dụ file *.xla) rồi add vào Excel thì bạn có thể gọi nó ở bất kỳ tài liệu Excel nào. Còn nếu bạn đặt hàm trong 1 module VBA trong file Excel của bạn thì chỉ có file Excel đó dùng được hàm trên thôi.

Bảng dữ liệu Excel có 3 mã hàng: A, B, C. Mỗi mã hàng có 3 loại hàng (1, 2, 3). Cụ thể hàng A1 giá 5000, A2 giá 4500, A3 giá 4000, B1 giá 3000, B2 giá 2500, B3 giá 2000, C1 giá 1000, C2 giá 500, C3 giá 100. Cột A2 có dữ liệu ngẫu nhiên như A1, B2, C3, A3, C3, A1, B1... Cần tính giá trị cột B2 dựa vào bảng dữ liệu và cột A2.
Vấn đề mà bạn cần giải quyết có thể giải quyết bằng các thao tác sau:
• nhập vào bảng tra, bảng này có 9 hàng, mỗi hàng có 2 cột: cột mã hàng và cột giá cả. Giả sử bạn nhập bảng này vào vùng cell từ E1 đến F9.
• nhập danh sách mã hàng cần tính tiền vào 1 cột nào đó, giả sử cột A từ hàng 1.
• nhập công thức tính tiền như sau vào từng cell ở cột tính tiền, thí dụ cột B:
=VLOOKUP(A1,$E$1:$F$9,2)
Lưu ý chỉ cần nhập công thức trên vào cell đầu tiên, sau đó dùng chức năng Copy/Paste để dán công thức vào các cell còn lại của cột tính tiền.
 
Hỏi: Xin chỉ giúp tôi có cách nào so sánh nội dung giữa 2 cột trong Excel. Nếu giống nội dung thì in ra cột thứ 3 là giống, khác thì in là khác.



Đáp:

Website Microsoft Assistance hướng dẫn rất chi tiết cách sử dụng Excel để so sánh dữ liệu trong Microsoft Excel. Bạn dùng từ khóa compare để tìm sẽ được kết quả sau: Use Excel to compare two lists of data
 
Hỏi: 1. Có hàm Excel nào đếm được số lượng trong bảng tính theo nhiều điều kiện, ví dụ: cần đếm số học sinh nữ và dân tộc K'Ho có điểm trung bình từ 5 đến 6. Trong bảng tính đã có các cột Stt: Họ tên học sinh; dân tộc; giới tính; d1, d2, ĐTB.
2. Tạo macro hay cái gì khác để giấu công thức trong Excel không cho người khác nhìn thấy và sửa chữa nó.
3. Tạo một button khi nhấn vào nó sẽ mở ra một sheet (Sheet đó đã bị giấu, bình thường thì không thấy), hoặc vô hiệu sheet đó.



Đáp: 1. Excel có cung cấp hàm tên là CountIf() để đếm số lượng cell thỏa mãn 1 điều kiện nào đó, tuy nhiên khả năng của hàm này không đủ sức giải quyết vấn đề bạn đặt ra. Cách khắc phục là định nghĩa 1 hàm user-defined bằng VBA thực hiện chức năng mà bạn muốn. Cụ thể bạn hãy tiến hành các thao tác sau:

- chạy Excel, mở file Excel chứa danh sách học sinh (gồm nhiều hàng, mỗi hàng 7 cột thông tin của từng học sinh như bạn trình bày). Giả sử danh sách được nhập từ cell đầu tiên là A1 của bảng tính.
- vào menu Tools.Macro.Visual Basic Editor để mở cửa sổ soạn code VBA. Ấn phải chuột trong cửa sổ Project, chọn menu Insert.Module để tạo ra Module VBA mới (tên mặc định là Module1) rồi nhập hàm đếm số record thỏa mãn yêu cầu của bạn như sau:

'hàm có 4 tham số theo yêu cầu của bạn
Function MyCount(rng As Range, dantoc As String, gioitinh As String, tbmin As Double, tbmax As Double) As Integer
'Khai báo các biến cần dùng
Dim count As Integer
Dim i As Integer
Dim tdb As Double
'khởi động số lượng ban đầu
count = 0
'duyệt xử lý từng học sinh trong danh sách
For i = 1 To rng.count
'xác định điểm TB của học sinh từ cell tương ứng
dtb = CDbl(rng.Item(i, 7))
'kiểm tra các điều kiện cần thỏa mãn
If (dantoc = rng.Item(i, 3).Value) And (gioitinh = rng.Item(i, 4).Value) And (tbmin <= dtb) And (dtb <= tbmax) Then
'tìm thỏa thì tăng số lượng đếm
count = count + 1
End If
'trả về số lượng đếm được
MyCount = count
Next i
End Function
- quay về bảng tính Excel ban đầu, dời chuột về 1 cell nào đó mà bạn muốn chứa số lượng học sinh thỏa mãn điều kiện rồi nhập thử công thức sau:
=MyCount(A1:G100,"K'No","Nu", 5.0, 6.0)
Tóm lại nhờ hàm MyCount() ở trên, bạn có thể đếm số lượng học sinh thỏa mãn điều kiện tổng quát hơn: các học sinh thuộc 1 dân tộc nào đó; thuộc phái nào đó và có điểm TB nằm trong phạm vi nào đó.

2. và 3. Việc giấu công thức hay worksheet nào đó thuộc bài toán tổng quát hơn nhiều, đó là bài toán an toàn thông tin. Có 3 vấn đề lớn trong an toàn thông tin, đó là bảo mật, toàn vẹn & nhất quán dữ liệu, sẵn sàng đáp ứng. Trong 3 vấn đề trên, vấn đề bảo mật thường được người dùng quan tâm nhất. Thí dụ thông tin của bạn là file Excel chứa các bảng dữ liệu cùng các module source code xử lý, bạn muốn chỉ có những người dùng nhất định mới được truy xuất file Excel, mỗi người có 1 số quyền truy xuất riêng biệt... Cách chính qui nhất để bảo mật thông tin là hãy để hệ điều hành giải quyết, ứng dụng không nên giải quyết thêm. Hiện WinXP đã giải quyết tốt vấn đề bảo mật thông tin thông qua cơ chế xác nhận người dùng nhờ thông tin account tương ứng, ai có account nào thì được quyền truy xuất các tài nguyên qui định bởi account đó, ai không có account thì không thể vào được WinXP và như thế không thể chạy Excel để truy xuất các file Excel được.
 
Hỏi: Tôi vô tình xóa mất một sheet liên kết trong Excel, làm sao để phục hồi lại sheet này.



Đáp: Bạn không nói rõ là đã xóa mối liên kết đến sheet hay xóa vật lý sheet đó, nhưng nếu bạn đã dùng lệnh "Save" để lưu kết quả lên file thì không thể "undo" các động tác đã thực hiện. Bây giờ muốn khôi phục lại trạng thái cũ thì tùy trường hợp: nếu xóa mối liên kết đến sheet thì hãy tạo lại mối liên kết đó (đây là công việc khá dễ dàng), còn nếu đã xóa vật lý sheet thì phải tạo lại sheet này, nhưng đây là công việc rất nặng nề.
 
Hỏi: Xin hướng dẫn cách tạo 1 buton trong Excel, khi nhấn chuột vào nó sẽ làm thay đổi nội dung của 1 cell được chỉ định trước.



Đáp: Để giải quyết yêu cầu của bạn, bạn hãy thực hiện lần lượt các công việc sau:
1. Chạy Excel, chọn menu Tools.Macro.Macros để hiển thị cửa sổ quản lý macro của Excel. Nhập tên macro mới của bạn (td. Mymacro1), ấn button Create để tạo mới macro này. Khi cửa sổ soạn code VBA của macro hiển thị, bạn hãy viết code miêu tả chức năng mong muốn. Dĩ nhiên bạn phải nắm vững cú pháp ngôn ngữ VBA và yêu cầu cụ thể mà mình muốn thực hiện bởi macro. Sau khi viết code macro xong, bạn chọn menu File.Close and return to Excel để quay về cửa sổ Excel. Thí dụ macro sau sẽ tăng giá trị của cell hiện hành lên 1 đơn vị:

Sub MyMacro1()
ActiveCell.Value = 1+ CInt(ActiveCell.Value)
End Sub

2. Vào menu View.Toolbars.Customize để hiển thị cửa sổ Customize, chọn tab Commands để hiển thị danh sách Command, duyệt tìm trong danh sách và chọn mục Macros để hiển thị các macro hiện có. Duyệt, chọn mục "Custom Button" trong danh sách, ấn giữ nó và drag về vị trí mong muốn trong Toolbar nào đó của Excel để tạo button mới, đóng cửa sổ customize lại.

3. Khi bạn ấn trái chuột lần đầu trên button vừa tạo, Excel sẽ hiển thị danh sách macro hiện hành để bạn chọn 1 macro kết hợp với button. Từ đây trở đi, mỗi lần bạn ấn chuột trên button mới, macro tương ứng sẽ tự động chạy.
 
Hỏi: Bảng tính Excel có 1000 dòng thống kê về số lần lỗi của nhiều thiết bị, trong đó mỗi thiết bị chiếm 10 dòng (thống kê trong 10 giờ), ví dụ:

Loại thiết bị Giờ Số lần lỗi
A1 2 10
A2 3 8
B1 2 2
B2 3 7
A1 3 15
A2 4 7
B1 5 6
B2 6 2

Xin hướng dẫn viết macro tìm giờ có số lỗi cao nhất và in ra 1 sheet (của tất cả các thiết bị).



Đáp: Bài toán của bạn thật ra chưa cần phải viết macro vì Excel đã cung cấp sẵn chức năng để giải quyết trực tiếp. Thí dụ bảng thống kê của bạn được chứa trong 1000 dòng và dùng 3 cột A, B, C nằm ngay dưới dòng tiêu đề, bạn hãy thực hiện các thao tác sau để thực hiện yêu cầu của mình: chọn vùng gồm 1000 dòng dữ liệu trong 3 cột, chọn menu Data.Sort, khi cửa sổ Sort hiển thị, bạn chọn cột 'Loại thiết bị' trong listbox 'Sort by' với tiêu chuẩn 'Ascending', chọn cột 'Số lần lỗi' trong listbox 'Then by' kế tiếp với tiêu chuẩn 'Descending' rồi nhấn button Ok, vùng chọn sẽ được sắp xếp lại theo thứ tự tăng dần dữ liệu trong cột 'Loại thiết bị', các dòng dữ liệu của 1 thiết bị sẽ được để liên tiếp nhau, trong đó dòng đầu tiên của từng thiết bị sẽ miêu tả số lần lỗi max của thiết bị đó cùng giờ xuất hiện lỗi tương ứng:

Loại thiết bị Giờ Số lần lỗi
A1 3 15
A1 2 10
A2 3 8
A2 4 7
B1 5 6
B1 2 2
B2 3 7
B2 6 2

Nếu bạn dùng chức năng 'Record New Macro' để ghi nhận lại các thao tác trên thì macro được tạo ra tương ứng sẽ như sau:

Sub SortErrorMax()
'chọn vùng dữ liệu cần sắp xếp
Range('A2:C1001').Select
'thực hiện sắp xếp theo tiêu chuẩn mong muốn
Selection.Sort Key1:=Range('A2'), Order1:=xlAscending, Key2:=Range('C2'), Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 :=xlSortNormal
End Sub

Lưu ý nếu muốn giữ lại bản dữ liệu nguyên thủy, bạn nên copy nó rồi dán thành 1 bản khác (tốt nhất là trên 1 Sheet khác) rồi thực hiện các thao tác trên bản copy.
 
Hỏi:

Bảng tính Excel có nhiều biểu đồ và công thức, tôi muốn “save as” sang 1 file khác, vẫn giữ nguyên kết quả và biểu đồ nhưng các công thức hoặc biểu đồ không còn tác dụng với một số liệu đầu vào mới, có được không?



Đáp: Về nguyên tắc là không được vì mỗi khi bạn thay đổi giá trị của 1 cell nào đó trong bảng tính, Excel sẽ tự duyệt tìm tất cả các cell và các đối tượng khác có dùng giá trị của cell vừa bị thay đổi rồi cập nhật chúng. Trong trường hợp muốn cố định giá trị của 1 cell chứa công thức hay biểu đồ nào đó, bạn phải thực hiện thủ công các thao tác sau:

• Nếu đó là cell chứa công thức, bạn chọn nó, thực hiện lệnh copy rồi Paste Special.Values để dán lại giá trị hiện hành (công thức của cell đã bị mất vĩnh viễn).
• Nếu đó là biểu đồ, bạn dùng trình Screen Capture để copy biểu đồ thành ảnh bitmap rồi dán lại biểu đồ gốc, như vậy từ đây trở đi biểu đồ chỉ là ảnh bitmap thô nên sẽ không bị cập nhật tự động bởi Excel nữa.
 
Hỏi: Tôi cần tạo 1 đoạn mã macro trong Excel để vẽ biểu đồ từ nguồn dữ liệu của 1 bảng tính cho trước nhưng vì nguồn dữ liệu trong bảng tính lại thay đổi về số hàng cón trong biểu đồ tôi chỉ muốn xuất hiện những dữ liệu có thông số, tuy nhiên việc này không thực hiện được khi tôi thay số hàng cụ thể bằng 1 biến. Ví dụ: ActiveChart.SeriesCollection(1).Select ActiveChart.SetSourceData Source:=Sheets("SAP").Range("AD1:AE12,AG1:AG12"), PlotBy:=xlColumns
Tôi muốn thay đoạn nguồn dữ liệu này bằng vd:range(cells(1,1),cells(m,5)) trong đó m là biến đã khai báo trước đó. Xin hướng dẫn.



Đáp: Sức mạnh của lập trình là ở chỗ dùng biến để miêu tả dữ liệu cần xử lý, do đó bất kỳ lệnh nào của ngôn ngữ nào cũng cho phép dùng biến để miêu tả dữ liệu cần xử lý, còn hằng chỉ là trường hợp đặc biệt của biến mà thôi. Thí dụ bạn có thể miêu tả nguồn dữ liệu của 1 biểu đồ Excel bằng 1 vùng cell biến đổi theo trị các biến, cụ thể bạn có thể dùng các lệnh sau:

'khai báo các biến miêu tả góc trên trái của vùng cell cần vẽ
Dim row1 As Integer, col1 As Integer
'khai báo các biến miêu tả góc dưới phải của vùng cell cần vẽ
Dim row2 As Integer, col2 As Integer
'thiết lập các giá trị theo yêu cầu
'thí dụ vùng vẽ từ A1: B4
row1 = 1: col1 = 1: row2 = 4: col2 = 2
'tạo biểu đồ
Charts.Add
'thiết lập các thuộc tính biểu đồ
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:= Sheets('SAP').Range( Sheets('SAP').

Cells(row1, col1), Sheets("SAP").Cells(row2, col2)), PlotBy:= xlColumns
...
Lưu ý bạn nên dùng thuộc tính Range và Cells trên đối tượng tường minh là Sheet("SAP") của bạn (worksheet chứa dữ liệu vẽ).
 
Hỏi: Tôi làm rất nhiều phương trình phản ứng (PTPƯ) hoá học bằng Excel, chất tham gia hiển thị lần lượt trong các cột “chất 1”, “chất 2” và “chất 3”, còn chất tạo thành hiển thị trong cột “sản phẩm”. Làm thế nào để tìm một PTPƯ tương ứng với các chất trong cột “chất 1”,”chất 2” hoặc cả 3 cột, kết quả tìm được có thể cho ở bất cứ ô nào.



Đáp:

Bạn không trình bày rõ yêu cầu cần giải quyết nên chúng tôi không thể trả lời chính xác. Theo thông tin mà bạn trình bày, bạn chỉ có thông tin về các chất hóa học trong 3 cột và sản phẩm trong cột thứ 4, còn thông tin về các phương trình phản ứng hóa học sử dụng các chất hóa học này lại không được miêu tả. Không biết mỗi bộ 3 chất hóa học thành phần ở 1 hàng nào đó có thể tạo ra bao nhiêu phương trình phản ứng hóa học, cụ thể các phương trình phản ứng này như thế nào?

Giả sử bài toán được phát biểu lại rõ ràng như sau: mỗi bộ 3 chất hóa học ở 1 hàng sẽ tạo ra đúng 1 phương trình phản ứng hóa học để cho ra sản phẩm ở cột “Sản phẩm” tương ứng. Nếu biết 1 hay 2 hay cả 3 chất thành phần làm sao tìm được các PTPƯ có dùng các chất thành phần được biết, rồi hiển thị chỉ số hàng tương ứng trong bảng cho người dùng biết.

Để giải quyết bài toán được chúng tôi phát biểu lại như trên, bạn có thể viết và dùng hàm user-defined bằng ngôn ngữ VBA như sau:

‘Hàm tìm PTPU
Function TimPTPU(rng As Range, chat1 As String, chat2 As String, chat3 As String) As String
‘Khai báo các biến cần dùng
Dim count As Integer
Dim i As Integer
‘ tìm số hàng chứa PTPU
count = rng.count
‘duyệt xử lý từng hàng
For i = 1 To count
If (Len(chat1) <> 0) And (Len(chat2) <> 0) And (Len(chat3) <> 0) Then
‘trường hợp có cả 3 chất
If (chat1 = rng.Item(i, 1).Value) And (chat2 = rng.Item(i, 2).Value) And (chat3 = rng.Item(i, 3).Value) Then
‘tìm được, hiển thị form thông báo
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
ElseIf (Len(chat1) <> 0) And (Len(chat2) <> 0) Then
‘trường hợp có 2 chất: chat1 và chat2
If (chat1 = rng.Item(i, 1).Value) And (chat2 = rng.Item(i, 2).Value) Then
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
ElseIf (Len(chat1) <> 0) And (Len(chat3) <> 0) Then
‘trường hợp có 2 chất: chat1 và chat3
If (chat1 = rng.Item(i, 1).Value) And (chat3 = rng.Item(i, 3).Value) Then
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
ElseIf (Len(chat2) <> 0) And (Len(chat3) <> 0) Then
‘trường hợp có 2 chất: chat2 và chat3
If (chat2 = rng.Item(i, 2).Value) And (chat3 = rng.Item(i, 3).Value) Then
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
ElseIf (Len(chat1) <> 0) Then
‘trường hợp có 1 chất: chat1
If (chat1 = rng.Item(i, 1).Value) Then
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
ElseIf (Len(chat2) <> 0) Then
‘trường hợp có 1 chất: chat2
If (chat2 = rng.Item(i, 2).Value) Then
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
ElseIf (Len(chat3) <> 0) Then
‘trường hợp có 1 chất: chat3
If (chat3 = rng.Item(i, 3).Value) Then
MsgBox “Tìm được PTPU ở hàng “ & (rng.Row + i - 1)
End If
End If
Next i
TimPTPU = “”
End Function

Nếu bạn đặt hàm TimPTPU ở trên trong Module1 của bảng tính Excel chứa bảng số liệu các chất hóa học, thì mỗi khi muốn kích hoạt hàm này chạy từ bảng tính Excel, bạn chỉ cần chọn 1 cell trống nào đó và nhập vào công thức có dạng sau:
=TimPTPU(A1:A100,”Benzen”,””,”Oxy”)
trong đó A1:A100 xác định phạm vi dữ liệu của cột đầu tiên của bảng số liệu, nếu chất nào không cần xác định thì miêu tả chuỗi “” cho nó.
 
Hỏi: Tôi có file Excel với các cột: Họ và tên, Địa chỉ, Số điện thoại... Xin hỏi cách chuyển cơ sở dữ liệu này vào dữ liệu Address Book của Windows XP?



Đáp: Về cơ bản, bạn có thể dùng tiện ích “Address book” của WinXP để quản lý danh sách “Address book” của WinXP. Tiện ích “Address book” cho phép import/export dữ liệu từ/tới nhiều định dạng khác nhau, trong đó định dạng cơ bản nhất là văn bản thô. Tuy nhiên để tiện ích “Address book” hiểu được các thông tin trong 1 database nào đó (như Excel) thì worksheet Excel của bạn cần tuân thủ một số qui định, thí dụ mỗi hàng (record) Excel chỉ nên chứa các field được hiểu bởi “Address book” như “First Name”, “Last Name”... Để có thể tạo được 1 worksheet Excel chứa đúng những thông tin mà trình “Address book” hiểu, bạn có thể tiến hành tuần tự các thao tác sau đây:

1. chạy tiện ích “Address book” (bằng cách chọn Start.All Programs.Accessories.Address book), nếu hiện tại chưa có 1 record thông tin nào thì bạn hãy chọn menu File.New contact... rồi nhập vào 1 số thông tin cho đối tác mong muốn.

2. chọn menu File.Export.Other Address book để hiển thị cửa sổ “Address book Export Tool”, chọn mục “Text File”, chọn button “Export” và xác định file văn bản chứa kết quả. Khi cửa sổ CSW Export hiển thị, bạn hãy đánh dấu chọn vào tất cả các mục trong danh sách rồi chọn button Finish để chương trình xuất thông tin ra file qui định. Nếu bạn dùng WordPad mở file văn bản kết quả ra xem thì sẽ thấy nhiều hàng, hàng đầu gồm nhiều tên field cách nhau bởi dấu phẩy, mỗi hàng còn lại miêu tả 1 account đối tác. Bạn không nên hiệu chỉnh trực tiếp file này vì dễ nhầm lẫn.

3. chạy Excel, chọn menu File.Open, xác định file văn bản cần mở, khi cửa sổ “Text Import Wizard” hiển thị, bạn hãy đánh dấu chọn option “Delimited”, chọn button “Next”, chọn checkbox “Comma”, bỏ chọn checkbox “Tab” rồi chọn button Finish. Excel sẽ hiển thị thông tin trên 1 worksheet, hàng đầu chứa các tên field, các hàng còn lại mỗi hàng chứa thông tin của 1 đối tác. Bạn có thể thêm, bớt, hiệu chỉnh các cell thông tin theo ý muốn. Khi hoàn thành quá trình cập nhật thông tin, bạn chọn menu File.Save As để lưu kết quả theo định dạng text file ban đầu.

4. chạy lại tiện ích “Address book”, chọn menu File.Import.Other Address book để hiển thị cửa sổ “Address book Import Tool”, chọn mục “Text File”, chọn button “Import” và xác định file văn bản chứa thông tin cần Import rồi chọn button Next, Finish để import các thông tin từ file văn bản vào.
 
Hỏi: Xin hỏi làm cách nào để hàm vlookup trong Excel có thể trả về giá trị 0 nếu như giá trị dò không có, tôi đã thử lồng vào hàm if nhưng không được, trong mọi trường hợp nếu vlookup dò không có giá trị đều trả về là #N/A.




Đáp: Hàm VLookup (hay bất kỳ hàm thư viện nào khác) đều có đặc tả chức năng rõ ràng và xác định, người dùng phải hiểu và sử dụng đúng theo đặc tả của hàm. Thí dụ nếu bạn tra cứu tài liệu chỉ dẫn về hàm VLookup thì sẽ biết rõ rằng nếu dò tìm không có (và nếu tham số thứ tư của hàm là False) thì hàm sẽ trả về mã lỗi “#N/A”. Lưu ý rằng nếu chọn giá trị 0 để báo lỗi như bạn đề nghị thì không tổng quát vì giá trị 0 có thể trùng với kết quả tìm được. Tuy nhiên để giải quyết yêu cầu của bạn, cách thông thường là định nghĩa 1 hàm user-defined mới có đặc tả y như hàm VLookup rồi hiệu chỉnh lại mã lỗi “#N/A” về 0. Thí dụ hàm MyVLookup do chúng tôi viết như sau:
‘Hàm MyVlookup có danh sách tham số y như VLookup
Public Function MyVLookup(val As Variant, r As Range, c As Integer, flag As Boolean) As Variant
‘gọi VLookup
MyVLookup = Application.VLookup(val, r, c, flag)
‘kiểm tra xem có lỗi không, nếu có trả về 0
If IsError(MyVLookup) Then MyVLookup = 0
End Function
Nếu bạn đặt hàm trên trong 1 file add-ins (thí dụ file *.xla) rồi add vào Excel thì bạn có thể gọi nó ở bất kỳ tài liệu Excel nào. Còn nếu bạn đặt hàm trong 1 module code của 1 tài liệu Excel thì chỉ có tài liệu Excel đó dùng được thôi.
 
Trước khi Post hết em cũng có một số ý kiến như sau :
Tất cả các bài viết trên đây đều là copy và paste từ tạp chí pcworld . Em cũng chưa kiểm tra có gì mong anh chị bỏ qua.
Vấn đề về "đạo bài" cũng mong các anh chị bỏ qua bởi vì em nghĩ nhưng vấn đề đó tuy không do mình nghĩ ra nhưng cũng có rất nhiều người cần. Tài nguyên trên internet là vô hạn chắc chắn những người đặt ra những câu hỏi này cũng như những người trả lời họ cũng sẽ vui lòng cho phép điều này. Thanks!
 
Hỏi: Sử dụng Excel để tính điểm các đội bóng nhưng không biết lệnh để xếp các đội theo thứ tự từ lớn đến bé ở cột điểm.




Đáp: Tùy theo yêu cầu cụ thể mà bạn có thể chọn 1 trong 2 phương án sau:

Phương án dùng chức năng Data.Sort để sắp xếp vật lý các đội bóng theo thứ tự hạng từ cao đến thấp (hay từ thấp đến cao). Thí dụ ta có bảng điểm của 5 đội bóng như sau:
1. Chọn vùng cell B2:C6 miêu tả các thông tin cần sắp xếp lại. Chọn menu Data.Sort, khi cửa sổ Sort hiển thị, bạn chọn mục “Điểm” trong listbox “Sort by”, chọn option “Descending” rồi chọn button OK, hình sau minh họa trạng thái của các cửa sổ liên quan trong khi bạn thiết lập các tham số sắp xếp:
Kết quả của việc sắp xếp lại danh sách như sau. (lưu ý cột số thứ tự cũng chính là cột miêu tả hạng của từng đội bóng):
2. Phương án dùng hàm Rank() để tính hạng các đội bóng theo thứ tự hạng từ cao đến thấp (hay từ thấp đến cao). Thí dụ với bảng điểm của 5 đội bóng như trên, bạn hãy tạo thêm cột hạng (ở cột D sau cột điểm), đưa cursor về cell D2 (miêu tả hạng của đội bóng đầu tiên là “Đông Á”) rồi nhập vào biểu thức sau:
=RANK(C3;C$2:C$6;0)
Ý nghĩa của biểu thức trên là tính hạng của đội “Đông Á” dựa vào điểm. Lưu ý tham số thứ 2 miêu tả vùng dữ liệu làm cơ sở sắp hạng cho cell điểm C3, bạn nên miêu tả vùng này bằng địa chỉ tuyệt đối. Sau đó copy nội dung công thức vừa nhập và dán vào các cell còn lại ở cột hạng (tức các cell D3:D6). Kết quả hiển thị như hình sau:
 
Hỏi: Xin cho biết công thức để nối (merge) dữ liệu của 2 hay nhiều cell kế tiếp nhau trong MS Excel.




Đáp: Bạn không nói rõ ngữ nghĩa cụ thể của tác vụ “merge” dữ liệu nên chúng tôi chỉ có thể trả lời tổng quát. Tác vụ “merge” (trộn) trong môn “Cấu trúc dữ liệu” là trộn 2 danh sách nhiều phần tử có thứ tự thành 1 danh sách có thứ tự. Chúng tôi chưa thấy tài liệu nào dùng từ “merge” nhiều cell dữ liệu cả, có thể bạn muốn “sort” (sắp xếp) các cell liên tiếp theo thứ tự mong muốn nào đó hay bạn muốn nối kết nội dung dạng chuỗi của các cell thành một chuỗi lớn! Tùy theo yêu cầu cụ thể, bạn sẽ tìm và dùng thuật toán giải quyết cụ thể rồi hiện thực thuật toán đó bằng ngôn ngữ VBA để có thể tác động trên các cell của worksheet Excel.
 
Hỏi: Làm thế nào để thêm một số lệnh thường dùng vào nút phải chuột trong Excel?



Đáp: Excel (hay các ứng dụng khác trong bộ Microsoft Office) quản lý nhiều menu khác nhau, mỗi menu được nhận dạng thông qua tên riêng. Thí dụ menu pop-up được hiển thị mỗi khi bạn ấn phải chuột trên 1 cell bảng tính có tên là menu "Cell". Microsoft cho phép người dùng được toàn quyền truy xuất, hiệu chỉnh nội dung của từng menu. Thí dụ macro VBA sau đây cho phép bạn thêm 1 lệnh (control) mới vào menu pop-up "Cell":

Sub AddMenuItem()
'định nghĩa biến tham khảo đến menu.
Dim objCommandBar As Office.CommandBar
'định nghĩa biến tham khảo đến control option.
Dim objCommandBarButton As Office.CommandBarButton
'Xác định menu "Cell"
Set objCommandBar = Application.CommandBars.Item("Cell")
'thêm 1 option (lệnh) mới vào menu "Cell"
Set objCommandBarButton = objCommandBar.Controls.Add(msoControlButton)
'thiết lập các thuộc tính cho option mới
With objCommandBarButton
.Caption = "Chuc nang 1"
.FaceId = 43
.Style = msoButtonIconAndCaption
.OnAction = "OnChucNang1"
End With
End Sub
'thủ tục xử lý option mới
Sub OnChucNang1()
'thí dụ thông báo cho người dùng biết
MsgBox "Bạn mới ấn chức năng 1"
End Sub
 
Hỏi: Xin hỏi toà soạn: Tôi sử dụng bảng tính Excell, sau khi làm xong tôi vào Tool\protection\protect Sheet và đã bảo vệ bảng tính này bằng mật khẩu. Khi mở lại, tôi quên mật khẩu, nhờ toà soạn chỉ giúp tôi có cách nào tìm lại mật khẩu này không? Xin chân thành cám ơn



Đáp:

Có thể tìm lại được mật khẩu nhưng bạn phải mua phần mềm. Bạn tham khảo các website

http://www.crackpassword.com/products/prs/msoffice/

http://www.elcomsoft.com/aopr.html
 
Hỏi:

Tôi có 1 bảng tính gồm 3 cột và 24 hàng. Tôi muốn viết chương trình tự động nhập vào mỗi ô 1 số ngẫu nhiên từ 1 tới 9999. Yêu cầu là không có số ngẫu nhiên nào trùng nhau.



Đáp:

Bạn có thể dùng hàm Randomize() và hàm Rnd() để tạo số ngẫu nhiên để đặt vào các cell của ma trận. Để tránh dùng lại số ngẫu nhiên cũ, bạn phải kiểm tra trước xem nó có trùng với những giá trị đã dùng chưa. Cụ thể macro sau sẽ thực hiện được yêu cầu của bạn:

Sub CreateRandom()
Dim RandList(0 To 3000) As Integer
Dim count As Integer
Dim num As Integer
count = 0
Khởi động số ngẫu nhiên
Randomize
Duyệt từng cell trong vùng chọn và tạo số tự động
For Each c In Selection
FindRand:
lấy 1 số ngẫu nhiên từ 1 tới 9999
num = Int(Rnd * 9998 + 1)
kiểm tra đã dùng số này chưa
For i = 0 To count
If num = RandList(i)
Then GoTo FindRand
Next
nếu chưa dùng thì thiết lập cho cell hiện hành
c.Value = num
lưu vào danh sách để kiểm tra
RandList(count) = num
count = count + 1
Next
End Sub
Lưu ý để dùng macro trên, bạn phải đánh dấu chọn vùng chứa các cell trên worksheet cần nhập số ngẫu nhiên rồi chạy macro.
 
Hỏi: Trong Microsoft Excel, lúc đầu em gõ thì các từ đều theo chiều ngang, nhưng bây giờ chúng lại thành chiều dọc. Em mong sự giúp đỡ của tạp chí. Em xin cảm ơn!



Đáp:
Trong MS Excel, bạn chọn một hoặc nhiều "cell" cần thay đổi (hoặc chọn tất cả "cell", tùy theo yêu cầu), nhấn Format.Cells....Alignment, thay đổi mục Orientation từ 90 độ về 0 độ.
 
Hỏi: Trong Excel, vào Menu View / Toolbars / Forms thì chỉ có một số Object có thể tạo được như label, listbox, checkbox, option button..., còn một số Object khác không thể tạo được (mờ) như combobox, textbox....



Đáp: Microsoft muốn nâng cấp bảng tính Excel thành Form giao diện của chương trình thay vì chỉ là 1 bảng dữ liệu. Tuy nhiên có thể hiện tại, Microsoft chưa hiện thực đầy đủ nên chỉ cho phép bạn tạo một số điều khiển như label, listbox, checkbox, option button... vào bảng tính, còn các điều khiển khác như textbox... thì sẽ hiện thực trong các version sau này. Tóm lại nếu bạn muốn tạo Form giao diện bất kỳ, bạn nên vào menu Tools.Macros.Visual Basic Editor để tạo User Form rồi thiết kế theo yêu cầu của mình y như bạn đã từng làm trên VB, VC++, Access...
 
Web KT

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

Back
Top Bottom