Nhờ tính VL,NC, MTC đối với mỗi công việc; chuyển dữ liệu từ hàng dọc sang hàng ngang (5 người xem)

Liên hệ QC

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

Dauthivan

Thành viên tiêu biểu
Tham gia
15/8/08
Bài viết
565
Được thích
327
Nhờ mọi người tư vấn, tính giúp em Vật liệu, Nhân công, Máy thi công đối với mỗi công việc (phép tính của em nếu tính thủ công cũng đơng giản nhưng khối lượng các công việc của em nhiều quá, nếu tính tay quá lâu), em xin tính mẫu công việc đầu tiên có ô màu vàng, xin mọi người tính giúp em các công việc tiếp theo bằng VBA với ah:

Bangdongiachitiet.jpg



- Sau đó, em xin phép phiên nhờ mọi người thêm bài toán nhỏ nữa là : Trích lọc dữ liệu hàng ngang sang dữ liệu hàng dọc (em muốn lọc chi phí vật liệu, nhân công, máy thi công của mỗi công việc) từ Biểu đơn giá chi tiết sang một sheet mới (Sheet!Ket qua) theo mẫu biểu sau ah:
Bangketqua-1.jpg
 

File đính kèm

Mong mọi người giúp em với, nhất là việc chuyển dữ liệu từ hàng ngang sang hàng dọc theo yêu cầu Bên mời thầu, em không biết phải làm sao bây giờ; Thầu bên em khoảng 3 tuần nữa là phải nộp hồ sơ đấu thầu rồi, nhưng Sếp em yêu cầu trong 10 ngày nữa là phải xong, khối lượng tính toán thì lại nhiều quá.
 
Bạn kiểm thử số liệu theo file kèm xem sao

