Đổi đơn vị tự động trong excel

Liên hệ QC

vt01

Thành viên mới
Tham gia
27/11/07
Bài viết
37
Được thích
2
Thí dụ có một data nhu file data.xls vì dầu bôi trơn khi nhập liệu vào phải đổi đơn vị từ "gam" sang "kilogam" chứ ko giữ nguyên đơn vị là "cái" của tụ điện và cuộn cảm. Mà dữ liệu này này thường được paste từ file khác. Nhu cầu đặt ra là khi copy dữ liệu paste vào file data.xls nếu thì số lượng mới đầu giống như cái được copy (soluong 30000 dongia 0.3) nhưng sau đó excel phát hiện cột tên hàng ( cot A) là dau boi tron thì số lượng (cot B)sẽ tự động chia cho 1000 và đơn giá ( cot C) tự động nhân lên 1000. vậy có hàm nào của excel nào giúp mình được ko???
 

File đính kèm

  • data.xls
    13.5 KB · Đọc: 339
Có phải ý bạn là nếu như trong cột A phát hiện dử liệu là "dau boi tron" thì cột B tương ứng sẽ dc chia cho 1000 và cột C tương ứng sẽ dc nhân với 1000
Nếu thế thì bạn chạy code này xem (vòng lập FOR mới vừa học)
Mã:
[COLOR=blue]Sub Change()
For i = 2 To 2000
If Range("A" & i).Value = "Dau boi tron" Then
Range("B" & i).Value = Range("B" & i).Value / 1000
Range("C" & i).Value = Range("C" & i).Value * 1000
End If
Next i
End Sub[/COLOR]
Lưu ý số 2000 bên trong là dòng thứ 2000, bạn có thể chỉnh lại cho phù hợp.. hoặc bạn cũng có thể cho code tự động phát hiện ra dòng cuối cùng có dử liệu...
Ví dụ
Mã:
[COLOR=blue]Sub Change()
Er = Cells.End(xlDown).Row
For i = 2 To Er
If Range("A" & i).Value = "Dau boi tron" Then
Range("B" & i).Value = Range("B" & i).Value / 1000
Range("C" & i).Value = Range("C" & i).Value * 1000
End If
Next i
End Sub[/COLOR]
Tôi cũng ko dám chắc là đã hiểu đúng ý bạn.. Có gì trục trặc bạn cứ hỏi tiếp nhé
Mến
ANH TUẤN
 
Ok, nhưng cho mình hỏi là đơn vị bị đổi từ g ---> kg nhưng mình bấm nhằm tới 2 lần làm nó đổi từ g-->tấn thì có cách nào ngăn cản bấm 2 lần ko????
 
Đấy đấy... tôi cũng đã nghĩ đến trường hợp bấm 2 lần rồi... Tuy nhiên chưa nghĩ dc giãi pháp ngăn cản... Có lẽ nên đặt dấu hiệu gì đó ở cột phụ chăng (vì chạy macro rồi sẽ ko cho phép Undo)... Dựa vào dấu hiệu này ta biết dc bấm bao nhiêu lần.. và cell nào đã dc chuyển đỗi... Có lẽ thế..
Mời các cao thủ cho ý kiến
ANH TUẤN
 
Em thấy bác Tuấn siêu về CT mà bây giờ chuyên cả VBA nữa .. Bác đa năng quá. Về việc nhấn 2 hay nhiều lần macro em nghĩ là khi nhấn lần 1 để chuyển đổi thì ta gắn cho số đã chuyển một dấu hiệu gì đó để khi nhấn lần hai macro nhận ra và không thực hiện lệnh đó nữa. VD: đổi mầu cho số đã chuyển.
 
Tôi nghĩ cách đơn giản nhất là: Gán đơn vị vào số.. từ đó nếu có nhập liệu thêm nữa thì vẫn phải bấm chuyển đổi dc chứ... Và lúc này macro sẽ xem xét em nào chuyển rồi (dựa vào đơn vị) thì ko chuyển nữa...
Nghĩ là thế nhưng ko biết làm thế nào? Các bạn giúp 1 tay xem
ANH TUẤN
 
salam đã viết:
Về việc nhấn 2 hay nhiều lần macro em nghĩ là khi nhấn lần 1 để chuyển đổi thì ta gắn cho số đã chuyển một dấu hiệu gì đó để khi nhấn lần hai macro nhận ra và không thực hiện lệnh đó nữa. VD: đổi mầu cho số đã chuyển
Ok với ý tưỡng của salam. Nhưng không lẻ đã chuyển 1 lần rồi, muốn chỉnh lại giá trị vì nhập sai thì sao?
Tôi đề nghị:
Tìm dữ liệu trên cột A, nếu là "dau boi tron" thì kiểm tra màu chữ:
- Không phải màu đỏ: chuyển đơn vị. Chuyển xong đổi sang màu đỏ
- Màu đỏ: hiện hộp thoại nhắc nhở, chọn Yes > chuyển chuyển đơn vị, chọn No > bỏ qua.

