Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 有没有更好的方法来编写这个VBA代码?_Excel_Vba - Fatal编程技术网

Excel 有没有更好的方法来编写这个VBA代码?

Excel 有没有更好的方法来编写这个VBA代码?,excel,vba,Excel,Vba,只是想知道是否有任何方法可以加速下面的代码? 提前谢谢 Sub Test() Dim ws As Worksheet Range("R28") = Mid(Range("Q7"), 55, 3) / 100 Range("R29") = Mid(Range("Q7"), 58, 3) / 100 Range("R30") = Mid(Range("Q7"), 61, 3) /

只是想知道是否有任何方法可以加速下面的代码? 提前谢谢

Sub Test()
Dim ws As Worksheet

Range("R28") = Mid(Range("Q7"), 55, 3) / 100
Range("R29") = Mid(Range("Q7"), 58, 3) / 100
Range("R30") = Mid(Range("Q7"), 61, 3) / 100
Range("R31") = Mid(Range("Q7"), 64, 3) / 100
Range("R32") = Mid(Range("Q7"), 67, 3) / 100
Range("R33") = Mid(Range("Q7"), 70, 3) / 100
Range("R34") = Mid(Range("Q7"), 73, 3) / 100
Range("R35") = Mid(Range("Q7"), 76, 3) / 100
Range("R36") = Mid(Range("Q7"), 79, 3) / 100
Range("R37") = Mid(Range("Q7"), 82, 3) / 100

End Sub
使用循环:

Dim cell As Range
For Each cell In Range("R28:R37")
    Dim i As Long

    cell.Value = Mid(Range("Q7").Value, 55 + i * 3, 3) / 100
    i = i + 1
Next
或者试试这个

With Range("R28:R37")
    .Formula = "=MID($Q$7, 55 + (ROW()-28) * 3, 3) / 100"
    .Value = .Value
End With
或者下面的命令使其动态化

With Range("R28:R37")
    .Formula = "=MID($Q$7, 55 + (ROW()-" & .Row & ") * 3, 3) / 100"
    .Value = .Value
End With
Option Explicit

Sub foo()
    Dim rng As Range, s As String, a As Variant, i As Integer
    
    Set rng = Range("R28:R37")
    s = Range("Q7")         ' minimize slow reading of cell in further loop
    a = rng                 ' shortest and simple making result array of target size
    ' same but longer: ReDim a(1 To rng.Rows.Count, 1 To 1)
    
    For i = 1 To UBound(a, 1)
        a(i, 1) = Mid(s, i * 3 + 52, 3) / 100
    Next i
    
    rng.Value = a           ' fast write result to range
End Sub