Giúp tạo 1 hàm theo ý muốn (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

kevintoro

Thành viên mới
Tham gia
7/3/09
Bài viết
18
Được thích
2
AE có thể giúp mình lập một hàm,mình bỏ excel lâu quá không nhớ gì hết hiz.mình có 1 file excel,mình muốn lập 1 hàm sao cho khi text trong D3 có dòng chữ "công ty trách nhiệm hữu hạn","cổ phần",hợp tác xã","dịch vụ",thi ben C3 sẽ được thay bằng "TNHH","CP","HTX","DV".còn lại trong text D3 không xuất hiện mấy chữ trên thi C3 là "DNTN"
Hi vọng được sự giúp đỡ của AE vì chiều nay fai làm cho xếp rồi hiz
 
Đơn giản nhất là bạn cứ if cho khỏe nhé:
C3=IF(D3="công ty trách nhiệm hữu hạn","TNHH",IF(D3="cổ phần","CP",IF(D3="hợp tác xã","HTX",IF(D3="dịch vụ","DV","DNNT"))))
 
Đơn giản nhất là bạn cứ if cho khỏe nhé:
C3=IF(D3="công ty trách nhiệm hữu hạn","TNHH",IF(D3="cổ phần","CP",IF(D3="hợp tác xã","HTX",IF(D3="dịch vụ","DV","DNNT"))))
Không được à nha! Phải dùng hàm Search hoặc cái gì đó thuộc dạng TÌM TEXT
 
đúng rồi tại D3 của mình là 1 text trong đó có tên của công ty chứ không phải là chữ ,hi vọng được AE giúp đỡ
 
đúng rồi tại D3 của mình là 1 text trong đó có tên của công ty chứ không phải là chữ ,hi vọng được AE giúp đỡ
Dạng bài toán này không khó... Làm thì chẳng có vấn đề gì nhưng mà.. nói thật, không có file đính kèm nên cảm thấy lười lắm!
(Ai hỏi bài mà có kèm file thì chắc chắn nhận được nhiều trợ giúp hơn)
 
Ok mình sẽ gởi file đính kèm,hi vọng AE giúp nha,sếp hối quá hiz
 

File đính kèm

Ok mình sẽ gởi file đính kèm,hi vọng AE giúp nha,sếp hối quá hiz
Nếu Cty có tên là:
CÔNG TY TRÁCH NHIỆM HỮU HẠN THƯƠNG MẠI VÀ DỊCH VỤ
thì viết tắt là gì?
Trong khi chở đợi bạn trả lời mục này, tôi làm.. đại
 

File đính kèm

Lần chỉnh sửa cuối:
bạn vẫn để cho mình là TNHH & DV nha bạn,thank bạn đã quan tâm
 
Tại ô C3 bạn nhập công thức sau chắc được nhưng trông hơi kỳ 1 chút

Mã:
=CHOOSE(IF(TYPE(FIND("c«ng ty tr¸ch nhiÖn h÷u h¹n",D3,1))=16,0,1)+IF(TYPE(FIND("cæ phÇn",D3,1))=16,0,2)+IF(TYPE(FIND("hîp t¸c x·",D3,1))=16,0,3)+IF(TYPE(FIND("dÞch vô",D3,1))=16,0,4)+1,"DNTN","TNHH","CP","HTX","DV")
 
AE có thể giúp mình lập một hàm,mình bỏ excel lâu quá không nhớ gì hết hiz.mình có 1 file excel,mình muốn lập 1 hàm sao cho khi text trong D3 có dòng chữ "công ty trách nhiệm hữu hạn","cổ phần",hợp tác xã","dịch vụ",thi ben C3 sẽ được thay bằng "TNHH","CP","HTX","DV".còn lại trong text D3 không xuất hiện mấy chữ trên thi C3 là "DNTN"
Hi vọng được sự giúp đỡ của AE vì chiều nay fai làm cho xếp rồi hiz
Bạn xem File mình làm xó giống cái bạn cần không nhé
 

File đính kèm

ok mình thank bạn nhiều,có dịp mình uống cà phê nha hihi
 
Bạn dùng hàm này nha:

Các bước chuẩn bị:
(1) Thêm 1 cột bên phải cột cần chuyển đổi;
(2) Thêm trang tính trắng & nhập vô đó các dòng muốn chuyển đổi, như sau:
A|B
Old|New
CÔNG TY TRÁCH NHIỆM HỮU HẠN|TNHH
CỔ PHẦN|CP
HỢP TÁC XÃ|HTX
DỊCH VỤ|DV
GIẢI PHÁP EXCEL.COM|GPE
. . . .
Sau đó bôi chọn vùng này & gán cho nó cái tên gợi cảm, như 'BgKe'
(3) Chép hàm sau vô cửa sổ VBE

PHP:
Option Explicit
Function ChuyenDoi(Old As Range, Chuan As Range) As String
 Dim Rw As Long, Jj As Long
 
 Rw = Chuan.Rows.Count
 For Jj = 1 To Rw
   With Chuan
      If InStr(Old.Value, .Cells(Jj, 1).Value) > 0 Then
         ChuyenDoi = Replace(Old, .Cells(Jj, 1).Value, .Cells(Jj, 2).Value)
         Exit Function
      End If
   End With
 Next Jj
End Function
Các bước thực hiện

(*) Tại cột 'E' bạn vừa thêm, ô [E2] bạn nhập cú pháp hàm sau"
=chuyendoi(D2,BgKe)
Sau khi {ENTER} nếu thấy đúng như í thì copy xuống;
(**) Copy & dán Special ngay tại cột này
(***) Xóa cột nào bạn thấy không cần nữa.

Chú ý: Hàm chưa làm với những câu có hai từ/ngữ cần chuyển đổi;
Nếu có như cầu này, cần sửa lại hàm xíu!
Chúc vui!

 
Chỉnh sửa lần cuối bởi điều hành viên:
Tạm sửa lại lần 2 theo ý bạn!
(bài này làm bằng VBA xem chừng dể hơn)
Anh ơi, "DNTN" chứ hỏng phải là "DNTT"...
Xin mượn file của anh, thêm một cột để bỏ cái UDF của em vào:
PHP:
Option Explicit
Function TenTat(Ten As String, BangDo As Range) As String
    On Error Resume Next
    Dim i, j, iC As Integer
    Dim Ten0, Ten1, Ten2 As String
    iC = BangDo.Rows.Count
    For i = 1 To iC
        If InStr(1, Ten, BangDo(i, 1), 1) > 0 Then
            Ten0 = Replace(Ten, BangDo(i, 1), BangDo(i, 2), , , 1)
            Ten1 = BangDo(i, 2)
            Exit For
        End If
    Next
    If Ten1 = "" Then TenTat = "DNTN": Exit Function
    For j = 1 To Len(Ten0)
        If InStr(1, Ten0, BangDo(j, 1), 1) > 0 Then
            Ten2 = BangDo(j, 2): Exit For
        End If
    Next
    If Ten2 = "" Then TenTat = Ten1 Else TenTat = Ten1 & " & " & Ten2
End Function
Cái UDF này, em đã ngừa trước chuyện nhập tên Công ty bằng kiểu gì cũng được, không phân biệt chữ thường, chữ hoa.
 

File đính kèm

Lần chỉnh sửa cuối:
Nếu dùng VBA thì dùng Find sẽ ngon hơn chứ
PHP:
Function TenTat(Ten As Range, Bang As Range, Optional Cot = 2) As String
  Dim Clls As Range, Temp As String
  For Each Clls In Bang.Resize(, 1)
    If Not Ten.Find(What:=Clls.Value, LookAt:=xlPart, MatchCase:=False) Is Nothing Then
      Temp = Temp & " & " & Clls.Offset(, Cot - 1)
    End If
  Next
  If Temp = "" Then
    TenTat = "DNTN"
  Else
    TenTat = Mid(Temp, 4, Len(Temp) - 3)
  End If
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
bạn ơi sao mình copy code của bạn qua bản excel khác nó không được,bạn có thể cho mình hỏi "BangDo" có fải là cái bảng ở sheet2 ko,làm cách nào đặt tên cho khối dữ liệu được
 
Nếu dùng VBA thì dùng Find sẽ ngon hơn chứ
PHP:
Function TenTat(Ten As Range, Bang As Range, Optional Cot = 2) As String
  Dim Clls As Range, Temp As String
  For Each Clls In Bang.Resize(, 1)
    If Not Ten.Find(What:=Clls.Value, LookAt:=xlPart, MatchCase:=False) Is Nothing Then
      Temp = Temp & " & " & Clls.Offset(, Cot - 1)
    End If
  Next
  If Temp = "" Then
    TenTat = "DNTN"
  Else
    TenTat = Mid(Temp, 4, Len(Temp) - 3)
  End If
End Function
Từ khi sinh ra cho đến giờ, hôm nay mới biết đến cái .Find(What:=... ,LookAt:=xlPart, MatchCase:=False)
Cảm ơn anh.
 
hiz minh can 2 bạn,mình chỉ muốn hỏi BangDo la khoi dữ liệu nào vậy hiz,mong 2 bạn chỉ mình
 
hiz minh can 2 bạn,mình chỉ muốn hỏi BangDo la khoi dữ liệu nào vậy hiz,mong 2 bạn chỉ mình
Bạn quét chọn vùng rồi gõ tên khối vào hộp Name Box ấy
Như hình này
attachment.php

Hoặc có thể vào menu Insert\Name\Define mà làm
 

File đính kèm

  • untitled1.JPG
    untitled1.JPG
    14 KB · Đọc: 35
hiz minh can 2 bạn,mình chỉ muốn hỏi BangDo la khoi dữ liệu nào vậy hiz,mong 2 bạn chỉ mình
Bạn có thấy ở bên trái thanh công thức có một cái khung không? Cái khung đó gọi là NameBox:
000-977.jpg


Nhấn vào cái khung đó, bạn sẽ thấy có một cái Name BANGDO:
001-63.jpg


Nhấn vào cái tên BANGDO, Excel sẽ cho bạn biết BANGDO nằm ở đâu...
 
cái đó mình biết,ý mình hỏi la trong code của bạn BNTT có chữ BangDo mình không biết nó có fải là 1 vùng dữ liệu hay là 1 biến trong code,mình đưa code qua file excel khác nó không ra hiz

hiz mình đã làm theo bạn mình ấn vào file LoaiDN_03 của bạn mình chỉ thấy khối dữ liệu TenCTy chứ không thấy BangDo,bạn có thể check lại dùm minh,mình cảm ơn bạn nhiều
 
Chỉnh sửa lần cuối bởi điều hành viên:
cái đó mình biết,ý mình hỏi la trong code của bạn BNTT có chữ BangDo mình không biết nó có fải là 1 vùng dữ liệu hay là 1 biến trong code,mình đưa code qua file excel khác nó không ra hiz

hiz mình đã làm theo bạn mình ấn vào file LoaiDN_03 của bạn mình chỉ thấy khối dữ liệu TenCTy chứ không thấy BangDo,bạn có thể check lại dùm minh,mình cảm ơn bạn nhiều
BangDo không phải là một biến hay là một vùng dữ liệu gì hết... Nó là một tham số của hàm TenTat().

Đây là cú pháp của hàm:
=TenTat(Ten, BangDo)
Khi sử dụng, phải nêu ra muốn lấy tên tắt của Ten nào, và những tên tắt này thì lấy ở trong cái bảng BangDo nào...

Bạn có thể khỏi cần đặt Name (mặc dù đặt Name thì nó khoa học hơn, dễ hiểu hơn), bạn chỉ cần tạo một cái bảng quy định những chữ gõ tắt (CP = Cổ phần...), rồi dùng chuột quét cái bảng đó cũng được.

Ví dụ, ô cần lấy tên tắt (Công ty trách nhiệm hữu hạn....) là ô C1, cái bảng chứa những tên viết tắt bạn tạo tạo H1:J8 chẳng hạn... Thì tại ô sẽ lấy ra cái loại doanh nghiệp của C1, bạn gõ = Tentat(C1, $H$1:$J$8) là xong.

Với trường hợp này, tham số BangDo = $H$1:$J$8
Với file LoaiDN_03, tham số BangDo = TenCty (là một Name)
Với file trước nữa, tham số BangDo = BANGDO (là một Name)

Bạn hiểu tham số của một hàm là gì chứ?
 
Lần chỉnh sửa cuối:
BangDo không phải là một biến hay là một vùng dữ liệu gì hết... Nó là một tham số của hàm TenTat(). Đây là cú pháp của hàm:
=TenTat(Ten, BangDo)

Xin bổ sung: Là tham số, chúng cũng có kiểu dữ liệu của chúng giống với kiểu dữ liệu của các biến

Ví dụ BangDo nêu trên có kiểu dữ liệu là đối tượng - Object, cụ thể ở đây là Range
Nên hàm trên có thể có những cách viết sau, ngoài cú pháp trên:

Function TenTat(Ten As Range , BangDo As Range ) As String
Function TenTat(Ten As String , BangDo As Range ) As String
Function TenTat(Ten As String , BangDo ) As String

Cú pháp mà tác giả hàm đưa ra là cú pháp có thể dùng bất cứ trường hợp nào, Nhưng hơn bị hao tài nguyên chút đỉnh (Vì các tham số đều có kiểu dữ liệu là đối tượng, hoạc kiểu Variant)
:-=
 
Chỉnh sửa lần cuối bởi điều hành viên:

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

Back
Top Bottom