Tách 3 số thành một cột

Liên hệ QC

thuong_mdc80

Thành viên mới
Tham gia
4/5/07
Bài viết
31
Được thích
1
Chào các A/ C.
Cột A chứa dữ liệu là những chữ số. Tôi muốn tách 3 chữ số tính từ bên PHẢI thành 1 cột riêng ( giống như việc tách phần nghìn, triệu..)
VD:
Cột A CộtB CộtC Cột D
123456789 tách thành 123 456 789
98651423 98 651 423
987654321 987 654 321
....
Cảm ơn.
 
Format Cell - Custom
## ### ### ##0
Còn muốn tách ra từng cột thì dùng hàm right, left kết hợp len()
 
thuong_mdc80 đã viết:
Chào các A/ C.
Cột A chứa dữ liệu là những chữ số. Tôi muốn tách 3 chữ số tính từ bên PHẢI thành 1 cột riêng ( giống như việc tách phần nghìn, triệu..)
VD:
Cột A CộtB CộtC Cột D
123456789 tách thành 123 456 789
98651423 98 651 423
987654321 987 654 321
....
Cảm ơn.
1. Dùng hàm : Bạn xem File dưới đây
2. Dùng VBA : Để sau

Thân!
 

File đính kèm

  • Tach So.7z
    4 KB · Đọc: 95
Công thức ở cột D : =RIGHT(A1,3)
Công thức ở cột C : =RIGHT(LEFT((A1-D1),LEN(A1)-LEN(D1)),3)
Công thức ở cột B : =LEFT(A1,LEN(A1)-LEN(C1)-LEN(D1))

Thân
 
Cũng có thể dùng hàm MOD kết hợp với INT vẫn cho ra kết quả như ý mà lại dễ hiểu nữa.
B1=INT(MOD(A1,1000000000)/1000000)
C1=INT(MOD(A1,1000000)/1000)
D1=MOD(A1,1000)
vân vân... muốn tách đến bao nhiêu thì tự suy ra theo nguyên tắc trên
ANH TUẤN
 
thuong_mdc80 đã viết:
Chào các A/ C.
Cột A chứa dữ liệu là những chữ số. Tôi muốn tách 3 chữ số tính từ bên PHẢI thành 1 cột riêng ( giống như việc tách phần nghìn, triệu..)
VD:
Cột A CộtB CộtC Cột D
123456789 tách thành 123 456 789
98651423 98 651 423
987654321 987 654 321
....
Cảm ơn.

Và đây là cách tách số dùng VBA. Code này tách số (từ cột A) ra hàng triệu (cột B), hàng ngàn (cột C) & hàng trăm hay nhỏ hơn (cột D)

Sub TachSo()
Range("B1") = "Hang Trieu"
Range("C1") = "Hang Ngan"
Range("D1") = "Hang Tram/Chuc"
For i = 2 To Range("A65536").End(xlUp).Row
Select Case Len(Cells(i, 1))
Case Is < 3
Trieu = ""
Ngan = ""
Tram = Cells(i, 1)
Case 3
Trieu = ""
Ngan = ""
Tram = Left(Cells(i, 1), 1)
Case 4 To 6
Trieu = ""
Ngan = Left(Cells(i, 1), Len(Cells(i, 1)) - 3)
Tram = Right(Cells(i, 1), 3)
Case Is > 6
Trieu = Left(Cells(i, 1), Len(Cells(i, 1)) - 6)
Ngan = Left(Right(Cells(i, 1), 6), 3)
Tram = Right(Cells(i, 1), 3)
End Select
Cells(i, 2) = Trieu
Cells(i, 3) = Ngan
Cells(i, 4) = Tram
Next i
End Sub

Vì không biết bảng số bạn bắt đầu ở dòng nào, tôi dùng hàng số 2 làm thí dụ. Bạn thay đối số dòng và cột trong câu nầy nếu cần.

For i = 2 To Range("A65536").End(xlUp).Row


Mến
 
