Hỏi đáp VBA trong chủ đề "Chập chững đến VBA" (1 người xem)

Liên hệ QC

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

luongchihien

Thành viên mới
Tham gia
26/8/11
Bài viết
7
Được thích
1
Em xem đề tài và học hỏi được một tí, với yêu cầu như vậy! Trong file excel có sheet "Form" và sheet "Thong Tin KH" bây giờ em muốn nhập vào form (từ ô D4: D32, như trong file) rồi enter thì dữ liệu được nhập vào sheet "Thong Tin KH". Mong mọi người giúp đỡ
Em mò mẫn mãi mà ko ra ( em làm được cái gì là đính kèm hết trong file đó. gồm file excel và word chứa code)
Cảm ơn trước, cho những ai giúp đỡ!
 

File đính kèm

Nếu 1 Sub có tham số truyền thì nút run không có tác dụng, liệt kê bằng Alt F8 sẽ không thấy.
 
Upvote 0
Nếu 1 Sub có tham số truyền thì nút run không có tác dụng, liệt kê bằng Alt F8 sẽ không thấy.
Em thử 1 code như anh Thắng nói...em xóa private đi thì Sub báo lỗi phần biến hay vùng chọn trong dấu ngoặc đơn sau ten Sub,
vậy trường hợp như thế mình sẽ xử lý như thế nào sư phụ chỉ giúp em với...."sẵn cho em hỏi ngoài chủ đề 1 tí là muốn hiểu để có thể viết và chỉnh sửa code chuẩn 1 chút thì trình độ phải học khóa VB ở trường đại học Khoa Tự Nhiên đủ chưa hay phải trình độ đại học tin học hay cao đẳng tin học vậy sư phụ chỉ điểm dùm để em biết đường mà học với.....Cảm ơn shư phụ và ACE diễn đản rất nhiều...."
 
Upvote 0
ACE diễn đàn cho em hỏi, em load về cái "private sub(.....) " mà bấm run hoài không thấy tên code hiện ra như các sub thường, vậy em chạy private sub bằng cách nào xin ACE chỉ giáo cho em....Xin cảm ơn thất nhiều....

Để biết nó chạy ra răng trong cửa sổ (CS) Immediate, bạn có thể xoá tạm thời cái từ 'Private' đó đi;

Trong CS nói trên ta cung cấp trước tham biến & có thể chạy nó;

Ví dụ ta có macro sau:

PHP:
Private Sub EmYeuAnh(GPE As String)
     MsgBox GPE
End Sub


Trong CS vừa nói, ta nhập GPE="GPE.COM" & nhấn {ENTER} khi con trỏ vẫn trên dòng đó;

Sau đó ta lại cho chạy macro bằng dòng lệnh khác, đó là nhập tại dòng khác trên CS này, như

EmYeuAnh(GPE) & lại nhấn {ENTER}

Để vui là chính đó nha!
 
Lần chỉnh sửa cuối:
Upvote 0
Em có làm 1 cái code lọc dữ liệu gồm 3 bước
B.1 lấy và short dữ liệu từ nhỏ đến lớn
B.2 Tô màu 3 giá trị P max, M2 max , M3 max
B.3 Xóa bỏ các dòng không tô màu.
Hiện tại nó chỉ tô màu cho 1 cột M2, ACE diển đàn giúp em sửa code cho nó tô cột P max và M3 max với
Xin cảm ơn thật nhiều.
Mã:
'Nut FilterData --> OK
Sub RowBeam()
 Dim RowCuoiBeam As Long, RowDauBeam As Long, Beam As Long
 Dim WorkOnBeam
  N = 6
  Cells(N, "B").Select
  If Selection.Value = "" Then Exit Sub 'Neu B6 trong nghia la khong co Data
  Do While Cells(N, "B") <> ""
    Cells(N, "B").Select
    If Cells(N, "B").Value = Cells(N + 1, "B").Value Then
      N = N + 1
    Else
      RowCuoiBeam = N
      If RowDauBeam = 1 Then
        RowDauBeam = 6
      End If
      Beam = Beam + 1
      'MsgBox "Beam thu: " & Beam & " La: " & Cells(RowDauBeam, "B").Value & Chr(13) & _
      "RowDauBeam = " & RowDauBeam & Chr(13) & _
      "RowCuoiBeam = " & RowCuoiBeam & Chr(13) & _
      "Goi lenh to dam"
      WorkOnBeam = M3_Bold(RowDauBeam, RowCuoiBeam)  '?co khi nao goi  Sub ma co lay gia tri 2 bien khong? Khong dung Function duoc khong?
      N = N + 1
    End If
    RowDauBeam = RowCuoiBeam + 1
  Loop
  Range("F" & RowCuoiBeam).Select
End Sub

Mã:
'Chuong trinh nay hoat dong --> OK
Function M3_Bold(RowDauBeam, RowCuoiBeam)
 Dim M3max, M3min1, Beam_All As Range, M3 As Range, Beam_Up As Range
 Dim M3min2, Beam_Dn As Range
 Dim Row_in_Beam As Long, RowM3max_In_Beam As Long, RowM3max As Long
 Dim RowM3min1_In_Beam As Long, RowM3min1 As Long, RowM3min2_In_Beam As Long
 Dim RowM3min2 As Long
 
  'Xac dinh vi tri M3max va to dam M3max
  Set Beam_All = Range(Cells(RowDauBeam, "F"), Cells(RowCuoiBeam, "F"))
  Beam_All.Select     'Minh hoa cho ro nghia (Delete)
  M3max = Beam_All(1).Value
  Row_in_Beam = 1
  For Each M3 In Beam_All
    'MsgBox M3.Value   'Minh hoa cho ro nghia (Delete)
    If M3.Value >= M3max Then
      M3max = M3.Value
      RowM3max_In_Beam = Row_in_Beam
    End If
    Row_in_Beam = Row_in_Beam + 1
  Next
  RowM3max = RowDauBeam + RowM3max_In_Beam - 1
  Cells(RowM3max, "F").Font.Bold = True
  Cells(RowM3max, "F").Font.ColorIndex = 7
  
  'Xac dinh vi tri M3min1 va to dam M3min1
  Set Beam_Up = Range(Cells(RowDauBeam, "F"), Cells(RowM3max - 1, "F"))
  Beam_Up.Select     'Minh hoa cho ro nghia (Delete)
  M3min1 = Beam_Up(1).Value
  Row_in_Beam = 1
  For Each M3 In Beam_Up
    'MsgBox M3.Value   'Minh hoa cho ro nghia (Delete)
    If M3.Value <= M3min1 Then
      M3min1 = M3.Value
      RowM3min1_In_Beam = Row_in_Beam
    End If
    Row_in_Beam = Row_in_Beam + 1
  Next
  RowM3min1 = RowDauBeam + RowM3min1_In_Beam - 1
  Cells(RowM3min1, "F").Font.Bold = True
  Cells(RowM3min1, "F").Font.ColorIndex = 7
  
  'Xac dinh vi tri M3min2 va to dam M3min2
  Set Beam_Dn = Range(Cells(RowM3max + 1, "F"), Cells(RowCuoiBeam, "F"))
  Beam_Dn.Select     'Minh hoa cho ro nghia (Delete)
  M3min2 = Beam_Dn(1).Value
  Row_in_Beam = 1
  For Each M3 In Beam_Dn
    'MsgBox M3.Value   'Minh hoa cho ro nghia (Delete)
    If M3.Value <= M3min2 Then
      M3min2 = M3.Value
      RowM3min2_In_Beam = Row_in_Beam
    End If
    Row_in_Beam = Row_in_Beam + 1
  Next
  RowM3min2 = RowM3max + RowM3min2_In_Beam
  Cells(RowM3min2, "F").Font.Bold = True
  Cells(RowM3min2, "F").Font.ColorIndex = 7
  M3_Bold = 0
