如何比较Excel VBA单元格中的上一个、当前和下一个元素?

如何比较Excel VBA单元格中的上一个、当前和下一个元素?,excel,vba,Excel,Vba,我是VBA新手 我在Java中使用以下方法来查找数组中的高低元素,但我不知道如何在VBA Excel上执行相同的操作。问题在于转换IF来比较数组中的上一个、当前和下一个元素{IF(arr[i]>arr[i+1]&&arr[i]>arr[i-1])},在Excel的情况下,这是如何在ForEach运行时在单元格列中查找上一个、当前和下一个元素 public static ArrayList<Integer> sequence(int[] arr) { System.out.pr

我是VBA新手

我在Java中使用以下方法来查找数组中的高低元素,但我不知道如何在VBA Excel上执行相同的操作。问题在于转换IF来比较数组中的上一个、当前和下一个元素{IF(arr[i]>arr[i+1]&&arr[i]>arr[i-1])},在Excel的情况下,这是如何在ForEach运行时在单元格列中查找上一个、当前和下一个元素

public static ArrayList<Integer> sequence(int[] arr) {
    System.out.println(" HIGHEST HIGH " + arr.length);
    ArrayList<Integer> relHigh = new ArrayList<Integer>();
    ArrayList<Integer> relLow = new ArrayList<Integer>();
    ArrayList<Integer> hestHigh = new ArrayList<Integer>();
    ArrayList<Integer> lestLow = new ArrayList<Integer>();
    int highest = -9999999;
    int lowest = 9999999;
    for (int i = 1; i < arr.length - 2; i++) {
        // System.out.println(" I: " + i + " : " + arr[i]);
        if (arr[i] > arr[i + 1] && arr[i] > arr[i - 1]) {
            relHigh.add(arr[i]);
            System.out.println("RelHigh I: " + i + " : " + arr[i]);
            if (arr[i] > highest) {
                hestHigh.add(arr[i]);
                highest = arr[i];
                System.out.println("HH I: " + i + " : " + arr[i]);
            }
        }
        if (arr[i] < arr[i + 1] && arr[i] < arr[i - 1]) {
            relLow.add(arr[i]);
            System.out.println("RelLow I: " + i + " : " + arr[i]);
            if (arr[i] < lowest) {
                lestLow.add(arr[i]);
                lowest = arr[i];
                System.out.println("LL I: " + i + " : " + arr[i]);
            }
        }
    }
    return relHigh;
}

可以使用将一列数据指定给数组。不能添加到数组(不重新标注尺寸),但可以添加到数组

功能序列(ByRef rng作为范围)作为变量
'将范围分配给数组
作为变体的Dim-arr
arr=工作表函数转置(rng.Value2)
Dim relHigh作为新集合,relLow作为新集合
暗高-高为新系列,低为新系列
暗淡的最高的一样长,最低的一样长,我一样长
昏暗的高处和低处一样长,低处和低处一样长
最高值=-9999999
最低=9999999
'清除格式设置
rng.Cells.ClearFormats
rng.列(2).清除
对于i=2至UBound(arr)-1
如果(arr(i)>arr(i+1))和(arr(i)>arr(i-1)),那么
增加arr(一)
'System.out.println(“RelHigh I:+I+”:“+arr[I]);
Debug.Print“RelHigh I:&I&:”&arr(I)
rng.Cells(i,1).Font.Color=RGB(0,200,0)
rng.Cells(i,1).Font.Bold=True
rng.单元(i,2)=“相对高”
如果(arr(i)>最高值),则
最高。添加arr(i)
最高=arr(i)
highestRow=i
'System.out.println(“HH I:+I+”:“+arr[I]);
调试。打印“hhi:&I&:”&arr(I)
如果结束
如果结束
如果(arr(i)
您可以使用为数组分配一列数据。不能添加到数组(不重新标注尺寸),但可以添加到数组

功能序列(ByRef rng作为范围)作为变量
'将范围分配给数组
作为变体的Dim-arr
arr=工作表函数转置(rng.Value2)
Dim relHigh作为新集合,relLow作为新集合
暗高-高为新系列,低为新系列
暗淡的最高的一样长,最低的一样长,我一样长
昏暗的高处和低处一样长,低处和低处一样长
最高值=-9999999
最低=9999999
'清除格式设置
rng.Cells.ClearFormats
rng.列(2).清除
对于i=2至UBound(arr)-1
如果(arr(i)>arr(i+1))和(arr(i)>arr(i-1)),那么
增加arr(一)
'System.out.println(“RelHigh I:+I+”:“+arr[I]);
Debug.Print“RelHigh I:&I&:”&arr(I)
rng.Cells(i,1).Font.Color=RGB(0,200,0)
rng.Cells(i,1).Font.Bold=True
rng.单元(i,2)=“相对高”
如果(arr(i)>最高值),则
最高。添加arr(i)
最高=arr(i)
highestRow=i
'System.out.println(“HH I:+I+”:“+arr[I]);
调试。打印“hhi:&I&:”&arr(I)
如果结束
如果结束
如果(arr(i)
您实际上想做什么?看起来您正在搜索局部最大值/最小值:您的代码在VBA中非常简单,但这里没有人会写出它。。。对于myRange.Cells中的每个c,在a
循环中(假设有一列单元格),“上一个”是
c.Offset(-1,0)
,“下一个”是
c.Offset(1,0)
I
Sub MaxMin()

Dim myCount As Integer
Dim i As Integer
Dim relHigh As Double
Dim relLow As Double
Dim hestHigh As Double
Dim lestLow As Double
Dim highest As Double
Dim lowest As Double

Dim Cellx As Range
Dim MyRange As Range
Set MyRange = ThisWorkbook.Sheets("Hoja1").Range("A:A").CurrentRegion

Dim previous As Double
Dim current As Double
Dim next As Double

Dim rCell As Range
Dim rRng As Range

Set rRng = Sheets("Hoja1").Range("A1:A15")

For Each rCell In rRng.Cells
    Debug.Print rCell.Address, rCell.Value
    **// Here is where I get lost**
    if (arr[i] > arr[i + 1] && arr[i] > arr[i - 1]) {
Next rCell

End Sub