Dùng Function để nạp dữ liệu

  • Thread starter thuyen5d5d
  • Ngày gửi
Trạng thái
Không mở trả lời sau này.
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Em có 1 ý tưởng nhỏ không biết có thực hiện được không là dùng một Function tự tạo để nạp dữ liệu vào một ô được định sẵn ở Sheet khác. Ví dụ: Em đang ở Sheet2 em nhập vào như sau: [B3] =Up(Phong), thì ở ô Sheet1!A1 sẽ có giá trị là Phong. Không biết có ai đã từng nghĩ giống em chưa nhỉ? Nếu có thì cho em xin với! Chúc các bác một ngày vui vẻ!!!>>
 
Khóa học Quản trị dòng tiền
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Em có 1 ý tưởng nhỏ không biết có thực hiện được không là dùng một Function tự tạo để nạp dữ liệu vào một ô được định sẵn ở Sheet khác. Ví dụ: Em đang ở Sheet2 em nhập vào như sau: [B3] =Up(Phong), thì ở ô Sheet1!A1 sẽ có giá trị là Phong. Không biết có ai đã từng nghĩ giống em chưa nhỉ? Nếu có thì cho em xin với! Chúc các bác một ngày vui vẻ!!!>>

Việc này đâu có gì khó, tuy nhiên kết quả để làm gì thì tôi không hình dung ra. Để nạp dữ liệu thường phải qua các bước:
1. Nhập dữ liệu
2. Kiểm tra dữ liệu
3. Xử lý, tính toán dữ liệu
4. Ghi kết quả
Mà các bước trên sử dụng các thủ tục và form thì tốt hơn chứ.
 
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Vấn để ở đây là bí mật cơ. Nên mới ứng dụng vào Function, để người không biết bạn dùng Function gì thôi. Nó còn là một loại nhập liệu ngược so với những cách khác. Ví dụ khi bạn muốn sử lý một thông tin bạn chọn IF(dữ_liệu_vào_để_so_sánh;dữ_liệu_nếu_đúng;dữ_liệu_nếu_sai).
Nhưng tất cả điều chỉ thể hiện ở ngay ô đó thôi. Giờ chơi chán trò đó rồi. Mình lại nghĩ ra sao không cho dữ liệu ra đó nằm ở chổ khác nhĩ. Theo anh thế nào!!???
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Vấn để ở đây là bí mật cơ. Nên mới ứng dụng vào Function, để người không biết bạn dùng Function gì thôi. Nó còn là một loại nhập liệu ngược so với những cách khác. Ví dụ khi bạn muốn sử lý một thông tin bạn chọn IF(dữ_liệu_vào_để_so_sánh;dữ_liệu_nếu_đúng;dữ_liệu_nếu_sai).
Nhưng tất cả điều chỉ thể hiện ở ngay ô đó thôi. Giờ chơi chán trò đó rồi. Mình lại nghĩ ra sao không cho dữ liệu ra đó nằm ở chổ khác nhĩ. Theo anh thế nào!!???

Thế thì coding trong sheet luôn, thí dụ các event của workbook hay các event của worksheet. Tùy vào giá trị, hay hàm nhập vào của ô mà có những lệnh cử lý cho phù hợp.

Thí dụ:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Value = "xxx" then
xxxxxxxx
xxxxxxxxx
else
yyyy
yyy
end if
End Sub
 
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
anh cho ví dụ cụ thể được không. Ví dụ dùng thử hàm =UP(Phong). Với Phong có độ dài không giới hạn, và nó là Text
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Ý của tôi là sử dụng những công cụ khác để xử lý yêu cầu của bạn. Tôi cũng không rõ lắm yêu cầu của bạn là gì. Nếu muốn che công thức thì đã có chức năng Protection.
 
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Em nói rõ vậy mà anh vẫn chưa hiểu sao. Ý là anh lên Sheet2, nhấp vào ô B3 gõ công thức như =If(..) hay =Rand() vậy và bây giờ mình gõ =Up(..) thì thường dữ liệu ngay trên ô đó luôn, ví dụ như anh gõ =Rand() thì nó xuất hiện 0.260662 tại ngay ở ô B3 luôn. Còn =Up(phong) thì chữ Phong ấy không xuất hiện ở ô B3 nữa mà nhảy sang ô khác. Còn hàm ấy vẩn nằm yên đó hoặc có thể hiện chữ [HASHTAG]#NAME[/HASHTAG]? hay cũng chẳng sao miễn là chữ Phong kia đã chạy sang ô khác rồi.
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Em nói rõ vậy mà anh vẫn chưa hiểu sao. Ý là anh lên Sheet2, nhấp vào ô B3 gõ công thức như =If(..) hay =Rand() vậy và bây giờ mình gõ =Up(..) thì thường dữ liệu ngay trên ô đó luôn, ví dụ như anh gõ =Rand() thì nó xuất hiện 0.260662 tại ngay ở ô B3 luôn. Còn =Up(phong) thì chữ Phong ấy không xuất hiện ở ô B3 nữa mà nhảy sang ô khác. Còn hàm ấy vẩn nằm yên đó hoặc có thể hiện chữ #NAME? hay cũng chẳng sao miễn là chữ Phong kia đã chạy sang ô khác rồi.

Nếu như thế thì em không nên dùng function, mà viết các thủ tục bắt từ các event của worksheet hay workbook sẽ tốt hơn nhiều.
Ví dụ các thủ tục:
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

Nếu không dùng VBA thì có thể dùng Dynamic Range hay Name, đặt luôn công thức trong Name luôn.
 
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Anh viết thử cho em luôn đi, em cũng chẳng biết viết thế nào cả?Còn Dynamic Range hay Name là gì vậy? Chỉ em với!!!
 
Sửa lần cuối:
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,373
36
48
48
Goooogle
Anh viết thử cho em luôn đi, em cũng chẳng biết viết thế nào cả?Còn Dynamic Range hay Name là gì vậy? Chỉ em với!!!

Ví dụ attach: Khi nhập bất cứ giá trị kiểu số nào ở sheet Nhap thì sheet ketqua sẽ có giá tị x2, không thì giữ nguyên.

Còn Dynamic Range hay Name là gì vậy? Chỉ em với!!!
Cái này em tìm đọc mấy bài viết của chị handung, hoặc qua giaiphapexcel.com để tìm hiểu kỹ hơn.
 

Đính kèm

  • Vidu.rar
    6.6 KB · Lượt xem: 110
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Cái này gọi là có súng mà thiếu đạn nè. Chị handung ơi, chịu đâu rồi!
Cái này gần giống ý em rồi. Nhưng không phải là bất cứ ô nào, và cũng không phải số.
Bên Sheet Nhap thì bất cứ ô nào và phải có chử bắt đầu là một chữ đặc biệt nào đó thì nó mới chạy còn không thì thôi!
Bên Sheet KetQua thì khi nào đúng chữ đặc biệt đó thì nó chụp lấy nội dung của chữ đó đưa vào ô A1 thôi.
Cảm ơn anh adam_tran đã tìm giùm em!
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
613
104
43
68
HCM city
Dùng hàm & thêm 1 macro

macro:
Private Sub Worksheet_Change(ByVal Target As Range)
Const SChuoi As String = "@#$%^&*"
Dim VTri As Integer
If Not Intersect(Target, Range("C1:C9")) Is Nothing Then
VTri = InStr(SChuoi, Target)
Sheets("KetQua").Range("A" & VTri) = Sheets("Nhap").Range("A" & VTri)
End If
End Sub
Function Update(StrC As String) As String
Dim SoTT As Integer
StrC = UCase$(StrC)
Select Case StrC
Case "AN": SoTT = 1
Case "ANH": SoTT = 2
Case "BY": SoTT = 3
Case "CHANH": SoTT = 4
Case "NAM": SoTT = 5
Case "PHY": SoTT = 6
Case Else: SoTT = 7
End Select
Update = Choose(SoTT, "@", "#", "$", "%", "^", "&", "*")
End Function
 