/(/ếu bên KetQua cần liệt kê hết các dòng công việc thì chuyện sẽ khác thêm!
 

File đính kèm

/(Nếu bên KetQua cần liệt kê hết các dòng công việc thì chuyện sẽ khác thêm!

Vâng, em cần liệt kê hết các dòng công việc sang sheet!Ket qua, vì vậy bên Sheet Ket qua em để...ý em là công việc số 1 làm mẫu, các công việc sau làm tương tự khi chạy VBA; khối lượng công việc của em rất lớn, tất cả các gói thầu khoảng 20.000 dòng vì vậy em không thể thực hiện xong nếu làm thủ công.

Rất mong bác và mọi người giúp em vì VBA em còn kém lắm (kết quả lọc các công việc em muốn thể hiện nó sang hẳn Sheet!Ket qua, tức không cùng với Sheet cũ).
 
Bạn xài macro này thay cho macro sự kiện của bài trên

PHP:
 Sub THDanhSachCongViec()
  Dim Sh As Worksheet, Rng As Range, sRng As Range, Rg0 As Range, Cls As Range
  Dim jJ As Byte, Rws As Long
  Dim Loai As String
 
  Set Sh = ThisWorkbook.Worksheets("DonGiaChiTiet")
  Sheets("KetQua").Select
  Rws = Sh.[d65500].End(xlUp).Row
  Set Rng = Sh.[A3].Resize(Rws).SpecialCells(xlCellTypeConstants, 1)
  [a5].Resize(Rws, 6).ClearContents          'Xóa'
  For Each Cls In Rng
      With Cells(Rws, "A").End(xlUp).Offset(1)
         .Value = Cls.Value
         .Offset(, 1).Value = Cls.Offset(, 3).Value
         Set Rg0 = Range(Cls, Cls.End(xlDown)).Offset(, 3)
         For jJ = 1 To 4
            Loai = [b4].Offset(, jJ).Value
            Set sRng = Rg0.Find(Loai, , xlFormulas, xlWhole)
            If Not sRng Is Nothing Then
               .Offset(, 1 + jJ).Value = sRng.Offset(, 5).Value
            End If
         Next jJ
      End With
   Next Cls
 End Sub

Chú í nhỏ: Chạy trên file của bài 2 nha!
Nếu trở thành rùa thì fải dùng cách khác hơn nữa.
 
/(/ếu bên KetQua cần liệt kê hết các dòng công việc thì chuyện sẽ khác thêm!

Em thực hiện Copy kết hợp
PHP:
Option Explicit
Sub ChietTinh()
 Dim Rws As Long, jJ As Byte
 Dim Rng As Range, Cls As Range, sRng As Range, Rg As Range, Rg0 As Range
 Dim WF As Object, StrC As String
 ReDim MSD(1 To 3) As Double
 
 Rws = [d65500].End(xlUp).Row
 Set Rng = [A3].Resize(Rws).SpecialCells(xlCellTypeConstants, 1)
 Set WF = Application.WorksheetFunction
 For Each Cls In Rng
   Set Rg = Range(Cls, Cls.End(xlDown).Offset(-1)).Offset(, 3)
   If Rg.Count > 99 Then Set Rg = Cls.Resize(19)
   
   For jJ = 1 To 4
      StrC = [AA1].Resize(4)(jJ).Value
      Set sRng = Rg.Find(StrC, , xlValues, xlWhole)
      If Not sRng Is Nothing Then
         If jJ = 1 Then
            MSD(1) = sRng.Offset(, 5).Value
         ElseIf jJ = 2 And sRng.Offset(1, 5).Value > 0 Then
            With sRng.Offset(, 3)
               MSD(2) = .Offset(1, 2).Value * .Value
               .Offset(, 2).Value = MSD(2)
               .Interior.ColorIndex = 34
            End With
         ElseIf jJ = 3 And sRng.Offset(1, 5).Value > 0 Then
            Set Rg0 = Range(sRng.Offset(1, -1), sRng.Offset(1, -1).End(xlDown)).Offset(, 6)
            MsgBox Rg0.Address, , sRng.Offset(1, 5).Value
            With sRng.Offset(, 5)
               MSD(3) = .Offset(, -2).Value * WF.Sum(Rg0)
               .Value = MSD(3)
               .Interior.ColorIndex = 35
            End With
         ElseIf jJ = 4 Then
            sRng.Offset(, 5).Value = (MSD(1) + MSD(2) + MSD(3)) * 0.015
            MSD(1) = 0:          MSD(2) = 0:          MSD(3) = 0
         End If
      End If
   Next jJ
 Next Cls
End Sub

Sub THDanhSachCongViec()
  Dim Sh As Worksheet, Rng As Range, sRng As Range, Rg0 As Range, Cls As Range
  Dim jJ As Byte, Rws As Long
  Dim Loai As String
 
  Set Sh = ThisWorkbook.Worksheets("DonGiaChiTiet")
  Sheets("KetQua").Select
  Rws = Sh.[d65500].End(xlUp).Row
  Set Rng = Sh.[A3].Resize(Rws).SpecialCells(xlCellTypeConstants, 1)
  [a5].Resize(Rws, 6).ClearContents          'Xóa'
  For Each Cls In Rng
      With Cells(Rws, "A").End(xlUp).Offset(1)
         .Value = Cls.Value
         .Offset(, 1).Value = Cls.Offset(, 3).Value
         Set Rg0 = Range(Cls, Cls.End(xlDown)).Offset(, 3)
         For jJ = 1 To 4
            Loai = [b4].Offset(, jJ).Value
            Set sRng = Rg0.Find(Loai, , xlFormulas, xlWhole)
            If Not sRng Is Nothing Then
               .Offset(, 1 + jJ).Value = sRng.Offset(, 5).Value
            End If
         Next jJ
      End With
   Next Cls
 End Sub

về chạy file của em không được, em đang rất cần ngay xin mọi người hoàn thiện dùm em với./.
 
về chạy file của em không được, em đang rất cần ngay xin mọi người hoàn thiện dùm em với./.

Bạn cho biết rõ thêm macro nào bị lỗi & báo lỗi ngay dòng nào?

Trong file của bạn có 1 số trường/cột bị ẩn đi; Bạn xem thiết kế của file bạn đưa lên & file thực thụ hệt nhau không; File giả lập có thể số liệu khác với thực nhưng thiết kế fải khớp nhau mới được.

Muốn có kết quả nhanh thì bạn chứ không ai khác, cung cấp thông tin cần rõ hơn, để mọi người trong cộng đồng tìm cách hỗ trợ bạn tiếp.

Thân ái & vui nha!
 
Rất mong mọi người giúp em, em đang rất cần ngay ah

Bạn cho biết rõ thêm macro nào bị lỗi & báo lỗi ngay dòng nào?

Trong file của bạn có 1 số trường/cột bị ẩn đi; Bạn xem thiết kế của file bạn đưa lên & file thực thụ hệt nhau không; File giả lập có thể số liệu khác với thực nhưng thiết kế fải khớp nhau mới được.

Muốn có kết quả nhanh thì bạn chứ không ai khác, cung cấp thông tin cần rõ hơn, để mọi người trong cộng đồng tìm cách hỗ trợ bạn tiếp.

Thân ái & vui nha!

File chính thức của em đây ah. Em xin nhờ mọi người:
1) Điền giúp em dữ liệu cho các ô bôi dấu ? (Vật liệu, Nhân công, Máy thi công, Chi phí khác) của các công việc thứ 2 trở đi, công việc 1 em đã làm mẫu tại các ô mẫu bôi vàng.

2) Kết xuất, bố trí dùm em các chi phí Vật liệu, Nhân công, Máy thi công, Chi phí khác trong Bảng Đơn giá chi tiết từ dữ liệu ngang sang dữ liệu dọc. Kết quả được thể hiện sang Sheet mới (là Sheet!Ket qua).

Em xin cảm ơn rất nhiều, em đang rất cần gấp trường hợp này ah.
 

File đính kèm

Bạn chạy thử nhé.
PHP:
Sub NhapCongThuc()
Dim DuLieu, KetQuaCT, KetQuaTH(), DongDau As Long, DongCuoi As Long, CongViec As Long, Nhom As Long, ChiTiet As Long, i As Long, j As Long, TenShCT As String
DongDau = 3
DongCuoi = [C65536].End(xlUp).Row + 1
DuLieu = Range("A" & (DongDau + 1) & ":C" & DongCuoi).Value
Range("G" & (DongDau + 1) & ":G" & DongCuoi).ClearContents
KetQuaCT = Range("G" & (DongDau + 1) & ":G" & DongCuoi).Value
DuLieu(UBound(DuLieu, 1), 1) = "GPE"
TenShCT = "='" & ActiveSheet.Name & "'!"
ReDim KetQuaTH(1 To DongCuoi, 1 To 6)
Sheets("Ket qua").UsedRange.Offset(4).ClearContents
For i = 1 To UBound(DuLieu, 1)
    If DuLieu(i, 3) = "Tr" & ChrW(7921) & "c ti" & ChrW(7871) & "p phí khác" Then
        KetQuaCT(i, 1) = "=15/100*R[" & (CongViec - i) & "]C"
        KetQuaTH(j, 6) = TenShCT & "G" & (DongDau + i)
    ElseIf DuLieu(i, 1) <> "" Then
        CongViec = i
        KetQuaCT(CongViec, 1) = "="
        j = j + 1
        KetQuaTH(j, 1) = TenShCT & "A" & (DongDau + CongViec)
        KetQuaTH(j, 2) = TenShCT & "C" & (DongDau + CongViec)
    ElseIf DuLieu(i, 1) & DuLieu(i, 2) = "" Then
        Nhom = i
        KetQuaCT(CongViec, 1) = KetQuaCT(CongViec, 1) & "+R[" & (Nhom - CongViec) & "]C"
        Select Case DuLieu(i, 3)
        Case "V" & ChrW(7853) & "t li" & ChrW(7879) & "u"
            KetQuaTH(j, 3) = TenShCT & "G" & (DongDau + Nhom)
        Case "Nhân công"
            KetQuaTH(j, 4) = TenShCT & "G" & (DongDau + Nhom)
        Case "Máy thi công"
            KetQuaTH(j, 5) = TenShCT & "G" & (DongDau + Nhom)
        End Select
    Else
        KetQuaCT(Nhom, 1) = "=SUM(R[1]C:R[" & (i - Nhom) & "]C)*RC[-2]"
        KetQuaCT(i, 1) = "=RC[-2]*RC[-1]"
    End If
Next
KetQuaCT(UBound(KetQuaCT, 1), 1) = ""
Application.ReferenceStyle = xlR1C1
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT
Application.ReferenceStyle = xlA1
Sheets("Ket qua").[A5].Resize(j - 1, 6).Value = KetQuaTH
End Sub
 

File đính kèm

Các công thức mảng bằng Excel đơn thuần em khá ổn, nhưng tập chuyển sang GPE nhiều khi em chưa hiểu lắm, xin nhờ mọi người giúp cho:

1. DuLieu(UBound(DuLieu, 1), 1) = "GPE" có ý nghĩa gì?

2. Tại sao một số biến khi đặt tên lại phải có () kèm theo, ví dụ: KetQuaTH(), trong khi một số khác lại không KetQuaCT.

3. Nếu có thể xin chỉ giúp chi tiết cho em cách dùng UBound, em đọc từ sáng nhưng chưa hiểu lắm.

Em xin cảm ơn
 
Các công thức mảng bằng Excel đơn thuần em khá ổn, nhưng tập chuyển sang GPE nhiều khi em chưa hiểu lắm, xin nhờ mọi người giúp cho:

1. DuLieu(UBound(DuLieu, 1), 1) = "GPE" có ý nghĩa gì?

2. Tại sao một số biến khi đặt tên lại phải có () kèm theo, ví dụ: KetQuaTH(), trong khi một số khác lại không KetQuaCT.

3. Nếu có thể xin chỉ giúp chi tiết cho em cách dùng UBound, em đọc từ sáng nhưng chưa hiểu lắm.

Em xin cảm ơn
1. Do lúc đầu tôi định dùng thuật toán khác nên mới có đoạn đó. Sau khi thay đổi thuật toán tôi chưa sửa lại. Bạn có thể dùng code này và không cần phải quan tâm tới nó nữa.
PHP:
Sub NhapCongThuc()
Dim DuLieu, KetQuaCT, KetQuaTH(), DongDau As Long, DongCuoi As Long, CongViec As Long, Nhom As Long, ChiTiet As Long, i As Long, j As Long, TenShCT As String
DongDau = 3
DongCuoi = [C65536].End(xlUp).Row
DuLieu = Range("A" & (DongDau + 1) & ":C" & DongCuoi).Value
Range("G" & (DongDau + 1) & ":G" & DongCuoi).ClearContents
KetQuaCT = Range("G" & (DongDau + 1) & ":G" & DongCuoi).Value
TenShCT = "='" & ActiveSheet.Name & "'!"
ReDim KetQuaTH(1 To DongCuoi, 1 To 6)
Sheets("Ket qua").UsedRange.Offset(4).ClearContents
For i = 1 To UBound(DuLieu, 1)
    If DuLieu(i, 3) = "Tr" & ChrW(7921) & "c ti" & ChrW(7871) & "p phí khác" Then
        KetQuaCT(i, 1) = "=15/100*R[" & (CongViec - i) & "]C"
        KetQuaTH(j, 6) = TenShCT & "G" & (DongDau + i)
    ElseIf DuLieu(i, 1) <> "" Then
        CongViec = i
        KetQuaCT(CongViec, 1) = "="
        j = j + 1
        KetQuaTH(j, 1) = TenShCT & "A" & (DongDau + CongViec)
        KetQuaTH(j, 2) = TenShCT & "C" & (DongDau + CongViec)
    ElseIf DuLieu(i, 1) & DuLieu(i, 2) = "" Then
        Nhom = i
        KetQuaCT(CongViec, 1) = KetQuaCT(CongViec, 1) & "+R[" & (Nhom - CongViec) & "]C"
        Select Case DuLieu(i, 3)
        Case "V" & ChrW(7853) & "t li" & ChrW(7879) & "u"
            KetQuaTH(j, 3) = TenShCT & "G" & (DongDau + Nhom)
        Case "Nhân công"
            KetQuaTH(j, 4) = TenShCT & "G" & (DongDau + Nhom)
        Case "Máy thi công"
            KetQuaTH(j, 5) = TenShCT & "G" & (DongDau + Nhom)
        End Select
    Else
        KetQuaCT(Nhom, 1) = "=SUM(R[1]C:R[" & (i - Nhom) & "]C)*RC[-2]"
        KetQuaCT(i, 1) = "=RC[-2]*RC[-1]"
    End If
Next
Application.ReferenceStyle = xlR1C1
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT
Application.ReferenceStyle = xlA1
Sheets("Ket qua").[A5].Resize(j, 6).Value = KetQuaTH
End Sub
2. Khai báo có () là khai báo mảng.
3. Ubound và Lbound dùng để kiểm tra kích thước của mảng.
 
Em đoán ChrW(7921)có nghĩa là chữ ự, còn ChrW(7871)có nghĩa là ế. Tuy vậy, những người mới biết như em làm sao biết cái đó tra ở đâu ra ah?
 
Em đoán ChrW(7921)có nghĩa là chữ ự, còn ChrW(7871)có nghĩa là ế. Tuy vậy, những người mới biết như em làm sao biết cái đó tra ở đâu ra ah?

Mình chỉ bạn cách thô nhất để vượt qua các nhóm từ 'Nhân công', 'máy thi công', 'vật liệu',. . . là ta cho các ô chứa từ các cụm từ này vô các Names, & khi cần thì ới chúng ra mà xài thôi.

Ví dụ 1 bài ở trên mà bạn chắc chưa xem kỹ: ta gán ô [AA1] đang chứa chuỗi "Vật liệu" có tên là VLieu,. . . . , tương tự cho 3 cụm chuỗi còn lại.

Lúc đó thì cũng giống như cuốc cày cũng làm đồng áng được, khì, khì,. . . .
 
Nhờ chỉ giúp rõ hơn tác dụng của Redim

1. Do lúc đầu tôi định dùng thuật toán khác nên mới có đoạn đó. Sau khi thay đổi thuật toán tôi chưa sửa lại. Bạn có thể dùng code này và không cần phải quan tâm tới nó nữa.
PHP:
Sub NhapCongThuc()
Dim DuLieu, KetQuaCT, KetQuaTH(), DongDau As Long, DongCuoi As Long, CongViec As Long, Nhom As Long, ChiTiet As Long, i As Long, j As Long, TenShCT As String
DongDau = 3
DongCuoi = [C65536].End(xlUp).Row
DuLieu = Range("A" & (DongDau + 1) & ":C" & DongCuoi).Value
Range("G" & (DongDau + 1) & ":G" & DongCuoi).ClearContents
KetQuaCT = Range("G" & (DongDau + 1) & ":G" & DongCuoi).Value
TenShCT = "='" & ActiveSheet.Name & "'!"
ReDim KetQuaTH(1 To DongCuoi, 1 To 6)
Sheets("Ket qua").UsedRange.Offset(4).ClearContents
For i = 1 To UBound(DuLieu, 1)
    If DuLieu(i, 3) = "Tr" & ChrW(7921) & "c ti" & ChrW(7871) & "p phí khác" Then
        KetQuaCT(i, 1) = "=15/100*R[" & (CongViec - i) & "]C"
        KetQuaTH(j, 6) = TenShCT & "G" & (DongDau + i)
    ElseIf DuLieu(i, 1) <> "" Then
        CongViec = i
        KetQuaCT(CongViec, 1) = "="
        j = j + 1
        KetQuaTH(j, 1) = TenShCT & "A" & (DongDau + CongViec)
        KetQuaTH(j, 2) = TenShCT & "C" & (DongDau + CongViec)
    ElseIf DuLieu(i, 1) & DuLieu(i, 2) = "" Then
        Nhom = i
        KetQuaCT(CongViec, 1) = KetQuaCT(CongViec, 1) & "+R[" & (Nhom - CongViec) & "]C"
        Select Case DuLieu(i, 3)
        Case "V" & ChrW(7853) & "t li" & ChrW(7879) & "u"
            KetQuaTH(j, 3) = TenShCT & "G" & (DongDau + Nhom)
        Case "Nhân công"
            KetQuaTH(j, 4) = TenShCT & "G" & (DongDau + Nhom)
        Case "Máy thi công"
            KetQuaTH(j, 5) = TenShCT & "G" & (DongDau + Nhom)
        End Select
    Else
        KetQuaCT(Nhom, 1) = "=SUM(R[1]C:R[" & (i - Nhom) & "]C)*RC[-2]"
        KetQuaCT(i, 1) = "=RC[-2]*RC[-1]"
    End If
Next
Application.ReferenceStyle = xlR1C1
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT
Application.ReferenceStyle = xlA1
Sheets("Ket qua").[A5].Resize(j, 6).Value = KetQuaTH
End Sub

Em cũng đã tìm trên diễn đàn Redim dùng để khai báo mảng động. Tuy vậy, em chưa hiểu lắm về tác dụng của nó, cụ thể xin giải thích giúp em tác dụng của Redim trong Code trên: ReDim KetQuaTH(1 To DongCuoi, 1 To 6), sự cần thiết tại sao phải có nó, nó hoạt động thế nào?
 
Em cũng đã tìm trên diễn đàn Redim dùng để khai báo mảng động. Tuy vậy, em chưa hiểu lắm về tác dụng của nó, cụ thể xin giải thích giúp em tác dụng của Redim trong Code trên: ReDim KetQuaTH(1 To DongCuoi, 1 To 6), sự cần thiết tại sao phải có nó, nó hoạt động thế nào?
Nếu bạn biết "chắc cú" số phần tử của mảng KetQuaTH thì khai báo luôn: thí dụ
Dim KetQuaTH (1 to 10, 1 to 5) _ Mảng có 10 dòng & 5 cột ==> có 50 phần tử. Lúc đó "đếch" cần "Rì đim Rì điếc" gì cho rách việc
Còn nếu chưa biết số dòng & cột thì phải Redim (khai báo lại) cho mảng
ReDim KetQuaTH(1 To DongCuoi, 1 To 6) ==> số cột chắc cú là 6, nhưng số dòng sẽ thay đổi theo giá trị của biến DongCuoi (biến DongCuoi có thể thay đổi kích thước khi ta thêm hoặc bớt dữ liệu của vùng được định nghĩa là DongCuoi). Thường câu này sẽ xuất hiện sau khi bạn khai báo biến DongCuoi. Thí dụ trong bài
.....
DongCuoi = [C65536].End(xlUp).Row
..........
........
ReDim KetQuaTH(1 To DongCuoi, 1 To 6
)
......
Hihi, hy vọng bạn hiểu
Híc
 
Em cũng đã tìm trên diễn đàn Redim dùng để khai báo mảng động. Tuy vậy, em chưa hiểu lắm về tác dụng của nó, cụ thể xin giải thích giúp em tác dụng của Redim trong Code trên: ReDim KetQuaTH(1 To DongCuoi, 1 To 6), sự cần thiết tại sao phải có nó, nó hoạt động thế nào?
Redim có nghĩa là thay đổi kích thước của mang KetQuaTH để cho nó linh động hơn trong việc bạn viết code khi dùng Redim thì dữ liệu trong mảng KetQuaTH sẽ bị mất dữ liệu mình nghĩ bạn nên tham khảo bài này thì sẽ hay hơn bạn đọc từ trên xuống dưới nhen
[h=1]Các câu hỏi về mảng trong VBA (Array)[/h]
 
Nhờ mọi nguời chỉ bảo, em đã bắt đầu hiểu dần về VBA rồi, sau khi đọc xong bài của bác Huuthang_bd, em thử nghiệm chỉ làm động tác điền các ô trống trong Bảng đơn giá chi tiết (chưa làm thao tác lọc sang Sheet Ket qua), em thấy nó chạy được sau khi rút gọn Code thành:

PHP:
Sub NhapCongThuc()
Dim DuLieu, KetQuaCT, DongDau As Long, DongCuoi As Long, CongViec As Long, Nhom As Long, ChiTiet As Long, i As Long, j As Long, TenShCT As String
DongDau = 3
DongCuoi = [C65536].End(xlUp).Row
DuLieu = Range("A" & (DongDau + 1) & ":C" & DongCuoi).Value
Range("G" & (DongDau + 1) & ":G" & DongCuoi).ClearContents
KetQuaCT = Range("G" & (DongDau + 1) & ":G" & DongCuoi).Value
TenShCT = "='" & ActiveSheet.Name & "'!"
For i = 1 To UBound(DuLieu, 1)
    If DuLieu(i, 3) = "Tr" & ChrW(7921) & "c ti" & ChrW(7871) & "p phí khác" Then
        KetQuaCT(i, 1) = "=15/100*R[" & (CongViec - i) & "]C"
          ElseIf DuLieu(i, 1) <> "" Then
        CongViec = i
        KetQuaCT(CongViec, 1) = "="
          ElseIf DuLieu(i, 1) & DuLieu(i, 2) = "" Then
        Nhom = i
        KetQuaCT(CongViec, 1) = KetQuaCT(CongViec, 1) & "+R[" & (Nhom - CongViec) & "]C"
           Else
        KetQuaCT(Nhom, 1) = "=SUM(R[1]C:R[" & (i - Nhom) & "]C)*RC[-2]"
        KetQuaCT(i, 1) = "=RC[-2]*RC[-1]"
    End If
Next
Application.ReferenceStyle = xlR1C1
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT
Application.ReferenceStyle = xlA1
End Sub

Tuy nhiên em chưa hiểu được ý nghĩa của 3 dòng cuối:
Application.ReferenceStyle = xlR1C1
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT
Application.ReferenceStyle = xlA1

là gì? vì em xoá đi thì nó không chạy.

Em xin cảm ơn các thày, cảm ơn mọi người rất nhiều.
 
Application.ReferenceStyle = xlR1C1
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT
Application.ReferenceStyle = xlA1

là gì? vì em xoá đi thì nó không chạy.
Em xin cảm ơn các thày, cảm ơn mọi người rất nhiều.
Application.ReferenceStyle = xlR1C1 ==> Tương đương bạn vào Excel Option bạn vào Fomula check vào R1C1 Reference style vì đoạn code trên bạn làm theo dạng này nên bạn chuyển qua xlR1C1 để gán giá trị vào Sheet
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT, đoạn code này cho biết vùng để bạn gán giá trị vào giá trị bạn gán vào nằm trong mảng KetQuaCT nếu bạn bỏ thì đâu có dữ liệu đâu mà gán đoạn code này rất quan trọng
Application.ReferenceStyle = xlA1 tương đương bạn bỏ dấu check trong mục Excel Option Formula R1C1 ReferenceStyle để chuyển về giao diện bạn thường thấy trên excel dòng là sô, cột là chữ cái Alpha
 
Application.ReferenceStyle = xlR1C1 ==> Tương đương bạn vào Excel Option bạn vào Fomula check vào R1C1 Reference style vì đoạn code trên bạn làm theo dạng này nên bạn chuyển qua xlR1C1 để gán giá trị vào Sheet
Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT, đoạn code này cho biết vùng để bạn gán giá trị vào giá trị bạn gán vào nằm trong mảng KetQuaCT nếu bạn bỏ thì đâu có dữ liệu đâu mà gán đoạn code này rất quan trọng
Application.ReferenceStyle = xlA1 tương đương bạn bỏ dấu check trong mục Excel Option Formula R1C1 ReferenceStyle để chuyển về giao diện bạn thường thấy trên excel dòng là sô, cột là chữ cái Alpha

Nếu em bỏ đi 2 dòng chỉ còn lại mỗi dòng giữa Range("G" & (DongDau + 1) & ":G" & DongCuoi) = KetQuaCT thì về mặt bản chất có ảnh hưởng đến tốc độ tính toán hoặc đến yếu tố nào không?
 
Web KT

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

Back
Top Bottom