PCWorld VN
Hỏi: Tôi có một số bảng tính trong Excel và đã cài mật mã cho mỗi bảng tính. Nhưng tôi lại quên mất đoạn mã nên không tài nào mở được tài liệu. Hỏi có cách gì mở được tập bảng tính này không?
Trả lời: Về nguyên tắc, nếu bạn đã quên (hay không biết) password của một file bảng tính (hay bất kỳ file dữ liệu có password nào) thì bạn không thể truy xuất được nó. Tuy nhiên, nếu bảng tính của bạn do Excel 5.0 tạo ra thì bạn có thể nhờ Excel 97 mở lại được dù bạn đã quên password.
Hỏi: Trong Excel, em được biết những hàm tìm kiếm và sắp xếp như: Vlookup, Hlookup, Lookup, nhưng những hàm này chỉ tìm kiếm giá trị khi đã được sắp xếp theo thứ tự tăng dần mới cho kết quả chính xác. Nay em muốn biết có cách nào làm cho sự sắp xếp bất kỳ vẫn cho được kết quả trả về tương ứng với trị cần tìm chính xác không?
Trả lời: Hai hàm Vlookup và Hlookup cho phép tìm kiếm chính xác nội dung trong một bảng có thứ tự hay không có thứ tự, tùy thuộc vào trị thông số được truyền cho nó. Thí dụ hàm Vlookup có header như sau:
VLOOKUP (lookup_value, table_array, col_index_num, range_lookup)
Nếu bạn cần tra trong bảng có thứ tự tăng dần thì bạn thiết lập thông số range_lookup = TRUE, ngược lại nếu muốn tra trong bảng không có thứ tự thì bạn thiết lập thông số range_lookup = FALSE.
Lưu ý rằng khác với 2 hàm Vlookup và Hlookup, hàm Lookup không có khả năng tìm kiếm trên bảng không có thứ tự. Mặt khác nếu bạn muốn tự viết cho mình các hàm tìm kiếm, bạn có thể dùng ngôn ngữ VBA để viết macro thể hiện hàm mong muốn.
Hỏi: Trong Excel, khi mở một bảng tính, có một số cột không hiện ra trên màn hình mặc dù các công thức có trong bảng tính đều có chứa giá trị của cột đó và hàng tương ứng. Em làm theo mọi cách nhưng vẫn không thể nào cho cột đó xuất hiện trở lại, vậy có cách nào làm chúng xuất hiện lại?
Trả lời: Trong Excel, bạn có thể dấu một hay nhiều cột của bảng tính bằng cách chọn chúng rồi thi hành chức năng Format/ Column/ Hide. Để giấu các cột này, Excel chỉ làm động tác rất đơn giản: thiết lập độ rộng của chúng bằng 0. Do đó để giấu các cột, bạn cũng có thể thiết lập trực tiếp độ rộng của chúng về 0. Nếu muốn hiển thị lại các cột bị ẩn, bạn có thể dùng một trong 2 cách sau :
- Chọn các cột trái và phải của một hay nhiều cột bị dấu, thực hiện lệnh Format/ Column/ Unhide.
- Chọn các cột trái và phải của một hay nhiều cột bị dấu, thực hiện lệnh Format/ Column/ Width rồi nhập một giá trị khác không (thí dụ như 10).
Hỏi: Phương pháp để viết một hàm riêng trong bảng tính Excel 97? Em muốn có 1 hàm dịch số sang chữ hoặc làm bằng hình thức nào đó để dịch được. Thí dụ: Số 1.250 dịch thành một ngàn hai trăm năm mươi đồng?
Trả lời: Trong bảng tính Excel 97, bạn có thể dùng macro để viết một hay nhiều hàm riêng cho mình, sau đó gán macro cần chạy với tổ hợp phím hay với một nút nào đó. Macro trong Excel 97 là một thủ tục (subroutine) được viết bằng ngôn ngữ Visual Basic for Applications. Thí dụ sau là macro chuyển giá trị số của ô đang chọn sang dạng chuỗi ký tự rồi hiển thị chuỗi này trong một khung hội thoại.
? Khai bao du lieu
Dim chuso(1 To 10) As String
Dim chu_cach(1 To 4) As String
Dim socandich As Long
? Macro doi so sang trang chu
Sub doiso_chu()
Dim ketqua As String
Dim socandoi As Long
Khoidongthongso
socandoi = Int(ActiveCell.Value) ? Lay phan nguyen
ketqua = str(socandoi) + " duoc doc la : " + so2chu(socandoi)
MsgBox (ketqua)
End Sub
????????????????????????????????
? Khoi dong cac trang du lieu chu duoc dung trong chuong trinh
????????????????????????????????
Private Sub Khoidongthongso()
chu_cach(1) = "ty"
chu_cach(2) = "ngan"
chu_cach(3) = "trieu"
chuso(1) = "mot"
chuso(2) = "hai"
chuso(3) = "ba"
chuso(4) = "bon"
chuso(5) = "nam"
chuso(6) = "sau"
chuso(7) = "bay"
chuso(8) = "tỏm"
chuso(9) = "chin"
End Sub
???????????????????????????????
? Ham doi mot so co toi da 3 ky so thanh trang chu tuong ung
???????????????????????????????
Private Function sotram2chu(socandoi As Integer) As String
Dim shangchuc, shangtram, shangdonvi As Integer
Dim str As String
str = ""
? Kiem tra so co hop le khong
If socandoi >= 1000 Then
sotram2chu = "???"
Exit Function
End If
? Tim 3 ky so mieu ta hang tram, hang chuc va hang don vi
shangtram = socandoi/00
socandoi = socandoi Mod 100
shangchuc = socandoi/10
shangdonvi = socandoi Mod 10
If shangtram >= 1 Then
str = chuso(shangtram) + " tram"
End If
If shangchuc >= 2 Then
str = str + " " + chuso(shangchuc) + " muoi"
ElseIf shangchuc = 1 Then
str = str + " muoi"
End If
If shangdonvi = 0 Then
sotram2chu = str
Exit Function
End If
If shangchuc = 0 Then
If shangtram <> 0 Then
str = str + " le " + chuso(shangdonvi)
Else
str = str + " " + chuso(shangdonvi)
End If
sotram2chu = str
Exit Function
End If
If shangchuc = 1 Then
If shangdonvi <> 5 Then
str = str + " " + chuso(shangdonvi)
Else
str = str + " lam"
End If
sotram2chu = str
Exit Function
End If
If shangdonvi = 1 Then
str = str + " mot"
ElseIf shangdonvi = 5 Then
str = str + " lam"
Else
str = str + " " + chuso(shangdonvi)
End If
sotram2chu = str
End Function
???????????????????????????????
? Ham doi mot so nguyen bat ky thanh trang chu tuong ung
???????????????????????????????
Private Function so2chu(socandoi As Long) As String
Dim idx As Integer
Dim ba_kyso As Integer
Dim str, str_tram As String
Dim tu_ngan_cach As String
idx = 0 ? vi tri dau cham phan cach tung 3 ky so
str = ""
str_tram = ""
While socandoi <> 0
ba_kyso = socandoi Mod 1000
socandoi = socandoi/1000
str_tram = sotram2chu(ba_kyso) ?nen bo cac khoang trong dan dau
If idx = 0 Then ? vi tri don vi
str = str_tram
ElseIf Len(str_tram) <> 0 Then ?vi tri ngan, trieu, ty
tu_ngan_cach = chu_cach((idx Mod 3) + 1)
str = str_tram + " " + tu_ngan_cach + " " + str
ElseIf (idx Mod 3) = 0 Then
str = "ty " + str
End If
idx = idx + 1
Wend
so2chu = str
End Function
Hỏi: Trong Excel 7.0, để tạo một macro có vòng lặp loop, tôi có sử dụng lệnh IF xong thử Macro qua từng bước (Step) thấy máy không thực hiện được lệnh IF như tôi mong muốn (cụ thể là không phân biệt được "False Value"). Toàn bộ cú pháp Macro ấy như sau (Excel 4.0 macro):
= Select ("R1C1")
= For ("Counter", 1, 10)
= Select ("R[1]C")
= IF ("R[1]C" = "R5c5")
= Copy ("R[1]C")
= Paste ("R15C1")
= End.IF()
= Next ()
= Return ()
Nếu Macro trên là không đúng cú pháp vậy khi tôi muốn tạo một Macro bằng ngôn ngữ "Excel 4.0 macro" với mục đích tìm trong một cột đã định (ví dụ C1) các dòng (mẩu tin) có giá trị bằng một ô đã định (ví dụ ô R5C5) và copy các dòng này vào chỗ riêng thì làm thế nào?
Trả lời: Ngôn ngữ macro Excel 4.0 đã lỗi thời. Từ Excel 5.0 trở lên bạn có thể viết macro bằng ngôn ngữ VBA (Visual Basic for Applications). Ngôn ngữ VBA là ngôn ngữ chuẩn của Microsoft và hầu hết các ứng dụng của Microsoft đều hỗ trợ nó. Thí dụ muốn tìm 10 ô đầu của cột 1 ở Sheet1, nếu có ô nào bằng trị tham khảo ở ô C1 thì copy nó sang hàng tương ứng ở cột 2, bạn có thể tạo một macro Excel chứa thủ tục VBA sau:
Sub SearchCopy()
For Row = 1 To 10
If Application.Cells(Row, 1).Value = Application.Cells(1, 3).Value Then
Application.Cells(Row, 2).Value = Application.Cells(Row, 1).Value
End If
Next Row
End Sub
Từ Sheet1 của Workbook hiện hành, bạn nhập 10 trị vào 10 ô đầu ở cột 1, nhập trị tham khảo vào ô đầu ở cột 3, chọn menu Insert/ Macro/ Module rồi nhập thủ tục VBA trên vào cửa sổ trống.
Sau khi nhập xong, bạn chọn button Sheet1 để trở về bảng chứa dữ liệu. Để chạy macro từ Sheet1, bạn chọn menu Tools/ Macro/ SearchCopy/ Run, kết quả sẽ hiển thị ngay ở cột 2.
Hỏi: Trong bảng tính Excel (Office 97), khi muốn có nhiều dòng trong một ô (cell) thì dùng tổ hợp phím Alt+Enter. Có cách nào để các dòng được dàn đều trong ô (như Alignment Justify trong Word) không? (Vì trong Excel chỉ có Left, Right, Center)
Trả lời: Nếu bạn muốn chỉnh dạng văn bản ở chế độ Justify trong từng ô của bảng tính Excel thì bạn không được dùng tổ hợp Alt-Enter để cắt hàng bằng tay như bạn đã làm. Thực vậy, bạn phải nhập dữ liệu liên tục cho đến hết. Mặc định, dữ liệu sẽ được hiển thị ngang trên một hàng (có thể rất dài và bị che khuất bởi dữ liệu của cột bên phải). Bây giờ để chỉnh dạng theo chế độ Justify cho ô vừa nhập, bạn chọn thực đơn Format.Cells.Alignment, và chọn Justify trong hộp Horizontal rồi nhấn OK.
Hỏi: Tôi đang dùng font chữ Việt ABC. Khi sử dụng trong Excel thì một số font bị lỗi, ví dụ như font Tahoma khi gõ 'ngài' thì ra 'ngoi', gõ 'đã' thì ra 'do'. Một số font khác lại không bị.
Trả lời: Nếu bạn chắc chắn chỉ có một số font bị lỗi còn các font ABC khác vẫn hiển thị đúng cùng nội dung nhập vào thì lỗi là do font đó bị hư hay không đúng mã. Trong trường hợp này bạn nên xóa font bị lỗi rồi cài lại nó từ đĩa gốc xem sao.
Hỏi: Công việc của tôi yêu cầu thể hiện trong bảng tính cả phép tính và kết quả của phép tính đó, vì vậy tôi vẫn phải làm theo cách thủ công là nhập phép tính vào một cell (ví dụ:2*3+5=) sau đó sao phép tính này sang một cell bên cạnh, rồi xóa dấu "=" ở cuối phép tính và điền dấu "=" lên đầu phép tính để có kết quả. Đề nghị cho biết trong chương trình Excel có lệnh hoặc công cụ nào giúp người sử dụng lấy nhanh kết quả của phép tính với điều kiện vẫn phải thể hiện cả phép tính và kết quả của phép tính trong bản in ra không?
Trả lời: Để giải quyết vấn đề của bạn, bạn có thể nhập công thức theo cú pháp riêng của bạn vào một cột, Excel sẽ coi đây như là chuỗi ký tự bình thường. Nếu có một macro viết sẵn có nhiệm vụ đọc từng ô chứa công thức của bạn, dời dấu "=" từ cuối chuỗi về đầu chuỗi rồi ghi công thức mới vào ô tương ứng ở cột bên phải thì kết quả của công thức sẽ được hiển thị. Macro tinhcongthuc sau đây sẽ giải quyết vấn đề của bạn. Qui trình tạo macro và kết hợp nó với một nút lệnh để bạn dễ truy xuất nó như sau:
- Chọn thực đơn Tools.Macro .Macros, nhập tên macro cần tạo (thí dụ tinhcongthuc) vào mục Macro Name rồi chọn Create. Trình Visual Basic sẽ chạy và hiển thị khung thủ tục để nhập vào.
- Nhập các lệnh sau vào thân của thủ tục tinhcongthuc:
Sub tinhcongthuc()
Dim a, b As String
For Each c In Selection.Cells
a = c.Value
b = Right(a, 1)
If b = ?=? Then
a = Left(a, Len(a) - 1)
c.Offset(0, 1).Value = b+a
Else
c.Offset(0, 1).Value = ?Error?
End If
Next
End Sub
- Chọn thực đơn View .Toolbars.Customize, chọn nút Command.Macros. Kéo nút Custom button đến một vị trí nào đó trên một thanh công cụ của Excel. Nhấn phím phải vào nút vừa tạo, chọn Edit button Image trong thực đơn xuất hiện để thay đổi hình dạng đồ họa của nút. Chọn Assign macro để liên kết nút với macro tinhcongthuc. Sau cùng, chọn Name để hiệu chỉnh tên nhận dạng của nút.
Bây giờ bạn đã có một nút macro mới với cách dùng như sau :
- Nhập một hay nhiều công thức theo cú pháp riêng của bạn vào một cột, Excel sẽ xem đây như là chuỗi ký tự bình thường.
- Chọn các công thức vừa nhập.
- Nhấn nút tinhcongthuc, các lệnh trong macro sẽ được thi hành và bạn sẽ có kết quả của các công thức bên cột ngay bên phải. Lưu ý việc tính công thức không thể tự động được, do đó nếu có sự thay đổi về công thức của bạn, bạn phải thực hiện lại bước này để Excel tính lại kết quả.
Tùy yêu cầu, bạn có thể hiệu chỉnh lại giải thuật của macro bằng thực đơn Tools.Macro.Macros chọn macro cần hiệu chỉnh rồi nhấn nút Edit. Cửa sổ MS Visual Basic chứa mã lệnh của macro sẽ hiện lên để bạn hiệu chỉnh.
Hỏi: Trong quá trình khai thác sử dụng các công cụ trong Excel tôi có nhu cầu sao chép công thức theo dòng/cột. Nhưng hiện tôi chỉ mới sử dụng được sao chép tham chiếu theo dòng/cột, chức năng địa chỉ tương đối theo dòng/cột hoặc địa chỉ tuyệt đối. Trường hợp cần tham chiếu rộng hơn thì phải thực hiện như thế nào?
- Trong Excel tôi mới chỉ thực hiện được hàm if và một số hàm khác để tìm kiếm theo dòng/cột (chẳng hạn: nếu ô A1 của sheet 2 bằng ô A1 của sheet 1 thì ô B1 của sheet 2 bằng ô B1 của sheet 1...) chứ chưa thực hiện được yêu cầu tìm kiếm toàn bộ cột A cho đến khi thỏa mãn điều kiện.
Trả lời: Trong Excel, bạn có thể tham khảo nội dung của một hay nhiều ô khác theo nhiều mức độ khác nhau như:
- Tham khảo đến ô cục bộ trên cùng Worksheet: chỉ cần miêu tả dòng và cột của ô cần tham khảo. Ví dụ nếu dùng cú pháp miêu tả ô dạng A1, thì để tham khảo ô ở cột C dòng 5 thì ta viết C5 (địa chỉ tương đối) hay $C$5 (địa chỉ tuyệt đối).
- Tham khảo đến ô của worksheet khác trong cùng một workbook: miêu tả tên worksheet, dòng và cột của ô cần tham khảo. Ví dụ nếu dùng cú pháp miêu tả ô dạng A1, để tham khảo ô ở cột C dòng 5 của worksheet tên là dulieunhap thì ta viết dulieunhap!C5 (địa chỉ tương đối) hay dulieunhap!$C$5 (địa chỉ tuyệt đối).
- Tham khảo đến ô của worksheet khác của một workbook khác: miêu tả tên workbook, tên worksheet, dòng và cột của ô cần tham khảo.
Ví dụ nếu dùng cú pháp miêu tả ô dạng A1, thì để tham khảo ô ở cột C dòng 5 của worksheet tên là dulieunhap trong workbook tên là datafile.xls thì ta viết [datafile]dulieunhap!C5 (địa chỉ tương đối) hay [datafile] dulieunhap!$C$5 (địa chỉ tuyệt đối).
Để tìm kiếm ô có nội dung nào đó theo dòng/cột của bảng tính, bạn nên tạo một macro với phát biểu lặp như For, Do, While,... theo cột/hàng.
Hỏi: Chương trình Excel của Office 97 trong thực đơn Data có lệnh Table. Tôi không biết sử dụng ra sao tuy đã có tìm hiểu qua chương trình trợ giúp cũng như tìm các sách về Excel nhưng không thấy nói về lệnh này. Xin cho biết công dụng, cách sử dụng và ví dụ minh họa.
Trả lời: Thực đơn Data.Table của chương trình Excel 97 cho phép bạn
tính các giá trị của một hàm hai biến hay nhiều hàm một biến theo
các trị của biến đó. Ví dụ bạn có một hàm hai biến f(x, y) nào
đó (bạn đã biết công thức của hàm) và muốn tính trị hàm đó theo
các trị của x, y, bạn có thể tiến hành các bước sau :
- Chọn một cell đại diện giá trị x (ví dụ là A1)
- Chọn một cell đại diện giá trị y (ví dụ là B1)
- Nhập công thức của hàm hai biến f(x, y) vào một cell khác (ví dụ
là B2) với các biến x, y được thay bằng các địa chỉ cell đại
điện tương ứng (nghĩa là A1 và B1). Lưu ý, công thức bắt đầu
bằng dấu "=".
- Nhập dãy các trị x cần dùng để tính trị hàm vào cùng hàng với
cell công thức và từ cell này qua phải (từ C2)
- Nhập dãy các trị y cần dùng để tính trị hàm vào cùng cột với
cell công thức và từ cell này trở xuống (từ B3)
- Chọn khối chữ nhật có đỉnh trên trái là cell công thức và hai
cạnh là phần hàng cột chứa các trị x, y
- Chọn thực đơn Data.Table, nhập địa chỉ cell đại diện biến x vào
hộp Row input cell và địa chỉ cell đại điện biến y vào hộp Column
input cell, rồi OK.
Bạn sẽ có được một bảng giá trị của hàm số tương ứng với từng
cặp trị x,y.
Hỏi: Khi làm việc trong bảng tính Excel, trường hợp các công thức trong bảng không thực hiện được thì hiện câu thông báo lỗi. Ví dụ công thức chia cho 0 sẽ hiện #DIV/0! - xem bảng)