Đính kèm

  • UpDate.rar
    9 KB · Lượt xem: 102
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Cảm ơn bác trước nha, vì đã rất cố gắng giúp em. Nhưng rất tiết bác lại hiểu sai ý em rồi. Ý em không phải là dùng một hàm để tự thay đổi dữ liệu hiển thị mà chuyển chúng đến nơi khác cơ. Hay có thể nói khác là mình nhập vô chữ gì thì ở ô cố định, sheet khác được hiển thị chữ đó lên.
Ở đây bác nhập "=Update("Anh")" thì nó chỉ hiện lên "#" thôi. Cũng hay hay! Nó giúp người xem không biết bạn viết gì nếu chịu khó làm cho "#" phong phú hơn. Nhưng nó không chuyển chữ "Anh" này vào ô Ketqua!A5 được. Thanks bác nhiều nha!
Bác thử cách này xem sao: Bác tạo một cụm từ gì đó như "=Update(" rồi khi người dùng nhập vào khoảng giữa cặp ngoặc thì dùng lệnh rút trích dữ liệu đó ra đặt vào ô cố định kia. Nó còn phải kèm thêm một lệnh tự động xóa ô được bắt đầu bởi ký tự =Update kia. Không biết có làm khó hơn không? Bác thử xem sao....
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
613
104
43
68
HCM city
Cảm ơn bác trước nha, vì đã rất cố gắng giúp em. Nhưng ý em là dùng một hàm chuyển chúng đến nơi khác cơ. Hay có thể nói khác là mình nhập vô chữ gì thì ở ô cố định, sheet khác được hiển thị chữ đó lên.
Thế bạn chưa xem xét bên sheets("KQua") khi nhập 1 hàm rồi;
Giờ thế này đi: Bạn xóa hết các dữ liệu bên sheets("KQua") & thử {ENTER} hàm Update lại xem bên sheets("KQua") có gì khác xen vô không;
câu lệnh này:
Sheets("KetQua").Range("A" & VTri) = Sheets("Nhap").Range("A" & VTri)
sẽ gán trị thích hợp vô một trong những ô qui định mà!
Trami.jpg
Bác thử cách này xem sao: Bác tạo một cụm từ gì đó như "=Update(" rồi khi người dùng nhập vào khoảng giữa cặp ngoặc thì dùng lệnh rút trích dữ liệu đó ra đặt vào ô cố định kia. Nó còn phải kèm thêm một lệnh tự động xóa ô được bắt đầu bởi ký tự =Update kia. Không biết có làm khó hơn không? Bác thử xem sao....
Còn nếu muốn đặt vô 1 ô cố định bên sheets("KQua") cũng sửa lại dòng lệnh này chút xíu là xong mà
(Thay vì biến VTri đầu của dòng lệnh ta gán nó 1 trị cố định là xong ngay thôi!)
 
Sửa lần cuối:
T

thuyen5d5d

Guest
13/2/08
13
0
0
HCM
Xin lỗi bác nghe. Em sửa nó lại như vậy thì thấy nó mới chịu chạy?!! (Trong vùng C1:Z100)
Private Sub Worksheet_Change(ByVal Target As Range)
Const SChuoi As String = "@#$%^&*"
Dim VTri As Integer
If Not Intersect(Target, Range("C1:Z100")) Is Nothing Then
VTri = InStr(SChuoi, Target)
Sheets("KetQua").Range("C5").Value = Sheets("Nhap").Range("A" & VTri).Value
End If
End Sub
Nhưng nó chỉ chạy khi nhập vào các từ có trong cột A thôi. Vậy bác có thể cho chạy với bất kỳ ký tự nào không? Chứ trường hợp "*" thì nó không có hiện tượng gì xảy ra ở Sheet KetQua cả.
Còn chữ "Value" này thì em nghĩ do phiên bản Excel 2003 mà em đang sử dụng phải không?.
Sorrry!!@!!:005:
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
613
104
43
68
HCM city
(/iết theo iêu cầu, đây!

Thay mới tương ứng vô hàm & sub trên; Chú í biến dùng chung 'Password' nha!

Option Explicit
Public Password As String
Function Update(StrCh As String) As String
Dim bJ As Byte: Dim StrC As String
StrC = "@"
For bJ = 48 To 90
StrC = StrC & Chr(bJ)
Next bJ
Password = StrCh
Update = Left(StrCh, 1) & Mid(StrC, Day(Date), 5)
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C1:C9")) Is Nothing Then
Sheets("KetQua").Range("A5") = Password
End If
End Sub
Quynh.jpg
 
Trạng thái
Không mở trả lời sau này.

Xem nhiều