salam đã viết:
Em thấy bác Tuấn siêu về CT mà bây giờ chuyên cả VBA nữa .. Bác đa năng quá.
Mới học For ... Next mà viết thế thì ai theo cho kịp.
Để code dễ viết hơn, Nếu Range chỉ là 1 ô, Tuấn nên dùng Cells(dòng, cột) thay cho Range
Mã:
[COLOR=blue]Sub Change()
Er = Cells.End(xlDown).Row
For i = 2 To Er
If Cells((i,1).Value = "Dau boi tron" Then
Cells(i,2).Value = Cells(i,2).Value / 1000
Cells(i,3).Value = Cells(i,3).Value * 1000
End If
Next i
End Sub
[/COLOR]
 
Tìm dữ liệu trên cột A, nếu là "dau boi tron" thì kiểm tra màu chữ:
- Không phải màu đỏ: chuyển đơn vị. Chuyển xong đổi sang màu đỏ
- Màu đỏ: hiện hộp thoại nhắc nhở, chọn Yes > chuyển đơn vị, chọn No > bỏ qua.

Mã:
Sub Change()
Er = Cells(1, 1).End(xlDown).Row
For i = 2 To Er
If Cells(i, 1).Value = "Dau boi tron" Then
  If Cells(i, 2).Font.ColorIndex <> 3 Then
    Cells(i, 2).Value = Cells(i, 2).Value / 1000
    Cells(i, 3).Value = Cells(i, 3).Value * 1000
    Cells(i, 2).Font.ColorIndex = 3
    Cells(i, 3).Font.ColorIndex = 3
  Else
    Cells(i, 2).Select
    chon = MsgBox("Dong y chinh lai don vi?", vbYesNo, "Thong bao")
    If chon = 6 Then
      Cells(i, 2).Value = Cells(i, 2).Value / 1000
      Cells(i, 3).Value = Cells(i, 3).Value * 1000
    End If
  End If
End If
Next i
End Sub
 
He... he.. giờ biết thêm 1 món nữa về cửa sổ thông báo... Vậy tôi sẽ làm theo cách này:
Mã:
Sub Change()
Er = Cells.End(xlDown).Row
For i = 2 To Er
   If Cells(i, 1).Value = "Dau boi tron" Then
      If Cells(i, 2).NumberFormat <> "#"" Kg""" Then
         Cells(i, 2).Value = Cells(i, 2).Value / 1000
         Cells(i, 2).NumberFormat = "#"" Kg"""
         Cells(i, 3).Value = Cells(i, 3).Value * 1000
      Else
         Cells(i, 2).Select
         chon = MsgBox("Dong y chinh lai don vi?", vbYesNo, "Thong bao")
           If chon = 6 Then
              Cells(i, 2).Value = Cells(i, 2).Value / 1000
              Cells(i, 3).Value = Cells(i, 3).Value * 1000
           End If
       End If
   End If
Next i
End Sub
Chỉnh Custom Format thành #" Kg"
Cảm ơn thầy Long
------------------------------------
Cho tôi hỏi thêm về câu lệnh:
Mã:
If chon = 6
Số 6 có ý nghĩ gì? Và chắc còn thêm số nào nữa chứ, đúng ko? Mỗi số ứng với 1 d/k YES hoặc NO (tôi nghĩ vậy)

ANH TUẤN
 
Lần chỉnh sửa cuối:
Mã:
If chon = 6
Số 6 có ý nghĩ gì? Và chắc còn thêm số nào nữa chứ, đúng ko? Mỗi số ứng với 1 d/k YES hoặc NO (tôi nghĩ vậy)
ANH TUẤN[/quote]
Đúng vậy, khi người dùng bấm nút nào, sẽ có 1 giá trị ghi vào biến chọn:
1=OK
2=Cancel
3=Abort
4=Retry
5=Ignore
6=Yes
7=No
 
Cho mình hỏi nếu áp dụng kô chỉ với dầu bôi trơn mà còn với dầu nhớt, dầu nhờn thì công thức sẽ như thế nào
 
Bạn mở cửa sổ VBE ra, xem code và sửa thôi... dễ mà... đễ ý chổ có chử "Dau boi tron" ấy... thích sửa thành gì thì sửa.. nếu cần sửa 1 lúc 2, 3 món thì thêm lệnh OR vào
IF.... cái gì đó... OR cái nữa... Then
 
tôi có một bảng excel có 8 cột 8 hàng đang để các số theo đơn vị MJ giờ muốn đổi sang Kcal thì làm thế nào cho nhanh ạ. Tôi xin chân thành cảm ơn!
 
1 Joule = 0.24 Calo
1 MJ = 240 KCal

Vậy gõ 240 vào 1 ô trống, copy ô này
Tô khối vùng cần chuyển đổi, Paste Special, đánh dấu Multiply và OK
 
Web KT
Back
Top Bottom