Chỉnh sửa lần cuối bởi điều hành viên:
Có hàm này ít ai dùng đến:
3 số đầu: MID(A1,1,3)
3 số giữa: MID(A1,4,3)
3 số cuối: MID(A1,7,3)
Một lưu ý là số này phải là số 9 chữ số và số đầu tiên không phải là 0.
Ví dụ số 000123456 (định dạng Format > Cells > Custom > Type=000000000 thì Excel hiểu là 123456, khi đó công thức cho 3 số đầu là 123, 3 số giữa là 456, không có 3 số cuối.
 
Cách của bạn Phamduylong ko ổn, vì người ta muốn tách ra từng nhóm 3 số tính từ bên phải qua (còn bạn thì lại tách thì trái qua). Muốn chắc chắn thì bạn vẩn phải dùng thêm hàm LEN thôi. Đả vậy do mình chưa biết chuổi cần tách ra có bao nhiêu chử số tổng cộng nên rất phiền phức khi phải tìm cách tránh lỗi #VALUE
ANH TUẤN
 
Chỉnh lại theo ý bạn anhtuan1066
Kết hợp hàm LEN lấy từ phải qua trái, tahy lần lượt 2, 5, 8, 11, 14, ...
nhóm 1: MID(A1,LEN(A1)-2,3)
nhóm 2: MID(A1,LEN(A1)-5,3)
nhóm 3: MID(A1,LEN(A1)-8,3)
Tuy nhiên vẫn bị lỗi #VALUE nếu LEN(A1)-X<0
 
Các bạn theo dõi hàm TachSo này nhé.
Các bạn có thể tách từ ngàn tỷ, tỷ, triệu, ngàn và đơn vị.
Hàm ngắn thôi mà :

Mã:
[COLOR=Blue]Option Explicit[/COLOR]
  [COLOR=Blue]Public Function[/COLOR] TachSo(So [COLOR=Blue]As Currency[/COLOR], i [COLOR=Blue]As Byte[/COLOR])
      TachSo = Int([COLOR=Blue]CCur[/COLOR](Right(So, i * 3)) / WorksheetFunction.Power(10, ((i - 1) * 3)))
  [COLOR=Blue]End Function[/COLOR]

Tham số i :

1. Đơn vị
2. Ngàn
3. Triệu
4. Tỷ
5. Ngàn tỷ

6. Triệu tỷ

. . . . .



Thân!
 

File đính kèm

  • Tach So.xls
    24 KB · Đọc: 51
Sao lại phải rắc rối thế... Tôi bảo dám bảo đảm chỉ cần 1 hàm duy nhất là INT cũng đủ tính toán trong trường hợp này rồi và ko bao giờ xuất hiện lỗi, dù chuổi có dài bao nhiêu.
 
Giả sử bạn ấy nhập số cần tách vào cell A1, và bạn ấy có n cột chứa các số đã tách ra, với cột cuối cùng chứa 3 số cuối cùng, cột tiếp theo chứa 3 số tiếp theo... vân... vân... Ta tạm gọi cột cuối cùng là cột 1, cột kế cuối là cột 2, vân... vân...
Vậy công thức tổng quát đễ tách 3 số vào cột thứ X là:
=INT($A1/10^(3*(X-1)))-INT($A1/10^(3*X))*1000
Công thức này luôn luôn đúng cho dù chuổi số dài bao nhiêu, và cho dù cột thứ X ko lấy dc số nào thì nó cũng chỉ cho kết quả =0 chứ ko gây lỗi
Tôi post file lên đễ có 1 VD minh họa cụ thể
ANH TUẤN
 
Lần chỉnh sửa cuối:
Mr Okebab đã viết:
Các bạn theo dõi hàm TachSo này nhé.
Các bạn có thể tách từ ngàn tỷ, tỷ, triệu, ngàn và đơn vị.
Hàm ngắn thôi mà :

Mã:
[COLOR=blue]Option Explicit[/COLOR]
  [COLOR=blue]Public Function[/COLOR] TachSo(So [COLOR=blue]As Currency[/COLOR], i [COLOR=blue]As Byte[/COLOR])
      TachSo = Int([COLOR=blue]CCur[/COLOR](Right(So, i * 3)) / WorksheetFunction.Power(10, ((i - 1) * 3)))
  [COLOR=blue]End Function[/COLOR]

Tham số i :

1. Đơn vị
2. Ngàn
3. Triệu
4. Tỷ
5. Ngàn tỷ

6. Triệu tỷ

. . . . .



Thân!

Anh Okebab,

Cái UDF này rất ngắn. Cám ơn anh.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Xin góp thêm 1 macro
Mã:
Sub tach_so()
Dim i, so, so_cot, dong
dong = 1
Do While Len(Cells(dong, 1).Value) > 0
so = Cells(dong, 1).Value
so_cot = WorksheetFunction.RoundUp(Len(so) / 3, 0)
For i = 1 To so_cot
  Cells(dong, so_cot + 2 - i).Value = Right(so, 3)
  so = Int(so / 1000)
Next
dong = dong + 1
Loop
End Sub
Mô tả: Tách các số tại cột A ra các cột B,C...
(Có thể cải tạo dùng Worksheet_Change để khi nhập tại cột A thì tự động tách ra các cột B,C - Phần trên còn thiếu xoá dự liệu cũ tại các cột B, C..)
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom