tft每日頭條

 > 生活

 > vba區域求最大值和最小值

vba區域求最大值和最小值

生活 更新时间:2024-06-29 16:02:09

vba區域求最大值和最小值(返回最小絕對值對應的數)1

如題,

思路

循環D列數據

循環K列數據

将abs(D-K)的值存入一個數組

Next K

設計一個單獨的函數,完成如下功能:返回最小絕對值對應的數值所在的行數

根據函數返回的行和已知的列,定位具體單元格,并将其存儲在一個數組中

Next D

一次性将該數組寫入到單元格

代碼

Sub t() ' 主過程 Dim x!, y!, r1!, r2! Dim arr1, arr2, temp_arr, conp_return, result_arr, result$ ' arr1 數組,一次性寫入D列 ' arr2 數組,一次性寫入K列數據 ' temp_arr 數組,存儲D列 - K列每一個數的絕對值 ' conp_return 數組,接收conparison函數返回的數組 ' result_arr 數組,依次存儲D列每一個數對應的結果 ' result 字符串,臨時存儲G列對應的值 r1 = [d2].End(xlDown).Row r2 = [k2].End(xlDown).Row arr1 = Range("d2:d" & r1) arr2 = Range("k2:k" & r2) ReDim result_arr(1 To r1) For x = 2 To r1 ReDim temp_arr(1 To r2) For y = 2 To r2 temp_arr(y - 1) = Abs(arr1(x - 1, 1) - arr2(y - 1, 1)) Next y conp_return = conparison(temp_arr) result = "" For y = 1 To UBound(conp_return) - 1 result = Cells(conp_return(y), "g") & "," & result Next y result_arr(x - 1) = VBA.Left(result, Len(result) - 1) Erase temp_arr Next x [e2].Resize(r1) = Application.Transpose(result_arr) End Sub Function conparison(arr) ' 返回最小絕對值對應的數所在行,考慮最小絕對值有可能不止一個,所以最好返回一個數組 Dim min_value As Double, i!, result_arr, element ReDim result_arr(1 To 1) min_value = Application.Min(arr) i = 1 For element = 1 To UBound(arr) If arr(element) = min_value Then result_arr(i) = element 1 ' 最小絕對值對應的數所在行 = 數組中的位置 1 ​ i = i 1 ReDim Preserve result_arr(1 To i) End If Next element conparison = result_arr ​ End Function

效果

vba區域求最大值和最小值(返回最小絕對值對應的數)2

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved