Lấy thông tin theo số thứ tự? (6 người xem)

Liên hệ QC

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

mickeybh

Thành viên hoạt động
Tham gia
26/9/13
Bài viết
156
Được thích
33
Ở sh1 mình có thông tin từng bệnh nhân và kèm theo đơn thuốc của bệnh nhân.
Ở sh2 mình muốn tạo ra 1 phiếu in để in ra thông tin cần lấy.
Ví dụ mình muốn in ra: họ tên bệnh nhân, ngày khám, tên thuốc và số lượng kèm theo bệnh nhân đó thông qua số thứ tự.
Nhờ các bạn giúp mình với.
 

File đính kèm

Ở sh1 mình có thông tin từng bệnh nhân và kèm theo đơn thuốc của bệnh nhân.
Ở sh2 mình muốn tạo ra 1 phiếu in để in ra thông tin cần lấy.
Ví dụ mình muốn in ra: họ tên bệnh nhân, ngày khám, tên thuốc và số lượng kèm theo bệnh nhân đó thông qua số thứ tự.
Nhờ các bạn giúp mình với.
Mình thường làm như thế này!!!
 
Không dùng cột phụ có được không bạn? Hoặc dùng VBA?
 
Ở sh1 mình có thông tin từng bệnh nhân và kèm theo đơn thuốc của bệnh nhân.
Ở sh2 mình muốn tạo ra 1 phiếu in để in ra thông tin cần lấy.
Ví dụ mình muốn in ra: họ tên bệnh nhân, ngày khám, tên thuốc và số lượng kèm theo bệnh nhân đó thông qua số thứ tự.
Nhờ các bạn giúp mình với.
bạn bố trí như vậy là làm khổ người ta rồi. với lại cách bố trí của bạn sau này sẽ làm khổ chỉnh bạn chắc chắn là như vậy
vì dữ liệu này không thống nhất với nhau
bạn không muốn có cột phụ thì tôi sẽ làm không có cột phụ. tôi làm bài này thêm 1 ít kỹ năng mắn muối nữa vào cho hợp lý
 

File đính kèm

Bạn xem lại ví dụ gõ stt 1 thì nó sẽ ra như thế nào.
Mình dùng offset + match cũng cho ra yêu cầu nhưng mình muốn thêm khảo thêm ý kiến của các bạn giải quyết bài toán này như thế nào?
Trước đây mình bố trí dữ liệu thuốc nằm trên 1 dòng nhưng gần đây có người bạn nói sao không cho nó vào 1 cột nên mình test thử trước khi sửa lại file làm việc.
 
Bạn xem lại ví dụ gõ stt 1 thì nó sẽ ra như thế nào.
Mình dùng offset + match cũng cho ra yêu cầu nhưng mình muốn thêm khảo thêm ý kiến của các bạn giải quyết bài toán này như thế nào?
Trước đây mình bố trí dữ liệu thuốc nằm trên 1 dòng nhưng gần đây có người bạn nói sao không cho nó vào 1 cột nên mình test thử trước khi sửa lại file làm việc.
thì tôi có nói là thêm 1 tí kỹ năng mắn muối nữa thì sẽ ok theo ý của bài này? bạn có thể sử dụng định dạng có đk để che nó đi
 
Không dùng cột phụ có được không bạn? Hoặc dùng VBA?
Muốn dùng VBA thì bạn sử dụng code sau cho Sheet2:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range, Cll1 As Range
On Error Resume Next
If Target.Address = "$E$1" And Target.Count = 1 Then
[B2:D3,A5:B100].ClearContents
Set Cll = Sheet1.[A:A].Find(Target, , xlValues, xlWhole)
If Cll Is Nothing Then Exit Sub
[B2] = Cll.Offset(, 1): [B3] = Cll.Offset(, 2)
Set Cll1 = Sheet1.[A:A].Find(Target + 1, , xlValues, xlWhole)
If Cll1 Is Nothing Then
Set Cll1 = Sheet1.[E65000].End(xlUp)
Else
Set Cll1 = Cll1.Offset(-1, 4)
End If
Sheet1.Range(Cll.Offset(, 3), Cll1).Copy [A5]
End If
End Sub[/GPECODE]
 
Ở sh1 mình có thông tin từng bệnh nhân và kèm theo đơn thuốc của bệnh nhân.
Ở sh2 mình muốn tạo ra 1 phiếu in để in ra thông tin cần lấy.
Ví dụ mình muốn in ra: họ tên bệnh nhân, ngày khám, tên thuốc và số lượng kèm theo bệnh nhân đó thông qua số thứ tự.
Nhờ các bạn giúp mình với.

Thử cách dùng cột phụ xem sao:
Ở Sheet Hóa đơn tại G5:G10 bạn chỉ cần gõ số thứ tự vào như Số TT cột B của của Sheet1 (từng bệnh nhân) hoặc gõ số TT tại G5, G6 và Fill xuống là hoàn thành hóa đơn.

Xem File.
 

File đính kèm

Lần chỉnh sửa cuối:
A thử không dùng cột phụ được không anh? Em dùng match, offset nhưng thấy nó hơi dài nên gửi lên GPE nhờ xem có cách nào tối ưu hơn không?
 

File đính kèm

Đúng là dài hơn thật. Lấy dữ liệu ra thì không khó nhưng khó ở chổ xác định điểm dừng của công thức lấy dữ liệu.
 
Thêm 1 bài nữa dùng VBA
Code trong Module
Mã:
Sub DonThuoc()
    On Error Resume Next
    [a5:b100].ClearContents
    With Sheet1.Range("b4:b" & Sheet1.[d65000].End(3).Row).SpecialCells(4)
        [b2] = .Areas([e1])(0)
        [b3] = .Areas([e1])(0, 2)
        .Areas([e1])(0, 3).Resize(.Areas([e1]).Rows.Count + 1, 2).Copy [a5]
    End With
End Sub

Code trong Sheet2
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$1" Then Call DonThuoc
End Sub
 

File đính kèm

Web KT

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

Back
Top Bottom