移动到Excel中的下一个单元格。在C#中的foreach循环中放置

时间:2015-02-24 14:06:02

标签: c# excel-vba foreach vba excel

我有一个名为rng的excel.range。我使用foreach循环遍历它。

foreach(Excel.Range cell in rng)
{
   //do something
}

foreach循环在我的应用程序中非常有用,我不能使用for循环。现在问我的问题:

有没有办法移动到相对于当前单元格的i:th单元格?并从该单元格继续我的foreach循环。像这样:

foreach(Excel.Range cell in rng)
{
    If(cell.value.ToString() == "Something")
       //move 3 cells forward in rng relative to the current cell
}

我不是在寻找继续;表达。我需要以某种方式在我的范围内前进。我是怎么做的不那么重要。它可以是使用某种moveNext()命令或某种索引的循环。

我感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

要回答你的问题,不,没有办法在foreach循环中“跳过”任意数量的项目。无法使用for循环是一个奇怪的要求,所以我想知道这是一个谜题,而不是一个真正的问题。但我离题了......

请记住,每次访问C#中的Excel属性都是一个COM调用,因此非常昂贵。通过将整个范围拉入数组,您将获得更好的性能(并使编程更容易):

object[,] data = rng.Value2 as object[,];

数组将包含字符串(用于文本单元格)和双精度数字(用于数字/日期单元格)。那么你可以使用标准循环来导航数组。当你完成后,只需将数据放回去:

rng.Value2 = data;

答案 1 :(得分:0)

看看你的问题,似乎你需要回答"如何引用相邻的细胞?"

为此,您可以在excel vba中使用Offset()属性。

它的工作方式如下:假设您指的是行号。列A中的1个。现在您要引用相同的行但列D;你可以使用:

范围(" Your_Range")。偏移(0,3)。选择

有关OFFSET功能的更多信息: https://msdn.microsoft.com/en-us/library/office/ff840060.aspx?f=255&MSPPError=-2147217396

答案 2 :(得分:0)

如果您只想跳过foreach,在这种情况下,您可以执行以下操作:

int i = 0;
foreach(Excel.Range cell in rng)
{
  if(i>0)
  {
    i--;
  }
  else
  {
    if(cell.value.ToString() == "Something")
      i=3;
  }

表示你已经"跳过" foreach,但仍然尝试使用for循环,它会比这个简单得多。