Vậy có cách nào làm cho câu thông báo trên khi in không hiện ra được không? Điều kiện công thức đó vẫn giữ nguyên không xóa đi, có nghĩa là chỉ làm ẩn không cho in ra mà thôi).
Trả lời: Nếu doanh thu tháng 4 nằm ở cột B và doanh thu tháng 5 nằm ở cột C thì công thức so sánh nằm ở cột D là =C2/B2. Tuy nhiên công thức này không phải lúc nào cũng cho kết quả đúng, về mặt toán học nếu mẫu số của phép chia bằng 0 thì công thức trên sẽ vô định và Excel sẽ báo lỗi "#DIV/0!". Để tránh việc hiển thị (và in ra) lỗi sai trên, bạn nên sửa công thức trên thành công thức phức tạp hơn như sau:
=IF(B2<>0,C2/B2,"").
Với công thức mới, ta kiểm tra mẫu số trước, nếu khác không thì dùng công thức cũ, còn nếu mẫu số bằng 0 ta sẽ để trống kết quả.
Hỏi: 1/ Tôi muốn lập một Macro trong Excel 97 để vẽ các đồ thị có các vùng số liệu khác nhau và có số phần tử thay đổi. Vì vậy tôi đã thay đổi miền giá trị của SourceData bằng cách đưa vào các biến số. Tuy nhiên khi tôi khai báo:
ActiveChart.SetSourceData Source:=Sheets ("Do thi"). Range("A24: H48"),
PlotBy:=_xlColumns
thì máy không báo lçi, nhưng khi tôi thay ®ỉi cách khai báo, ®Ĩ ®ưa các biÕn sè vào:
Source:=Sheets("Do thi"). Range(Cells(24*m,2),Cells(24*(m+1), 2+songuon)),_
PlotBy:=xlColumns
máy cịng báo lçi:
Run-time error ?1004?:
Method ?Range? of subject ?_Global? failed
Tôi dïng Help thì thÊy dßng thông báo sau xuÊt hiƯn:
The topic does not exit
Contact your application vender for an updated hel file.
ThËm chÝ khi tôi ®ã khai báo lại, không cho các biÕn sè vào nữa như sau:
ActiveChart.SetSourceDataSource:= Sheets("Dothi").Range(Cells(24, 2), Cells(48, 8),
PlotBy:=_xlColumns
thì máy vÉn báo lçi như trên. Tôi không hiĨu mình ®ã mắc lçi gì trong khai báo Source cđa ®å thÞ hay là hiƯn thêi Excel không cho phÐp khai báo như tôi ®ã làm và nÕu như vËy cã cách nào ®Ĩ khắc phơc hay không. Đ©y là mét phÇn Macro vÏ ®å thÞ mà tôi ®ã viÕt :
for m=1 to sothang
Set dothi = Sheets("Do thi").ChartObjects.Add(243 * (m - 1), 512, 243,
512)
dothi.Activate
ActiveChart.ChartType = xlColumnStacked
ActiveChart.SetSourceData
Source:=Sheets("Do thi").Range(Cells(24*m, 2), Cells(24*(m+1),
2+songuon)),_
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Do thi"
next m
Trả lời: Lưu ý rằng "Cells" là một method (hay thuộc tính) của đối tượng, do đó bạn nên miêu tả rõ ràng tên của đối tượng mà bạn cần truy xuất trước method Cells. Tóm lại thủ tục vẽ nhiều đồ thị của bạn có thể viết lại như sau :
Dim sothang As Integer
Dim songuon As Integer
Sub vedothi()
sothang = 12
songuon = 3
For m = 1 To sothang
Set dothi = Sheets("Do thi").ChartObjects.Add(243 * (m - 1), 512, 243,
512)
dothi.Activate
ActiveChart.ChartType = xlColumnStacked
Set sRange = Sheets("Do thi").Cells(24*m, 2)
Set eRange = Sheets("Do thi").Cells(24*(m+1), 2+songuon)
ActiveChart.SetSourceData Source:=Sheets("Do thi").Range(sRange,
eRange), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Do thi"
Next m
End Sub
Với đoạn lệnh trên, chúng tôi dùng 2 biến sRange và eRange để chứa 2 object miêu tả cell đầu và cuối của vùng số liệu cần cho đồ thị. Việc dùng 2 biến này chỉ với mục đích làm chương trình dễ đọc (lệnh SetSourceData sẽ gọn hơn và rõ ràng hơn).
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com