End Function
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Trong Function M3_Bold(RowDauBeam, RowCuoiBeam) có lệnh :

Set Beam_All = Range(Cells(RowDauBeam, "F"), Cells(RowCuoiBeam, "F"))
là xác định dòng đầu và dòng cuối chứa dữ liệu cho cột F
vậy em muốn chọn thêm trục G thì gom chung 1 lệnh hay phải tách làm 2 lệnh riêng vậy AC chỉ giúp em
Set Beam_All = Range(Cells(RowDauBeam, "F"-"G"), Cells(RowCuoiBeam, "F"-"G"))
Em sửa vậy được không các AC
 
Upvote 0
Trong Function M3_Bold(RowDauBeam, RowCuoiBeam) có lệnh :

Set Beam_All = Range(Cells(RowDauBeam, "F"), Cells(RowCuoiBeam, "F"))
là xác định dòng đầu và dòng cuối chứa dữ liệu cho cột F
vậy em muốn chọn thêm trục G thì gom chung 1 lệnh hay phải tách làm 2 lệnh riêng vậy AC chỉ giúp em
Set Beam_All = Range(Cells(RowDauBeam, "F"-"G"), Cells(RowCuoiBeam, "F"-"G"))
Em sửa vậy được không các AC
Bạn test thử là biết được không liền. Bạn thử với code sau:
Set Beam_All = Range("F" & RowDauBeam & ":G" & RowCuoiBeam)
 
Upvote 0
Em đã sửa code tô màu "filter data" từ 1 cột thành 3 cột, nhưng "short data" thì chưa sửa được, AC giúp em nhé...

'Delete Data not Bold da duoc chon truoc do
'Nut ShortData --> OK
Sub ShortData()
N = 6
Range(Cells(N, "E"), Cells(N, "G")).Select
'Cells(N, "E").Select'
'Cells(N, "F").Select

Do Until Selection.Value = ""
If Selection.Font.Bold Then
N = N + 1
'Cells(N, "E").Select
'Cells(N, "F").Select

Else
Rows(N).Delete 'Kiem tra lai, tai sao delete nay lai giu dc format cua cell, con entridelete bi xoa?
End If
Loop
End Sub
hinh xoa to mau.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Trong một Sheet em có như sau:
1/ tại cell A2 có giá trị: 2012 (năm 2012)
2/ tại cell A5 có giá trị: T05 (tháng 05)
3/ tại cell A10 có công thức
PHP:
=DATE(A2;VALUE(RIGHT(A5;2))+1;0)
Và cell A10 được Format Cells "Ngày "dd" tháng "mm" năm "yyyy
4/Hàm này trả về kết quả Cell A10 như sau: Ngày 31 tháng 05 năm 2012

Em muốn viết code để nó trả về kết quả như mục 4 ở trên nhưng code không chạy
Mã:
Sub Macro1()
    Range("A10").Select
    Selection. formula = "=DATE(A2,VALUE(RIGHT(A5,2))+1,0)"
    Selection.NumberFormat = "Ngày ""dd"" tháng ""mm"" nam ""yyyy"
End Sub

Vui lòng chỉ giúp em
Em cảm ơn!
 
Upvote 0
Sub Macro1()
Range("A10").Select
Selection. formula = "=DATE(A2,VALUE(RIGHT(A5,2))+1,0)"
Selection.NumberFormat = "Ngày ""dd"" tháng ""mm"" nam ""yyyy"
End Sub[/code]

Hãy dùng bộ thu là được mà!

