Xin code VBA trả về tên tài khoản theo điều kiện (1 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

Thanh Binh111

Thành viên chính thức
Tham gia
28/11/20
Bài viết
63
Được thích
18
Xin chào mọi người!

Nhờ mọi người hỗ trợ mình bài toán này ạ:

Dữ liệu gốc: Mình có 1 cột dữ liệu nội dung hơi lộn xộn như bên dưới, nhưng có điểm chung là trong mỗi ô sẽ chứa 1 tên tài khoản, tên tài khoản định dạng thông thường là chữ cái hoặc số hoặc chữ cái và số viết liên tiếp không có dấu cách trống.

Dữ liệu trả về: trả về tên tài khoản ứng với mỗi ô, với các điều kiện như sau:
  • Nếu ô dữ liệu có chữ “mua sam” hoặc “MUA SAM”: thì trả về chuỗi ký tự liên tiếp không có dấu cách ngay sau chữ “mua sam” hoặc “MUA SAM”.
  • Nếu ô dữ liệu không có chữ “mua sam” hoặc “MUA SAM”: thì trả về chuỗi ký tự liên tiếp không có dấu cách đầu tiên tính từ trái qua phải.
Như file đính kèm, nhờ mọi người cho mình xin đoạn code VBA xử lý vấn đề này ạ.

Xin cảm ơn mọi người nhiều ạ!
DỮ LIỆU GỐCDỮ LIỆU TRẢ VỀ
mua sam HUONGZIN95HUONGZIN95
mua sam HUYNA2016HUYNA2016
mua sam JINJINCOMJINJINCOM
MUA SAM VINH830818VINH830818
mua sam LAMLUONG9CLAMLUONG9C
NANGLE203NANGLE203
mua sam PHATTAI142PHATTAI142
mua sam CX5138 315062 315062CX5138
mua sam TEOEM02TEOEM02
MUA SAM 09657159960965715996
VANDUNG77UVANDUNG77U
 

File đính kèm

Xin chào mọi người!

Nhờ mọi người hỗ trợ mình bài toán này ạ:

Dữ liệu gốc: Mình có 1 cột dữ liệu nội dung hơi lộn xộn như bên dưới, nhưng có điểm chung là trong mỗi ô sẽ chứa 1 tên tài khoản, tên tài khoản định dạng thông thường là chữ cái hoặc số hoặc chữ cái và số viết liên tiếp không có dấu cách trống.

Dữ liệu trả về: trả về tên tài khoản ứng với mỗi ô, với các điều kiện như sau:
  • Nếu ô dữ liệu có chữ “mua sam” hoặc “MUA SAM”: thì trả về chuỗi ký tự liên tiếp không có dấu cách ngay sau chữ “mua sam” hoặc “MUA SAM”.
  • Nếu ô dữ liệu không có chữ “mua sam” hoặc “MUA SAM”: thì trả về chuỗi ký tự liên tiếp không có dấu cách đầu tiên tính từ trái qua phải.
Như file đính kèm, nhờ mọi người cho mình xin đoạn code VBA xử lý vấn đề này ạ.

Xin cảm ơn mọi người nhiều ạ!
DỮ LIỆU GỐCDỮ LIỆU TRẢ VỀ
mua sam HUONGZIN95HUONGZIN95
mua sam HUYNA2016HUYNA2016
mua sam JINJINCOMJINJINCOM
MUA SAM VINH830818VINH830818
mua sam LAMLUONG9CLAMLUONG9C
NANGLE203NANGLE203
mua sam PHATTAI142PHATTAI142
mua sam CX5138 315062 315062CX5138
mua sam TEOEM02TEOEM02
MUA SAM 09657159960965715996
VANDUNG77UVANDUNG77U
Bạn thử dùng chức năng FlashFill coi
 
Upvote 0
Mình có viết hàm người dùng; mong mọi người tham khảo & cho ý kiến thêm:

PHP:
Option Explicit
Function FDT(Rng As Range) As String    'Hàm Loc Tên Tài Khoan   '
 Const MS As String = "MUA SAM":        Dim StrC As String
 Dim VTMS As Byte, VTTr As Byte
 
 StrC = Rng.Value
 VTMS = InStr(1, StrC, MS, vbTextCompare)
 If VTMS Then
    StrC = Mid(StrC, 1 + VTMS + Len(MS), Len(StrC)) 'Cát Dàu "*" & MS    '
    VTTr = InStr(1 + Len(MS), StrC, " ")
    FDT = IIf(VTTr > 0, RTrim$(Left(StrC, VTTr)), StrC)
                            'Cát Duôi   '       'Không Có Duôi  '
 Else
    FDT = StrC
 End If
End Function


DỮ LIỆU GỐCDỮ LIỆU TRẢ VỀ
9395593955
888882015888882015
9SFP36S9SFP36S
A1117A1117
DOITRAADOITRAA
DUY656ADUY656A
HUNGLLO95HUNGLLO95
IBFT mua sam NDN1998B 029290 029290NDN1998B=FDT(A9)
mua sam 08629992010862999201
mua sam VOTUNGSON1VOTUNGSON1
NANGLE203NANGLE203
MUA SAM 414141414141
mua sam AMATHAOAMATHAO
mua sam ANHBEO991ANHBEO991
mua sam ANHKHOA921ANHKHOA921
mua sam ANHKHOROI 293240 293240ANHKHOROI
mua sam ANHTU98AANHTU98A
mua sam AQUANG339AQUANG339





clip_image002.png
 
Lần chỉnh sửa cuối:
Upvote 0
Góp vui với mọi người!!
=IFERROR(MID(A2,SEARCH("mua sam",A2)+8,IFERROR(SEARCH(" ",A2,SEARCH("mua sam",A2)+8)-9,100)),LEFT(A2,IFERROR(SEARCH(" ",A2)-1,100)))
Bài đã được tự động gộp:

Thử:

=IFERROR(TEXTBEFORE(TEXTAFTER(UPPER(A2),"MUA SAM ")&" "," "),A2)

Chào bác, Em thử công thức của bác với chuỗi sau thì không đúng yêu cầu của tác giả: "VANDUNG77U HGDNHY465".
Theo em hiểu kết quả là : "VANDUNG77U"
 
Upvote 0
Em nghĩ là sửa lại như vầy: =IFERROR(TEXTBEFORE(TEXTAFTER(UPPER(A12),"MUA SAM ")&" "," "),TRIM(IFERROR(LEFT(A12,SEARCH(" ",TRIM(A12))),A12)))

Thêm trường hợp bắt đầu với " " thì dùng TRIM() để cắt luôn!
Thân!!
 
Upvote 0
Bước 1: Replace "mua sam"
Bước 2: Text to column
Bước 3: xóa cột thừa
 
Upvote 0
Em góp thêm công thức này ạ:
=IF(ISNUMBER(SEARCH("mua sam",A2)),
TRIM(LEFT(MID(A2,SEARCH("mua sam",A2)+8,LEN(A2)),FIND(" ",MID(A2,SEARCH("mua sam",A2)+8,LEN(A2))&" ")-1)),
TRIM(LEFT(A2,FIND(" ",A2&" ")-1))
)
 
Upvote 0
Clean bằng Mcode cho các bạn đang tìm hiểu query tham khảo...
Mã:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"DỮ LIỆU GỐC", type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "DỮ LIỆU GỐC", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"DỮ LIỆU GỐC.1", "DỮ LIỆU GỐC.2", "DỮ LIỆU GỐC.3", "DỮ LIỆU GỐC.4", "DỮ LIỆU GỐC.5", "DỮ LIỆU GỐC.6", "DỮ LIỆU GỐC.7", "DỮ LIỆU GỐC.8", "DỮ LIỆU GỐC.9", "DỮ LIỆU GỐC.10"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"DỮ LIỆU GỐC.1", type text}, {"DỮ LIỆU GỐC.2", type text}, {"DỮ LIỆU GỐC.3", type text}, {"DỮ LIỆU GỐC.4", type text}, {"DỮ LIỆU GỐC.5", type text}, {"DỮ LIỆU GỐC.6", type text}, {"DỮ LIỆU GỐC.7", type text}, {"DỮ LIỆU GỐC.8", Int64.Type}, {"DỮ LIỆU GỐC.9", type text}, {"DỮ LIỆU GỐC.10", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each List.FirstN(List.RemoveMatchingItems(List.RemoveNulls(Record.ToList(_)),{"mua","sam"}, Comparer.OrdinalIgnoreCase),1)),
    #"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
    #"Removed Other Columns" = Table.SelectColumns(#"Expanded Custom",{"Custom"})
in
    #"Removed Other Columns"
 

File đính kèm

  • Untitled.png
    Untitled.png
    75.1 KB · Đọc: 14
Upvote 0
Cảm ơn các bác đã hỗ trợ ạ, hôm bữa em vào thấy bài đăng này bị khóa bình luận, giờ mới vô lại được ạ!
 
Upvote 0
. . . . . .
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom