Nhờ giúp đỡ Cách chuyển địa chỉ ô cố định sang ô động liên quan tới hàm Replace

Liên hệ QC

phamvandunghp84

Thành viên thường trực
Tham gia
5/3/20
Bài viết
241
Được thích
12
Các bạn ơi cho mình hỏi mình có đoạn code này vẫn chạy bình thường nhưng nay mình muốn thay thế ô b1,b4 cố định thành ô động thì làm như nào ? Nhờ các bạn giúp đỡ!

Sub gan_gia_tri_cho_Bieu_Do()
Dim i As Integer

For i = 1 To 7
ActiveSheet.ChartObjects(i).Activate
ActiveChart.SeriesCollection(1).Formula = _
rpl(ActiveChart.SeriesCollection(1).Formula, [b1].Offset(, i).Address, [b1:b4].Offset(, i).Address) ' muốn chuyển sang ô động (ghi chú ở dòng **). cố định ô b dịch chuyển sang i cột
Next i
End Sub

Function rpl(ByVal str As String, ByVal S_name As String, ByVal S_rng As String) As String 'ham nay de doi cong thuc cho bieu do
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\$[^;,]+\$[^;,]+(?=[;,])"
str = Replace(str, .Execute(str)(0), S_name)
str = Replace(str, .Execute(str)(2), S_rng)
End With
rpl = str
End Function


Mình thử làm như này nhưng không thấy được, không biết do lỗi ở đâu?

Sub gan_gia_tri_cho_Bieu_Do_cot_dong()
Dim i As Integer
Dim cotdautap As Integer
For i = 1 To 7
cotdautap =2
ActiveSheet.ChartObjects(i).Activate

