Kết hợp dòng thành cột(Post bài giúp bạn)

  • Thread starter Thread starter boyxin
  • Ngày gửi Ngày gửi
Liên hệ QC

boyxin

Members actively
Tham gia
10/3/08
Bài viết
1,664
Được thích
2,335
Read Only đã viết:
  1. Chỉ dùng công thức
  2. Không dùng cột phụ
  • Nếu cột nào có đủ cả mã cả tên thì mới giữ lại,
  • Nếu thiếu mã, thiếu tên, hoặc cả mã cả tên thì không chuyển thành dữ liệu cột
Các bác xem file đính kèm rồi giúp bạn ý nha

 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Thử code này xem:
PHP:
Option Explicit
Sub Loc()
  Dim Er As Long, i As Long
  Dim iR As Integer, iC As Integer, k As Integer
  Dim Rng As Range, TempRng As Range
  Er = [B65536].End(xlUp).Row
  Set Rng = Range("C4:L" & Er)
  For i = 1 To Rng.Cells.Count - 1 Step 2
    iR = Int((i - 1) / 10) + 1
    iC = (i - 1) Mod 10 + 1
    Set TempRng = Rng(iR, iC).Resize(1, 2)
    If Rng(iR, iC).Value <> "" And Rng(iR, iC + 1) <> "" Then
      Cells(13 + k, 3).Resize(1, 2).Value = TempRng.Value
      k = k + 1
    End If
  Next i
End Sub
Chết.... post xong mới thấy yêu cầu: CHỈ DÙNG CÔNG THỨC
Hic...
 

File đính kèm

Xin hỏi có cho dùng VBA không?
@hoangdanh282vn:
  1. Yêu cầu đề bài là không dùng VBA
  2. Không dùng cột phụ (cái này thì có thể thay bằng name)
  3. Chỉ dùng công thức
Cảm ơn bạn đã quan tâm, Nhưng đã thương thì thương cho trót nha hoangdanh282vn
@ndu: Giúp thêm cách dùng công thức nha
 
Lỡ làm rồi sao giờ. Anh thử cái này xem, còn cái công thức thì nghiên cứu tiếp
PHP:
Sub Kethop()
Dim i As Long
Dim Rng As Range, Cll As Range, ketqua As Range
Range("A2:B1000").ClearContents
Set Rng = Sheet1.[B1].Resize(Sheet1.[A65536].End(xlUp).Row, 10)
For Each Cll In Rng
    With Cll
        If (.Column Mod 2) = 0 And .Value <> "" And .Offset(, 1).Value <> "" Then
            Set ketqua = Cells([A65536].End(xlUp).Row + 1, 1)
            ketqua = Cll.Value
            ketqua.Offset(0, 1) = Cll.Offset(, 1).Value
        End If
    End With
Next
Set Rng = Nothing: Set ketqua = Nothing
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Lỡ làm rồi sao giờ. Anh thử cái này xem, còn cái công thức thì nghiên cứu tiếp

HIIIIII THANK
nghiên cứu tiếp cách dùng công thức nha

VBA thì đoạn này xài cũng ngon
PHP:
Sub Trich()
Dim eCol As Integer, i As Integer, j As Integer, z As Integer
Range("G13:H28").ClearContents
eCol = Range("AZ3").End(xlToLeft).Column - 1
z = 12
For i = 4 To 6
    For j = 3 To eCol Step 2
        If Cells(i, j) <> "" And Cells(i, j + 1) <> "" Then
            z = z + 1
            Cells(z, 7) = Cells(i, j)
            Cells(z, 8) = Cells(i, j + 1)
        End If
    Next
Next
End Sub
 
Lần chỉnh sửa cuối:
PHP:
Sub Trich()
Dim eCol As Integer, i As Integer, j As Integer, z As Integer
Sheet1.Select
Range("G13:H28").ClearContents
eCol = Range("AZ3").End(xlToLeft).Column - 1
z = 12
For i = 4 To 6
    For j = 3 To eCol Step 2
        If Cells(i, j) <> "" Then
        If Cells(i, j + 1) <> "" Then          z = z + 1
            Cells(z, 7) = Cells(i, j)
            Cells(z, 8) = Cells(i, j + 1)
        End If
        End If
    Next
Next
End Sub

Sao anh không thay If Cells(i, j) <> "" Then
If Cells(i, j + 1) <> "" Then
là If Cells(i, j) <> "" and Cells(i, j + 1) <> "" then ...
 
Một giãi pháp nữa dùng công thức!
(lâu quá không làm công thức, giờ thử thấy phê quá)
 

File đính kèm

File đính kèm

Lần chỉnh sửa cuối:
He he, có thế chứ
Tưởng dùi mài VBA thì công thức lại ...
Trùng ý tưởng, cách đặt name DK có khác tý
Đúng là suýt quên thật (suy nghĩ sáng giờ mới xong)...
Nhưng sau nhưng ngày mày mò làm việc với VBA mới thấy rằng đa số các trừong hợp khó ta dùng VBA thì có vẽ nhẹ nhàng hơn rất nhiều so với công thức đấy
Có 1 việc mà công thức làm rất tốt, đó là giã sử ta đặt name DS = $A$1:$H$10 thì dù ta có chèn dòng, chèn cột thế nào name ấy sẽ lập tức đựoc cập nhật mới... VBA thì kém vụ này... Set DS = Range("A1:H10") cứ y như là dùng công thức INDIRECT("A1:H10") vậy... Chèn dòng, chèn cột vào nó toi ngay lập tức!
Tôi thì khi không chắc chắn vùng dử liệu nằm ở đâu tôi sẽ kết hợp VBA với Define name
Các cao thủ VBA có ý kiến gì hay cho vụ này không?
 
Đúng là suýt quên thật (suy nghĩ sáng giờ mới xong)...
Nhưng sau nhưng ngày mày mò làm việc với VBA mới thấy rằng đa số các trừong hợp khó ta dùng VBA thì có vẽ nhẹ nhàng hơn rất nhiều so với công thức đấy
Có 1 việc mà công thức làm rất tốt, đó là giã sử ta đặt name DS = $A$1:$H$10 thì dù ta có chèn dòng, chèn cột thế nào name ấy sẽ lập tức đựoc cập nhật mới... VBA thì kém vụ này... Set DS = Range("A1:H10") cứ y như là dùng công thức INDIRECT("A1:H10") vậy... Chèn dòng, chèn cột vào nó toi ngay lập tức!
Tôi thì khi không chắc chắn vùng dử liệu nằm ở đâu tôi sẽ kết hợp VBA với Define name
Các cao thủ VBA có ý kiến gì hay cho vụ này không?

Những trường hợp cần Set Vùng trong VBA mà vùng này có thể bị thay đổi vị trí thì mình hay đặt name trong Define... rồi lấy tên đưa vào VBA
VD: ta đặt name DS = $A$1:$H$10 rồi trong VBA Range("DS") vẫn Okie (kể cả trường hợp Name động)
 
Những trường hợp cần Set Vùng trong VBA mà vùng này có thể bị thay đổi vị trí thì mình hay đặt name trong Define... rồi lấy tên đưa vào VBA
VD: ta đặt name DS = $A$1:$H$10 rồi trong VBA Range("DS") vẫn Okie (kể cả trường hợp Name động)
Cái này thì tôi vẩn hay dùng... Tuy nhiên đang muốn thỉnh giáo các cao thủ VBA rằng: Ngoài cách này ra thì còn cách nào khác nữa không? (thuần VBA mà không có tí công thức nào)
 
Web KT

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

Back
Top Bottom