Selection.NumberFormat = """Ngày ""dd ""tháng"" mm ""nam ""yyyy"
 
Upvote 0
Arr(D, 4) = Arr(D, 4) + Rng1(I, 4):: Arr(D, 9) = Rng1(I, 5)

With Sheets("GPE")
.[A6:I10000].ClearContents

Anh chị cho em hỏi, trong đoạn code trên, dấu : và dấu . ý nghĩa như thế nào ạ. Và sao lại có 2 dấu :
 
Lần chỉnh sửa cuối:
Upvote 0
Arr(D, 4) = Arr(D, 4) + Rng1(I, 4):: Arr(D, 9) = Rng1(I, 5)

With Sheets("GPE")
.[A6:I10000].ClearContents

Anh chị cho em hỏi, trong đoạn code trên, dấu : và dấu . ý nghĩa như thế nào ạ. Và sao lại có 2 dấu :

Dấu : có thể hiểu tương tự như phím Enter cách dòng. Có thể viết hai cách là
Mã:
Arr(D, 4) = Arr(D, 4) + Rng1(I, 4)[B][COLOR=#ff0000]:[/COLOR][/B] Arr(D, 9) = Rng1(I, 5)
hoặc
Mã:
Arr(D, 4) = Arr(D, 4) + Rng1(I, 4)
Arr(D, 9) = Rng1(I, 5)

Còn với câu hỏi thứ hai
Mã:
Sheets("GPE")[B][COLOR=#ff0000].[/COLOR][/B][A6:I10000].ClearContents
Dấu . giống như để phân cách, phương thức, đối tượng hay thuộc tính đằng sau chính là thuộc về đối tượng đằng trước. Còn cách viết cú pháp With ... End With là một cách viết rút gọn.
 
Upvote 0
Cho em hỏi tiếp ạ
Dim Rng1(), Rng2(), Arr(), Arr2(), I As Long, J As Long, K As Long, N As Long

Ở dòng khai báo biến trên, tại sao các biến I, J, K, N khai báo theo cú pháp Dim....as
Còn biến Rng1(), Rng2(), Arr(), Arr2() thì không có As
 
Upvote 0
Giúp em sửa code như sau:
Nếu cell A4 của sheet1 bằng 1 thì Sheet1 không bị khóa
Ngoài ra nếu cell A4 của sheet1 khác 1 thì Sheet1 bị khóa
PW: là 123
Code của em
PHP:
Sub abc()
With Sheets("Sheet1")
If Range("A4") <> 1 Then
.Protect 123
Else
.Unprotect 123
End With
End Sub
Em cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Giúp em sửa code như sau:
Nếu cell A4 của sheet1 bằng 1 thì Sheet1 không bị khóa
Ngoài ra nếu cell A4 của sheet1 khác 1 thì Sheet1 bị khóa
PW: là 123
Code của em
PHP:
Sub abc()
With Sheets("Sheet1")
If Range("A4") <> 1 Then
.Protect 123
Else
.Unprotect 123
End With
End Sub
Em cảm ơn!
Code của bạn thiếu End If, hơn nữa code này bạn đưa vào sự kiện Private Sub Worksheet_Change() thì tiện hơn
 
Upvote 0
Giúp em sửa code như sau:
Nếu cell A4 của sheet1 bằng 1 thì Sheet1 không bị khóa
Ngoài ra nếu cell A4 của sheet1 khác 1 thì Sheet1 bị khóa
PW: là 123
Code của em
PHP:
Sub abc()
With Sheets("Sheet1")
If Range("A4") <> 1 Then
.Protect 123
Else
.Unprotect 123
End With
End Sub
Em cảm ơn!

Có thể sửa lại như sau:
PHP:
Sub abc()
On Error Resume Next
With ThisWorkbook.Sheets("Sheet1")
    If .Range("A4") <> 1 Then .Protect "123" Else .Unprotect "123"
End With
End Sub
 
Upvote 0
Giúp em sửa code như sau:
Nếu cell A4 của sheet1 bằng 1 thì Sheet1 không bị khóa
Ngoài ra nếu cell A4 của sheet1 khác 1 thì Sheet1 bị khóa
PW: là 123
Code của em
PHP:
Sub abc()
With Sheets("Sheet1")
If Range("A4") <> 1 Then
.Protect 123
Else
.Unprotect 123
End With
End Sub
Em cảm ơn!
Code của bạn bị lỗi cấu trúc do thiếu dòng End If. Thêm vào là được.
Mã:
Sub abc()
With Sheets("Sheet1")
If Range("A4") <> 1 Then
.Protect 123
Else
.Unprotect 123
[B]End If[/B]
End With
End Sub
 
Upvote 0
Em đang vọc đọan code chuyển chữ thường thành chữ HOA, như sau
Mã:
Sub LowToUp()
Dim kq(1 To 20000, 1 To 1), DL(), i
DL = [D18:D20000].Value
For i = 1 To UBound(DL)
kq(i, 1) = UCase(DL(i, 1))
Next
[D18:D20000] = kq
End Sub
Code trên chỉ chạy đúng khi Sheet hiện hành không bị đang bị AutoFilter (Nếu đang Filter thì nó chạy sai) Em muốn các Thầy cô & Anh chị giúp em chèn thêm đọan code xả Filter (Show All) trước khi chạy code này
-----------
Em có Record Macro, nhưng khi em lồng vào code này thì chỉ chạy được 1 Sheet, em muốn nó có thể thực thi ở mọi Sheet mà em chọn
Em cảm ơn!
---------------
P/S: em làm được rồi, nh MOD xóa bài giúp
 
Lần chỉnh sửa cuối:
Upvote 0
Em có thấy trên mạng đọan code như sau:
PHP:
Sub test()
Dim DataRange  As Variant
Dim Irow       As Long
Dim Icol       As Integer
Dim MyVar      As Double
DataRange = Range("A1:C10000").Value                  ' Ð?c t?t c? các giá tr? t? Excel m?t l?n, và dua vào m?ng
For Irow = 1 To 10000
    For Icol = 1 To 3
        MyVar = DataRange(Irow, Icol)
        If MyVar > 0 Then
            MyVar = MyVar * MyVar                     ' Thay d?i các giá tr? trong m?ng
            DataRange(Irow, Icol) = MyVar
        End If
    Next Icol
Next Irow
Range("A1:C10000").Value = DataRange
End Sub
đây là đọan code khi chạy sẽ nhân đôi đối với những cell lớn hơn không
Bây giờ em muốn chỉnh lại code trên với điều kiện như sau
Nếu cell A1 và B1 lớn hơn không thì C1=A1+B1, tương tự cho các cell bên dưới

Vì em đang lọ mọ học hỏi, nên các anh chị giúp em viết theo hai cách:
1/ kiểu dạng RC (dạng công thức)
2/ Kiểu mảng
mục đích để em so sánh và học. Em cảm ơn.
 
Upvote 0
/(iểu 1 đây, xin mời bạn ướm

PHP:
Option Explicit
Sub CongThúc()
 Dim Cls As Range, Rng As Range
 
 Set Rng = [A1].End(xlDown).CurrentRegion
 For Each Cls In Rng(1).Offset(, 2).Resize(Rng.Rows.Count)
    With Cls
        If .Offset(, -1).Value > 0 And .Offset(, -2).Value > 0 Then _
            .FormulaR1C1 = "=RC[-2]+RC[-1]"
    End With
 Next Cls
End Sub
 
Upvote 0
PHP:
Option Explicit
Sub CongThúc()
 Dim Cls As Range, Rng As Range
 
 Set Rng = [A1].End(xlDown).CurrentRegion
 For Each Cls In Rng(1).Offset(, 2).Resize(Rng.Rows.Count)
    With Cls
        If .Offset(, -1).Value > 0 And .Offset(, -2).Value > 0 Then _
            .FormulaR1C1 = "=RC[-2]+RC[-1]"
    End With
 Next Cls
End Sub
Cảm ơn bạn đã giúp đỡ
Vui lòng giải thích thêm
1/
PHP:
Set Rng = [A1].End(xlDown).CurrentRegion
đoạn trên có nghĩa: đặt biến Rng bắt đầu từ A1 và tính từ trên xuống, dữ liệu fải liên tục?
Và tôi sửa
PHP:
Set Rng = [A1].End(xlUp).CurrentRegion
thì kết qủa vẫn như nhau
Vậy trường hợp như thế nào thì mới sử dụng như của bạn, và sử dũng như của tôi?
2/ Bạn có thể giải thích cụ thể dùm chỗ này
PHP:
For Each Cls In Rng(1).Offset(, 2).Resize(Rng.Rows.Count)
Cảm ơn các bạn
 
Upvote 0
1./ Bạn làm trống 3 ô gần nhất bao quanh [A1] & thêm câu lệnh này

PHP:
 Set Rng = [A1].End(xlDown).CurrentRegion
 MsgBox [A1].CurrentRegion.Address, , Rng.Address
là thấm thía liền hà.

2./
Rng(1) - là ô đầu tiên của vùng Rng
(Có thể dùng MsgBox Rng(1).Address để tìm hiểu)

Rng(1).Offset(,2) là bên fải của Rng(1) ở cột [C]

Rng.Rows.Count là số dòng của Rng
Resize(Rng.Rows.Count) Là ô cột [C] mở rọng xuống dưới với số dòng = với số dòng của Rng

Tất cả các fương thức này (CurrentRegion, Resize(x,y), Offset(x,y),. . . ) bạn có thể tìm hiểu trên diễn đàn này

(húc bạn sớm thành công.
 
Upvote 0
1./ Bạn làm trống 3 ô gần nhất bao quanh [A1] & thêm câu lệnh này

PHP:
 Set Rng = [A1].End(xlDown).CurrentRegion
 MsgBox [A1].CurrentRegion.Address, , Rng.Address
là thấm thía liền hà.

2./
Rng(1) - là ô đầu tiên của vùng Rng
(Có thể dùng MsgBox Rng(1).Address để tìm hiểu)

Rng(1).Offset(,2) là bên fải của Rng(1) ở cột [C]

Rng.Rows.Count là số dòng của Rng
Resize(Rng.Rows.Count) Là ô cột [C] mở rọng xuống dưới với số dòng = với số dòng của Rng

Tất cả các fương thức này (CurrentRegion, Resize(x,y), Offset(x,y),. . . ) bạn có thể tìm hiểu trên diễn đàn này

(húc bạn sớm thành công.

Chắc từ từ mới thấm, các bạn giúp mình luôn dạng mảng. Xin cảm ơn!
 
Upvote 0
Các bạn vui lòng viết code dạng mảng ở bài 161 để minh thử so sánh?
Cảm ơn cả nhà.
 
Upvote 0
Upvote 0
Muốn gì thì cứ đưa file + ghi rõ yêu cầu lên đây rồi tính
Tìm đến bài 161 đã mất công, lại chưa hình dung được vấn đề (vì không có dữ liệu)
Yêu cầu của mình:

Nếu cell A1 và B1 lớn hơn không thì C1=A1+B1, tương tự cho các cell bên dưới

Vì em đang lọ mọ học hỏi, nên các anh chị giúp em viết theo hai cách:
1/ kiểu dạng RC (dạng công thức)
2/ Kiểu mảng
------------
Ki
ểu dạng RC đã được bạn ChanhTQ@ giúp rồi, và code của bạn ChanhTQ@ là (bài 162)
Mã:
[COLOR=#0000BB][FONT=monospace]Option Explicit
Sub CongThúc[/FONT][/COLOR][COLOR=#007700][FONT=monospace]()
 [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Dim Cls [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rng [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range
 
 Set Rng [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]A1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]xlDown[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]CurrentRegion
 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]For [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Each Cls In Rng[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Resize[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rng[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rows[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Count[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]With Cls
        [/FONT][/COLOR][COLOR=#007700][FONT=monospace]If .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, -[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]And .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, -[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 Then _
            [/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]FormulaR1C1 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"=RC[-2]+RC[-1]"
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End With
 Next Cls
End Sub [/FONT][/COLOR]

Mình đã test thử trên File của mình với 10.000 dòng thì kết qủa cho 3,45 s
Mình muốn các bạn giúp viết code trên ở dạng mảng để mình có thể so sánh & học hỏi đó mà.
cảm ơn các bạn.
 

File đính kèm

Upvote 0
Yêu cầu của mình:

Nếu cell A1 và B1 lớn hơn không thì C1=A1+B1, tương tự cho các cell bên dưới

Vì em đang lọ mọ học hỏi, nên các anh chị giúp em viết theo hai cách:
1/ kiểu dạng RC (dạng công thức)
2/ Kiểu mảng
------------
Ki
ểu dạng RC đã được bạn ChanhTQ@ giúp rồi, và code của bạn ChanhTQ@ là (bài 162)
Mã:
[COLOR=#0000BB][FONT=monospace]Option Explicit
Sub CongThúc[/FONT][/COLOR][COLOR=#007700][FONT=monospace]()
 [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Dim Cls [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rng [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range
 
 Set Rng [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]A1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]xlDown[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]CurrentRegion
 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]For [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Each Cls In Rng[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Resize[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rng[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rows[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Count[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]With Cls
        [/FONT][/COLOR][COLOR=#007700][FONT=monospace]If .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, -[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]And .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, -[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 Then _
            [/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]FormulaR1C1 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"=RC[-2]+RC[-1]"
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End With
 Next Cls
End Sub [/FONT][/COLOR]

Mình đã test thử trên File của mình với 10.000 dòng thì kết qủa cho 3,45 s
Mình muốn các bạn giúp viết code trên ở dạng mảng để mình có thể so sánh & học hỏi đó mà.
cảm ơn các bạn.
Bạn xem sự khác biệt nhé
PHP:
Sub CongThuc2()
 Dim Cls As Range, kq(), i
 Dim StartTime As Double
StartTime = Timer
 kq = Range("A1:A" & [A65536].End(3)).Resize(, 3).Value
   For i = 1 To UBound(kq)
      If kq(i, 1) > 0 And kq(i, 2) > 0 Then
         kq(i, 3) = kq(i, 1) + kq(i, 2)
      End If
   Next
[A1].Resize(i - 1, 3) = kq
 MsgBox Format(Timer - StartTime, "00.00") & " giây."
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn xem sự khác biệt nhé
PHP:
Sub CongThuc2()
 Dim kq(), i
 Dim StartTime As Double
StartTime = Timer
 kq = Range("A1:A" & [A65536].End(3)).Resize(, 3).Value
   For i = 1 To UBound(kq)
      kq(i, 3) = kq(i, 1) + kq(i, 2)
   Next
[A1].Resize(i - 1, 3) = kq
 MsgBox Format(Timer - StartTime, "00.00") & " giây."
End Sub
Quá nhanh, nhưng điều kiện của người ta đâu ????
Híc
 
Upvote 0
Yêu cầu của mình:

Nếu cell A1 và B1 lớn hơn không thì C1=A1+B1, tương tự cho các cell bên dưới

Vì em đang lọ mọ học hỏi, nên các anh chị giúp em viết theo hai cách:
1/ kiểu dạng RC (dạng công thức)
2/ Kiểu mảng
------------
Ki
ểu dạng RC đã được bạn ChanhTQ@ giúp rồi, và code của bạn ChanhTQ@ là (bài 162)
Mã:
[COLOR=#0000BB][FONT=monospace]Option Explicit
Sub CongThúc[/FONT][/COLOR][COLOR=#007700][FONT=monospace]()
 [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Dim Cls [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rng [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range
 
 Set Rng [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]A1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]xlDown[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]CurrentRegion
 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]For [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Each Cls In Rng[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Resize[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rng[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Rows[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Count[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]With Cls
        [/FONT][/COLOR][COLOR=#007700][FONT=monospace]If .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, -[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]And .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Offset[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, -[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]> [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 Then _
            [/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]FormulaR1C1 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"=RC[-2]+RC[-1]"
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End With
 Next Cls
End Sub [/FONT][/COLOR]

Mình đã test thử trên File của mình với 10.000 dòng thì kết qủa cho 3,45 s
Mình muốn các bạn giúp viết code trên ở dạng mảng để mình có thể so sánh & học hỏi đó mà.
cảm ơn các bạn.
Thử code này xem nó ra kết quả trong mấy giây:
Mã:
Sub Test()
  Dim sArray, Arr()
  Dim i As Long, n As Long
  Dim tmp1 As Double, tmp2 As Double, t As Double
  On Error Resume Next
  t = Timer
  sArray = Range("A1").CurrentRegion.Value
  ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
  For i = 1 To UBound(sArray, 1)
    tmp1 = CLng(sArray(i, 1))
    tmp2 = CLng(sArray(i, 2))
    If tmp1 > 0 Then
      If tmp2 > 0 Then Arr(i, 1) = tmp1 + tmp2
    End If
  Next
  Range("D1").Resize(UBound(Arr, 1)).Value = Arr
  MsgBox Format(Timer - t, "0.000") & " giây."
End Sub
 
Upvote 0
Bạn xem sự khác biệt nhé
PHP:
Sub CongThuc2()
 Dim Cls As Range, kq(), i
 Dim StartTime As Double
StartTime = Timer
 kq = Range("A1:A" & [A65536].End(3)).Resize(, 3).Value
   For i = 1 To UBound(kq)
      If kq(i, 1) > 0 And kq(i, 2) > 0 Then
         kq(i, 3) = kq(i, 1) + kq(i, 2)
      End If
   Next
[A1].Resize(i - 1, 3) = kq
 MsgBox Format(Timer - StartTime, "00.00") & " giây."
End Sub
Đúng là tốc độ của mảng thật là tuyệt vời chỉ có 0,08s so với 3,45s
Xin cảm ơn bạn 1 lần nữa!
 
Upvote 0
Thử code này xem nó ra kết quả trong mấy giây:
Mã:
Sub Test()
  Dim sArray, Arr()
  Dim i As Long, n As Long
  Dim tmp1 As Double, tmp2 As Double, t As Double
  On Error Resume Next
  t = Timer
  sArray = Range("A1").CurrentRegion.Value
  ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
  For i = 1 To UBound(sArray, 1)
    tmp1 = [COLOR=#ff0000][B]CLng[/B][/COLOR](sArray(i, 1))
    tmp2 = [B][COLOR=#ff0000]CLng[/COLOR][/B](sArray(i, 2))
    If tmp1 > 0 Then
      If tmp2 > 0 Then Arr(i, 1) = tmp1 + tmp2
    End If
  Next
  Range("D1").Resize(UBound(Arr, 1)).Value = Arr
  MsgBox Format(Timer - t, "0.000") & " giây."
End Sub
Vui lòng cho hỏi CLng để làm gì? có fải làm tròn số không?
Cảm ơn bạn!
 
Upvote 0
Vui lòng cho hỏi CLng để làm gì? có fải làm tròn số không?
Cảm ơn bạn!

Là đổi 1 giá trị ra kiểu Long (đúng ra nên là CDbl mới chính xác ---> Đổi dữ liệu ra kiểu Double)
Ai mà biết trong dữ liệu có cái quỷ gì ---> Lỡ ai đó vô tình gõ text vào 1 vài cell thì sao?
Nói chung: Cẩn thận đến mức tối đa để bảo đảm dữ liệu gì cũng chạy được. Và nếu cần thận hơn nữa, nên thêm hàm IsNumeric để kiểm tra dữ liệu có phải là số hay không
 
Upvote 0
Là đổi 1 giá trị ra kiểu Long (đúng ra nên là CDbl mới chính xác ---> Đổi dữ liệu ra kiểu Double)
Ai mà biết trong dữ liệu có cái quỷ gì ---> Lỡ ai đó vô tình gõ text vào 1 vài cell thì sao?
Nói chung: Cẩn thận đến mức tối đa để bảo đảm dữ liệu gì cũng chạy được. Và nếu cần thận hơn nữa, nên thêm hàm IsNumeric để kiểm tra dữ liệu có phải là số hay không
Em lại nghĩ là dấu + nó sẽ giúp mình xử lý cái vụ text này chứ
Đúng là nếu 2 ô đêu là text thì dấu + lại thành toán tử &
 
Lần chỉnh sửa cuối:
Upvote 0
Em lại nghĩ là dấu + nó sẽ giúp mình xử lý cái vụ text này chứ
Đúng là nếu 2 ô đêu là text thì dấu + lại thành toán tử &
Cái đó cũng còn hên! Nếu 1 ô Text, 1 ô Number thì sao?
Vậy thì CẨN THẬN HƠN:
Mã:
Sub Test()
  Dim sArray, Arr()
  Dim i As Long, n As Long
  Dim tmp1 As Double, tmp2 As Double, t As Double
  On Error Resume Next
  t = Timer
  sArray = Range("A1").CurrentRegion.Value
  ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
  For i = 1 To UBound(sArray, 1)
    If IsNumeric(sArray(i, 1)) Then
      tmp1 = CDbl(sArray(i, 1))
      If IsNumeric(sArray(i, 2)) Then
        tmp2 = CDbl(sArray(i, 2))
        If tmp1 > 0 Then
          If tmp2 > 0 Then Arr(i, 1) = tmp1 + tmp2
        End If
      End If
    End If
  Next
  Range("D1").Resize(UBound(Arr, 1)).Value = Arr
  MsgBox Format(Timer - t, "0.000") & " giây."
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Xin cho hỏi , tại sao code dưới đây không cho kết qủa
Dữ liệu trong File: Cột A, B số liệu không liên tục
Mã:
Sub CongThuc5()    Dim sArray, Arr()
    Dim i As Long, n As Long
    Dim tmp1 As Double, tmp2 As Double, t As Double
    On Error Resume Next
    t = Timer
    sArray = Range("A1:A" & [A65536].End(3)).Value
    MsgBox Range("A1:A" & [A65536].End(3)).Address
    MsgBox UBound(sArray, 1)
    ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
    For i = 1 To UBound(sArray, 1)
        tmp1 = CDbl(sArray(i, 1))
        tmp2 = CDbl(sArray(i, 2))
        If tmp1 > 0 Then
            If tmp2 > 0 Then Arr(i, 1) = tmp1 + tmp2
        End If
    Next
    Range("D1").Resize(UBound(Arr, 1)).Value = Arr
    MsgBox Format(Timer - t, "0.000") & " giây."
End Sub
Các bạn giải thích giúp. Xin cảm ơn
 

File đính kèm

Upvote 0
Xin cho hỏi , tại sao code dưới đây không cho kết qủa
Dữ liệu trong File: Cột A, B số liệu không liên tục
Mã:
Sub CongThuc5()    Dim sArray, Arr()
    Dim i As Long, n As Long
    Dim tmp1 As Double, tmp2 As Double, t As Double
    On Error Resume Next
    t = Timer
    [COLOR=#ff0000][B]sArray = Range("A1:A" & [A65536].End(3)).Value[/B][/COLOR]
    MsgBox Range("A1:A" & [A65536].End(3)).Address
    MsgBox UBound(sArray, 1)
    ReDim Arr(1 To UBound(sArray, 1), 1 To 1)
    For i = 1 To UBound(sArray, 1)
        tmp1 = CDbl(sArray(i, 1))
        tmp2 = CDbl(sArray(i, 2))
        If tmp1 > 0 Then
            If tmp2 > 0 Then Arr(i, 1) = tmp1 + tmp2
        End If
    Next
    Range("D1").Resize(UBound(Arr, 1)).Value = Arr
    MsgBox Format(Timer - t, "0.000") & " giây."
End Sub
Các bạn giải thích giúp. Xin cảm ơn

Sai chổ màu đỏ ấy
Sửa lại thành:
Mã:
sArray = Range("A1:[COLOR=#ff0000]B[/COLOR]" & [A65536].End(3)[COLOR=#ff0000].Rows[/COLOR]).Value
Còn tôi thì thích viết vầy hơn:
Mã:
sArray = Range([A1], [B65536].End(3)).Value
 
Upvote 0
Sai chổ màu đỏ ấy
Sửa lại thành:
Mã:
sArray = Range("A1:[COLOR=#ff0000]B[/COLOR]" & [A65536].End(3)[COLOR=#ff0000].Rows[/COLOR]).Value
Còn tôi thì thích viết vầy hơn:
Mã:
sArray = Range([A1], [B65536].End(3)).Value
Và mình có sửa như bên dưới, kg biết có chính xác không?
(cách 1)
Mã:
sArray = Range("A1:A" & [A65536].End(3)).Resize(, 2).Value
Hoặc (cách 2)
Mã:
sArray = Range("A1:A" & [A65536].End(3)).Resize(, 3).Value
(cách 2: dư 1 cột, thấy không cần thiết!)

Thấy code vẫn chạy đúng
Theo các bạn có nên sử dụng 2 cách trên không?
Xin cảm ơn!
 
Upvote 0
Và mình có sửa như bên dưới, kg biết có chính xác không?
(cách 1)
Mã:
sArray = Range("A1:A" & [A65536].End(3)).Resize(, 2).Value
Hoặc (cách 2)
Mã:
sArray = Range("A1:A" & [A65536].End(3)).Resize(, 3).Value
(cách 2: dư 1 cột, thấy không cần thiết!)

Thấy code vẫn chạy đúng
Theo các bạn có nên sử dụng 2 cách trên không?
Xin cảm ơn!
Sai hoàn toàn
Dữ liệu của bạn đang tới cell A10000 và nó đang có giá trị = 10000. Giờ bạn sửa giá trị của cell A10000 thành số 2 rồi chạy code xem nó ra cái gì nhé
 
Upvote 0
Sai hoàn toàn
Dữ liệu của bạn đang tới cell A10000 và nó đang có giá trị = 10000. Giờ bạn sửa giá trị của cell A10000 thành số 2 rồi chạy code xem nó ra cái gì nhé
Nó chỉ cho kết quảtại D1&D2 thôi! tại sao nhỉ, bạn giải thích giúp mình?
Cảm ơn các bạn!
 
Upvote 0
Nó chỉ cho kết quảtại D1&D2 thôi! tại sao nhỉ, bạn giải thích giúp mình?
Cảm ơn các bạn!

Lưu ý chổ này:
Mã:
sArray = Range("A1:A" & [COLOR=#ff0000][B]Chỉ số dòng của cell cuối cùng ở cột A[/B][/COLOR])...
Có nghĩa là cái ta cần tìm là chỉ số dòng của [A65536].End(3) chứ không phải giá trị của nó
Mà chỉ số dòng của [A65536].End(3) chính là [A65536].End(3).ROW
Trong dữ liệu của bạn, do tình cờ nên giá trị tại [A65536].End(3) = 10000, cũng chính bằng chỉ số dòng của nó nên may mắn khiến cho code chạy đúng ---> Nếu sửa thành số 2 thì.. code sai. Thậm chí nếu sửa thành text nào đó (ví dụ là chữ a) thì code.. tèo luôn
Vậy code chính xác phải là:
Mã:
sArray = Range("A1:A" & [COLOR=#ff0000][B][A65536].End(3).ROW[/B][/COLOR])...
Không biết bạn có hiểu không nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
Lưu ý chổ này:
Mã:
sArray = Range("A1:A" & [COLOR=#ff0000][B]Chỉ số dòng của cell cuối cùng ở cột A[/B][/COLOR])...
Có nghĩa là cái ta cần tìm là chỉ số dòng của [A65536].End(3) chứ không phải giá trị của nó
Mà chỉ số dòng của [A65536].End(3) chính là [A65536].End(3).ROW
Trong dữ liệu của bạn, do tình cờ nên giá trị tại [A65536].End(3) = 10000, cũng chính bằng chỉ số dòng của nó nên may mắn khiến cho code chạy đúng ---> Nếu sửa thành số 2 thì.. code sai. Thậm chí nếu sửa thành text nào đó (ví dụ là chữ a) thì code.. tèo luôn
Vậy code chính xác phải là:
Mã:
sArray = Range("A1:A" & [COLOR=#ff0000][B][A65536].End(3).ROW[/B][/COLOR])...
Không biết bạn có hiểu không nhỉ?
Cái trên là do mình bắc chước của bạn Quang hai ( bài 169) là như bên dưới
Mã:
Sub CongThuc2()
Mã:
[COLOR=#0000BB][FONT=monospace]Dim Cls [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace](), [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i
 Dim StartTime [/FONT][/COLOR][COLOR=#007700][FONT=monospace]As [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Double
StartTime [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Timer
 kq [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"A1:A" [/FONT][/COLOR][COLOR=#007700][FONT=monospace]& [[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]A65536[/FONT][/COLOR][COLOR=#007700][FONT=monospace]].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]3[/FONT][/COLOR][COLOR=#007700][FONT=monospace])).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Resize[/FONT][/COLOR][COLOR=#007700][FONT=monospace](, [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]3[/FONT][/COLOR][COLOR=#007700][FONT=monospace]).[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value
   [/FONT][/COLOR][COLOR=#007700][FONT=monospace]For [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1 To UBound[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
      If [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) > [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 [/FONT][/COLOR][COLOR=#007700][FONT=monospace]And [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) > [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]0 Then
         kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]3[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) = [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) + [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]2[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
      [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End [/FONT][/COLOR][COLOR=#007700][FONT=monospace]If
   [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Next
[/FONT][/COLOR][COLOR=#007700][FONT=monospace][[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]A1[/FONT][/COLOR][COLOR=#007700][FONT=monospace]].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Resize[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]i [/FONT][/COLOR][COLOR=#007700][FONT=monospace]- [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]3[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) = [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]kq
 MsgBox Format[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Timer [/FONT][/COLOR][COLOR=#007700][FONT=monospace]- [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]StartTime[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"00.00"[/FONT][/COLOR][COLOR=#007700][FONT=monospace]) & [/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]" giây."
[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]End Sub[/FONT][/COLOR]

B
ây giờ code trên chạy theo điều kiện mới thì nó cũng tèo luôn!
Cảm ơn các bạn rất nhiều
------------
Góp ý với bạn Quanghai 1 tý, Số liệu cột A & B đã có sao lại tiếp tục gán lại 1 lần nữa nhỉ?
Đó là câu lệnh
PHP:
[A1].Resize(i - 1, 3) = kq
 
Upvote 0
Bạn giải thích thêm chỗ này
Mã:
sArray = Range("A1:B" & [A65536].End(3).Row[COLOR=#ff0000][B]s[/B][/COLOR]).Value
Mã:
sArray = Range("A1:A" & [A65536].End(3).Row).Resize(, 2).Value
1/Về cơ bản là 2 câu lệnh trên là như nhau?

2/ Cơ bản sự khác nhau của Row và Rows?
Mình cũng thấy người ta viết
Mã:
.Rows.count
Cái trên là trả về số hàng của một khối ô nào đó
Không biết có ai viết
Mã:
.Row.count
không?
Với 4 câu lệnh trên thì sử dụng ở trường hợp nào?
Nhờ các bạn giải thích? mình còn mơ hồ mấy cái Row này?
Cảm ơn các bạn
 
Upvote 0
Bạn giải thích thêm chỗ này
Mã:
sArray = Range("A1:B" & [A65536].End(3).Row[COLOR=#ff0000][B]s[/B][/COLOR]).Value
Mã:
sArray = Range("A1:A" & [A65536].End(3).Row).Resize(, 2).Value
1/Về cơ bản là 2 câu lệnh trên là như nhau?

2/ Cơ bản sự khác nhau của Row và Rows?
Mình cũng thấy người ta viết
Mã:
.Rows.count
Cái trên là trả về số hàng của một khối ô nào đó
Không biết có ai viết
Mã:
.Row.count
không?
Với 4 câu lệnh trên thì sử dụng ở trường hợp nào?
Nhờ các bạn giải thích? mình còn mơ hồ mấy cái Row này?
Cảm ơn các bạn
Trong bài của bạn thì ROW mới đúng
ROW là ý nói đến chỉ số dòng tại cell đang xét
ROWS (thường kèm với .COUNT) là ý nói đến tổng số dòng của 1 vùng đang xét
 
Upvote 0
Trong bài của bạn thì ROW mới đúng
ROW là ý nói đến chỉ số dòng tại cell đang xét
ROWS (thường kèm với .COUNT) là ý nói đến tổng số dòng của 1 vùng đang xét
Nếu vậy, câu lệnh này đã dư chữ s
Mã:
[COLOR=#000000][I]sArray = Range("A1:B" & [A65536].End(3).Row[/I][/COLOR][COLOR=#ff0000][I][B]s[/B][/I][/COLOR][COLOR=#000000][I]).Value[/I][/COLOR]
Và mình đã test, câu lệnh đúng là
Mã:
[COLOR=#000000][I]sArray = Range("A1:B" & [A65536].End(3).Row[/I][/COLOR][COLOR=#000000][I]).Value[/I][/COLOR]

Ph
ải không các bạn
Xin cảm ơn tất cả
 
Upvote 0
Nếu vậy, câu lệnh này đã dư chữ s
Mã:
[COLOR=#000000][I]sArray = Range("A1:B" & [A65536].End(3).Row[/I][/COLOR][COLOR=#ff0000][I][B]s[/B][/I][/COLOR][COLOR=#000000][I]).Value[/I][/COLOR]
Và mình đã test, câu lệnh đúng là
Mã:
[COLOR=#000000][I]sArray = Range("A1:B" & [A65536].End(3).Row[/I][/COLOR][COLOR=#000000][I]).Value[/I][/COLOR]

Ph
ải không các bạn
Xin cảm ơn tất cả

Xem lại thì chính tôi cũng sai ở bài 179 rồi
(đã nói bị ảnh hưởng bời TẬN THẾ rồi)
Ẹc... Ẹc
 
Upvote 0
Thật sự bái phục bác Bill. Hôm nay ảnh hưởng tận thế hay sao mà viết code thế này. Vậy mà kết quả ra đúng 100 % mới ghê chứ. Thêm 1 cái ghê nữa là tốc độ lại nhanh hơn khi viết đúng nữa. Má ơi!
Sao lại trùng hợp cái dòng dữ liệu cuối có giá trị 10 000 mới ác chứ.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái trên là do mình bắc chước của bạn Quang hai ( bài 169) là như bên dưới

Góp ý với bạn Quanghai 1 tý, Số liệu cột A & B đã có sao lại tiếp tục gán lại 1 lần nữa nhỉ?
Đó là câu lệnh
PHP:
[A1].Resize(i - 1, 3) = kq

Hic từ xưa đến giờ luôn viết :

kq = Range([A1], [A65536].End(3)).Resize(, 3).Value

Hỏng biết sao nay mắc chứng gì bày đặt thay đổi kiểu cho dính chưởng. híc.

Còn việc tại sao phải gán giá trị lại tại cột A và B hả? Không nói bạn biết đâu.

Bạn thấy thích thì làm giống, hỏng thích thì làm theo cách của bạn nhé.
Rồi sẽ có 1 ngày bạn hiểu tại sao thôi

 
Upvote 0
Hic từ xưa đến giờ luôn viết :

kq = Range([A1], [A65536].End(3)).Resize(, 3).Value

Hỏng biết sao nay mắc chứng gì bày đặt thay đổi kiểu cho dính chưởng. híc.

Còn việc tại sao phải gán giá trị lại tại cột A và B hả? Không nói bạn biết đâu.

Bạn thấy thích thì làm giống, hỏng thích thì làm theo cách của bạn nhé.
Rồi sẽ có 1 ngày bạn hiểu tại sao thôi

Hi, mình chỉ hỏi thế thôi mà, sao bạn tự ái thế!
Mình thấy vậy nên "théc méc" 1 tý. Chứ còn fải học ở các anh chị nhiều
Bây giờ bạn chỉ mình cách lấy dữ liệu cho riêng cột C nha!
Xin cảm ơn các bạn
-------------
Nếu có câu gì làm bạn buồn, thì mình thành thật xin lỗi.
 
Upvote 0
Hi, mình chỉ hỏi thế thôi mà, sao bạn tự ái thế!
Mình thấy vậy nên "théc méc" 1 tý. Chứ còn fải học ở các anh chị nhiều
Bây giờ bạn chỉ mình cách lấy dữ liệu cho riêng cột C nha!
Xin cảm ơn các bạn
-------------
Nếu có câu gì làm bạn buồn, thì mình thành thật xin lỗi.

Làm gì mà tự ái chứ. Hôm nay viết code đụng chỗ nào cũng sai tí xíu.
 
Upvote 0
Upvote 0
Nhờ các bạn sửa code xóa dữ liệu
Tôi có viết code xóa dữ liệu ở các cột như sau:
Bắt đầu từ các cell A9, C9, J9, O9, Q9, R9, S9 trở xuống
Mã:
Sub XoaVung()
Dim Vung As Range
[COLOR=#ff0000]Vung = Range("A9:A10000").Value[/COLOR]
With Vung
Union(Vung, Vung.Offset(, 2), Vung.Offset(, 9), Vung.Offset(, 14), Vung.Offset(, 15).Resize(, 3)).ClearContents
End With
End Sub
Code báo sai ở đọan màu đỏ
Xin cảm ơn!
 
Upvote 0
Nhờ các bạn sửa code xóa dữ liệu
Tôi có viết code xóa dữ liệu ở các cột như sau:
Bắt đầu từ các cell A9, C9, J9, O9, Q9, R9, S9 trở xuống
Mã:
Sub XoaVung()
Dim Vung As Range
[COLOR=#ff0000]Vung = Range("A9:A10000").Value[/COLOR]
With Vung
Union(Vung, Vung.Offset(, 2), Vung.Offset(, 9), Vung.Offset(, 14), Vung.Offset(, 15).Resize(, 3)).ClearContents
End With
End Sub
Code báo sai ở đọan màu đỏ
Xin cảm ơn!

Bạn không thể làm vậy được. Bạn không thể gán giá trị cho biến Range. kyo nghĩ sửa lại thế này hợp lý hơn:

Mã:
Sub XoaVung()
Dim Vung As Range
[B]Set Vung = Range("A9:A10000")[/B]
Union(Vung, Vung.Offset(, 2), Vung.Offset(, 9), Vung.Offset(, 14), Vung.Offset(, 15).Resize(, 3)).ClearContents
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các bạn sửa code xóa dữ liệu
Tôi có viết code xóa dữ liệu ở các cột như sau:
Bắt đầu từ các cell A9, C9, J9, O9, Q9, R9, S9 trở xuống
Mã:
Sub XoaVung()
Dim Vung As Range
[COLOR=#ff0000]Vung = Range("A9:A10000").Value[/COLOR]
With Vung
Union(Vung, Vung.Offset(, 2), Vung.Offset(, 9), Vung.Offset(, 14), Vung.Offset(, 15).Resize(, 3)).ClearContents
End With
End Sub
Code báo sai ở đọan màu đỏ
Xin cảm ơn!

Dim Vung As Range
Set Vung = Range("A9:A10000")

sao bạn khai báo nó là range mà lại đi .value?
 
Upvote 0
Các thầy cô & anh chị cho em hỏi như sau
Em sắp làm hàm Max SumProduct trên code, nhưng tra cứu trên thư viện thì không có hỗ trợ hàm Max chỉ thấy hỗ trợ hàm DMax

Mã:
Function DMax(Arg1 As Range, Arg2, Arg3) As Double
Như vậy hàm DMax sử dụng giống như hàm Max của Excel không?
Và hàm SumProduct trong thư viện là
Mã:
Function SumProduct(Arg1, [Arg2], [Arg3], [Arg4], [Arg5], [Arg6], [Arg7], [Arg8], [Arg9], [Arg10], [Arg11], [Arg12], [Arg13], [Arg14], [Arg15], [Arg16], [Arg17], [Arg18], [Arg19], [Arg20], [Arg21], [Arg22], [Arg23], [Arg24], [Arg25], [Arg26], [Arg27], [Arg28], [Arg29], [Arg30]) As Double
hàm SumProduct sử dụng giống như hàm Sumproduct của Excel không?
Em cảm ơn
----------
Em chưa thử nghiệm, nhưng hỏi trước để không mất quá nhiều thời gian tìm tòi!
 
Upvote 0
Các thầy cô & anh chị cho em hỏi như sau
Em sắp làm hàm Max SumProduct trên code, nhưng tra cứu trên thư viện thì không có hỗ trợ hàm Max chỉ thấy hỗ trợ hàm DMax

Mã:
Function DMax(Arg1 As Range, Arg2, Arg3) As Double
Như vậy hàm DMax sử dụng giống như hàm Max của Excel không?
Và hàm SumProduct trong thư viện là
Mã:
Function SumProduct(Arg1, [Arg2], [Arg3], [Arg4], [Arg5], [Arg6], [Arg7], [Arg8], [Arg9], [Arg10], [Arg11], [Arg12], [Arg13], [Arg14], [Arg15], [Arg16], [Arg17], [Arg18], [Arg19], [Arg20], [Arg21], [Arg22], [Arg23], [Arg24], [Arg25], [Arg26], [Arg27], [Arg28], [Arg29], [Arg30]) As Double
hàm SumProduct sử dụng giống như hàm Sumproduct của Excel không?
Em cảm ơn
----------
Em chưa thử nghiệm, nhưng hỏi trước để không mất quá nhiều thời gian tìm tòi!
Bạn tự mình viết lấy 1 hàm MAX tự tạo cũng được vậy
Riêng về phần SUMPRODUCT tôi thường viết theo kiểu vầy:
Mã:
Sub Test()
  Dim rng1 As Range, rng2 As Range, rng3 As Range
  Dim Crit1, Crit2
  Set rng1 = Range("A1:A10")
  Set rng2 = Range("B1:B10")
  Set rng3 = Range("C1:C10")
  Crit1 = Range("F2").Value
  Crit2 = Range("G1").Value
  Range("G2").Value = Evaluate("SUMPRODUCT((" & rng1.Address & "=""" & Crit1 & """)*(" & _
                                                rng2.Address & "=""" & Crit2 & """)*(" & _
                                                rng3.Address & "))")

End Sub


Capture.JPG
























Dùng Evaluate, bên trong là 1 chuổi chứa biêu thức tính toán
Xét cho cùng thì SUMPRODUCT cũng là 1 dạng bài toán lọc và tính tổng, vậy ta có thể dùng mảng để xử lý sẽ nhanh hơn
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn!
Mình có cột H, bắt đầu từ ô H6 đến H20000, trong các ô này có ô là dữ liệu kiểu số hoặc dữ liệu kiểu Text (VD : ô H6 là 123, ô H7 là "TA123" ,...) Bây giờ mình muốn các bạn hướng dẫn sử dụng code nào để xóa các ô có dữ liệu kiểu số nhưng vẫn giữ kiểu Text lại!
Xin cảm ơn!
 
Upvote 0
Chào các bạn!
Mình có cột H, bắt đầu từ ô H6 đến H20000, trong các ô này có ô là dữ liệu kiểu số hoặc dữ liệu kiểu Text (VD : ô H6 là 123, ô H7 là "TA123" ,...) Bây giờ mình muốn các bạn hướng dẫn sử dụng code nào để xóa các ô có dữ liệu kiểu số nhưng vẫn giữ kiểu Text lại!
Xin cảm ơn!
Thử thế này
PHP:
Sub xoa()
Dim data(), i, Res(1 To 20000, 1 To 1), k
data = [H6:H20000].Value
For i = 1 To UBound(data)
   If IsNumeric(data(i, 1)) Then
      k = k + 1
      Res(k, 1) = data(i, 1)
   End If
Next
[I2].Resize(k) = Res
End Sub
Hay là thế này, nếu cái trên chưa đúng ý
PHP:
Sub xoa2()
Dim data(), i
data = [H6:H20000].Value
For i = 1 To UBound(data)
   If Not IsNumeric(data(i, 1)) Then
      data(i, 1) = Empty
   End If
Next
[I2].Resize(i - 1) = data
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn!
Mình có cột H, bắt đầu từ ô H6 đến H20000, trong các ô này có ô là dữ liệu kiểu số hoặc dữ liệu kiểu Text (VD : ô H6 là 123, ô H7 là "TA123" ,...) Bây giờ mình muốn các bạn hướng dẫn sử dụng code nào để xóa các ô có dữ liệu kiểu số nhưng vẫn giữ kiểu Text lại!
Xin cảm ơn!
Em chậm chân hơn anh Quanghai rồi, tất cả là tại con 3G phải nghĩ cách khác thôi, huhuhu
PHP:
Sub DelConts()
Dim i As Long, Rng As Range
Set Rng = [H6:H20000]
For i = 6 To 20000
    If IsNumeric(Cells(i, 8)) Then
        Cells(i, 8).ClearContents
    End If
Next
Rng.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
 
Upvote 0
Em chậm chân hơn anh Quanghai rồi, tất cả là tại con 3G phải nghĩ cách khác thôi, huhuhu
PHP:
Sub DelConts()
Dim i As Long, Rng As Range
Set Rng = [H6:H20000]
For i = 6 To 20000
    If IsNumeric(Cells(i, 8)) Then
        Cells(i, 8).ClearContents
    End If
Next
Rng.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
Em ơi 20 000 dòng mà mình xử lý trên sheet chắc chạy hơi chậm và có thể là quá chậm, máy yếu có thể đơ luôn đó.
 
Upvote 0
Em ơi 20 000 dòng mà mình xử lý trên sheet chắc chạy hơi chậm và có thể là quá chậm, máy yếu có thể đơ luôn đó.
Em bít, em bít, ai biểu tại con 3G chậm, em viết code xong thấy anh post bài rồi em phải nghĩ cách khác chứ sao nữa, máy anh bị treo hả, cho anh chít, hiiiiiiiiiiii
Gửi LienDong : nhớ dùng mảng kẻo bị treo máy nhé, cách của mình hơi dàiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!hi
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ chỉnh code copy Paste value
Mình đã record macro như sau
Mã:
Sub Macro2()
'
    Range("D6:D18").Select
    Selection.Copy
    Range("G6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Application.CutCopyMode = False
    
End Sub
Nhờ các bạn sửa code, sau khi copy thì chọn ô để paste rồi bấm code để paste thành hàng ngang hay ngược lại
cảm ơn cả nhà!
 
Upvote 0
Nhờ chỉnh code copy Paste value
Mình đã record macro như sau
Mã:
Sub Macro2()
'
    Range("D6:D18").Select
    Selection.Copy
    Range("G6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True
    Application.CutCopyMode = False
    
End Sub
Nhờ các bạn sửa code, sau khi copy thì chọn ô để paste rồi bấm code để paste thành hàng ngang hay ngược lại
cảm ơn cả nhà!
Các bạn hỗ trợ mình bài này với
Mình đã thay đổi như sau, nhưng vẫn báo lỗi
Mã:
[COLOR=#000000]Sub Macro_3()[/COLOR]
       Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True   Application.CutCopyMode = False    
End Sub
Cảm ơn các bạn
 
Upvote 0
Các bạn hỗ trợ mình bài này với
Mình đã thay đổi như sau, nhưng vẫn báo lỗi
Mã:
[COLOR=#000000]Sub Macro_3()[/COLOR]
       Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True   Application.CutCopyMode = False    
End Sub
Cảm ơn các bạn
PHP:
Sub copy()
Range("D6:D18").copy
Range("G6").PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End Sub

Lại nào :
PHP:
Sub Lainao()
Selection.copy
Range("D6").PasteSpecial Paste:=xlPasteValues, Transpose:=True
   Application.CutCopyMode = False
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn!
Mình có cột H, bắt đầu từ ô H6 đến H20000, trong các ô này có ô là dữ liệu kiểu số hoặc dữ liệu kiểu Text (VD : ô H6 là 123, ô H7 là "TA123" ,...) Bây giờ mình muốn các bạn hướng dẫn sử dụng code nào để xóa các ô có dữ liệu kiểu số nhưng vẫn giữ kiểu Text lại!
Xin cảm ơn!
bài này có thể sử dụng chức năng Goto Special để thao tác tôi thấy cũng nhanh lắm, không cần tời code đâu
 
Upvote 0
Các bạn hỗ trợ mình bài này với
Mình đã thay đổi như sau, nhưng vẫn báo lỗi
Mã:
[COLOR=#000000]Sub Macro_3()[/COLOR]
       Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True   Application.CutCopyMode = False    
End Sub
Cảm ơn các bạn
Bạn thử với code này
Mã:
Sub PasteValues_Transpose()
    Dim rng As Object
    On Error Resume Next
    Set rng = Selection
    If Application.CutCopyMode Then
        If TypeOf rng Is Range Then rng(1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True
    End If
    Application.CutCopyMode = False
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Bạn thử với code này
Mã:
Sub PasteValues_Transpose()
    Dim rng As Object
    On Error Resume Next
    Set rng = Selection
    If Application.CutCopyMode Then
        If TypeOf rng Is Range Then rng(1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True
    End If
    Application.CutCopyMode = False
End Sub

Thay vì dùng Selection phải mất công xét xem Selection có phải là Range hay không, ta dùng luôn ActiveCell cho khỏe
Vì: Selection chưa chắc là Range nhưng ActiveCell thì chắc chắn 100% là Range rồi
Mã:
Sub PasteValues_Transpose()
  On Error Resume Next
  If Application.CutCopyMode = [COLOR=#ff0000]xlCopy[/COLOR] Then ActiveCell.PasteSpecial 3, , , True
End Sub
Lưu ý chổ màu đỏ: Chỉ khi Ctrl + C mới chơi, còn Ctrl + X thì.. miễn
 
Upvote 0

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

Back
Top Bottom