ActiveChart.SeriesCollection(1).Formula = _
rpl(ActiveChart.SeriesCollection(1).Formula, [cells(1,cotdautap].Offset(, 4).Address, [cells(1,cotdautap):cells(4,cotdautap)].Offset(, 4).Address) (ghi chú dòng **) . Muốn cố định số cột cần dịch sang lần lượt là 4,5 cột nhưng theo ô động, chứ cố định là cột b như trên nữa,

ActiveChart.SeriesCollection(2).Formula = _
rpl(ActiveChart.SeriesCollection(2).Formula, [cells(1,cotdautap].Offset(, 5).Address, [cells(1,cotdautap):cells(4,cotdautap)].Offset(, 5).Address)

End Sub
 
Các bạn ơi cho mình hỏi mình có đoạn code này vẫn chạy bình thường nhưng nay mình muốn thay thế ô b1,b4 cố định thành ô động thì làm như nào ? Nhờ các bạn giúp đỡ!

Sub gan_gia_tri_cho_Bieu_Do()
Dim i As Integer

For i = 1 To 7
ActiveSheet.ChartObjects(i).Activate
ActiveChart.SeriesCollection(1).Formula = _
rpl(ActiveChart.SeriesCollection(1).Formula, [b1].Offset(, i).Address, [b1:b4].Offset(, i).Address) ' muốn chuyển sang ô động (ghi chú ở dòng **). cố định ô b dịch chuyển sang i cột
Next i
End Sub

Function rpl(ByVal str As String, ByVal S_name As String, ByVal S_rng As String) As String 'ham nay de doi cong thuc cho bieu do
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\$[^;,]+\$[^;,]+(?=[;,])"
str = Replace(str, .Execute(str)(0), S_name)
str = Replace(str, .Execute(str)(2), S_rng)
End With
rpl = str
End Function


Mình thử làm như này nhưng không thấy được, không biết do lỗi ở đâu?

Sub gan_gia_tri_cho_Bieu_Do_cot_dong()
Dim i As Integer
Dim cotdautap As Integer
For i = 1 To 7
cotdautap =2
ActiveSheet.ChartObjects(i).Activate

ActiveChart.SeriesCollection(1).Formula = _
rpl(ActiveChart.SeriesCollection(1).Formula, [cells(1,cotdautap].Offset(, 4).Address, [cells(1,cotdautap):cells(4,cotdautap)].Offset(, 4).Address) (ghi chú dòng **) . Muốn cố định số cột cần dịch sang lần lượt là 4,5 cột nhưng theo ô động, chứ cố định là cột b như trên nữa,

ActiveChart.SeriesCollection(2).Formula = _
rpl(ActiveChart.SeriesCollection(2).Formula, [cells(1,cotdautap].Offset(, 5).Address, [cells(1,cotdautap):cells(4,cotdautap)].Offset(, 5).Address)

End Sub
Cái ngoặc vuông đó là nguyên nhân đầu tiên. Nó được dùng để viết tắt địa chỉ range thôi. Thay vì Range("B1") thì người ta viết [B1]. Bạn đã viết là cells(1, cotdautap) mà còn giữ cặp ngoặc vuông làm chi nữa?
 
Cái ngoặc vuông đó là nguyên nhân đầu tiên. Nó được dùng để viết tắt địa chỉ range thôi. Thay vì Range("B1") thì người ta viết [B1]. Bạn đã viết là cells(1, cotdautap) mà còn giữ cặp ngoặc vuông làm chi nữa?

Cảm ơn bạn đúng là chỗ [ đó rồi, tại mình học mò nên không hiểu rõ.
bạn giúp mình chỗ này được không? hàm rpl mình không hiểu cách hoạt động của nó như nào. Đây là chuỗi mình cần tạo từ hàm rpl
=SERIES(Data!$D$1;Data!$A$2:$A$22;Data!$D$2:$D$22;1) hiện tại hàm đó nó đang thay được 2 phần đó là Data!$D$1 và phần Data!$D$2:$D$22;
bây giờ mình muốn hàm rpl đó thay được thêm cả phần Data!$A$2:$A$22 nữa thì mình phải viết lại hàm đó như nào bạn nhỉ ?

đây là code hiện tại của hàm rpl đó bạn xem giúp mình! cảm ơn bạn !

Function rpl(ByVal str As String, ByVal S_name As String, ByVal S_rng As String) As String 'ham nay de doi cong thuc cho bieu do
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\$[^;,]+\$[^;,]+(?=[;,])"
str = Replace(str, .Execute(str)(0), S_name)
str = Replace(str, .Execute(str)(2), S_rng)
End With
rpl = str
End Function

Mình sửa như này mà không được

Function rpl_3(ByVal str As String, ByVal S_name As String, ByVal S_rng As String, ByVal S_rng2 As String) As String 'ham nay de doi cong thuc cho bieu do gan_gia_tri_cho_Bieu_Do()
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\$[^;,]+\$[^;,]+\$[^;,]+(?=[;,])"
str = Replace(str, .Execute(str)(0), S_name)
str = Replace(str, .Execute(str)(2), S_rng)
str = Replace(str, .Execute(str)(2), S_rng2)
End With
rpl_3 = str
End Function

Về phần thân chương trình thì mình nghĩ viết thêm như này không biết có đúng k bạn? mình chạy thử thì thấy báo lỗi ở hàm
Sub gan_gia_tri_cho_Bieu_Do()
Dim i As Integer
For i = 1 To 7
ActiveSheet.ChartObjects(i).Activate
ActiveChart.SeriesCollection(1).Formula = _
rpl_3(ActiveChart.SeriesCollection(1).Formula, (Cells(1, cotdautap).Offset(, 4).Address), (Range(Cells(2, cotdautap), Cells(3, cotdautap)).Offset(, 3).Address), (Range(Cells(2, cotdautap), Cells(3, cotdautap)).Offset(, 4).Address))

ActiveChart.SeriesCollection(2).Formula = _
rpl_3(ActiveChart.SeriesCollection(2).Formula, (Cells(1, cotdautap).Offset(, 5).Address), (Range(Cells(2, cotdautap), Cells(3, cotdautap)).Offset(, 3).Address), (Range(Cells(2, cotdautap), Cells(3, cotdautap)).Offset(, 5).Address))

Next i
End Sub
 
Nhìn như đám rừng :wacko:
 
Mình không biết cái vbscript.regexp kia hoạt động thể nào, nhất là cái pattern đó nên không trả lời bạn được.
 
Web KT
Back
Top Bottom