For Loop 在不同的范围内

Posted

技术标签:

【中文标题】For Loop 在不同的范围内【英文标题】:For Loop within separate ranges 【发布时间】:2014-09-21 00:44:12 【问题描述】:

我希望从 excel 中的信息流(从 PDF 文件转换而来)生成一个数据库。在此处的一些帮助之后,已经定义了需要搜索的各个范围,现在我正在尝试扫描这些各个范围以查找特定的触发器。然后,目的是根据数据中存在哪些触发器来提取数据。

我目前正在尝试创建一个 For 循环来扫描所有不同的范围并提取需要的信息,但我认为 For 循环无法解决。

我的数据格式如下(excel总共大约900行)

Biodiesel  
Loss Number:  
88840  
Three people were killed and five injured in a fire that broke out in a biodiesel plant. People living eight km away reported hearing an explosion. A building collapsed on the victims of the incident.  
Event Date:  
22/11/2008  
Country:  
Turkey  
Location:  
Antakya, southern province of Hatay  
Event:  
Explosion, fire  
Cause:  
Explosion  
Plant Status:  
Operating  
Fatalities:  
3  
Injuries:    
5

问题是数据不遵循相同的格式,所以我想根据“损失数:”分成多个范围,然后扫描每个范围以查找大约 10 个可能的标题。但是,我不确定如何扫描各个范围?

任何帮助将不胜感激。

我当前的代码是;

Sub RangePrintTest()


Dim pd(100000, 100)
Dim rpd(10000, 100)
Dim VirtMat(300, 100)
Dim c As Integer
Dim npd As Variant


With ThisWorkbook.Sheets("PDF Input Sheet")


Dim Rng As Range
Dim Dn As Range
Dim Temp As String
Dim k
Dim cc As Long


Set Rng = Range(Range("A2"), Range("A" & Rows.count).End(xlUp))
With CreateObject("scripting.dictionary")
.CompareMode = vbTextCompare

For Each Dn In Rng
If Not .Exists(Dn.Value & Dn.Offset(1).Value) And Dn.Value = "Loss Number:" Then
.Add Dn.Value & Dn.Offset(1).Value, Dn
Temp = Dn.Value & Dn.Offset(1).Value
Else
Set .Item(Temp) = Union(.Item(Temp), Dn)
End If
Next

Dim p
For Each k In .keys
    cc = cc + 1
    VirtMat(cc, 1) = .Item(k).Address
Next k
End With


End With


Dim i As Integer
i = 1

For i = 1 To 41
X = VirtMat(i, 1).Value
i = i + 1
Set TestRange = Range(X)
Do Until R = 21
If TestRange(R, 1) = "Loss Number:" Then
If TestRange(R + 1, 1) <> "" Then LossNumber = TestRange(R + 1, 1)

If TestRange(R, 1) <> "Loss Number:" Then LossNumber = NoInfo

cr = cr + 1

rpd(cr, 1) = LossNumber


End If

R = R + 1

Loop
Next

End Sub

【问题讨论】:

也许您可以描述实际问题是什么并产生最小的 SSCCE? 我希望这次编辑可以稍微澄清一下。 【参考方案1】:

你有:

For i = 1 To 41
X = VirtMat(i, 1).Value
i = i + 1

// other stuff

Next

这种For ... Next 循环会在每次循环后自动递增循环变量——在这种情况下为i。您还在代码中手动递增i,因此会错过VirtMat 中的一半条目。您将阅读条目 1,错过条目 2,阅读条目 3,依此类推。

尝试删除i = i + 1 行,看看是否有帮助。有关For ... Next 循环的更多信息是here

【讨论】:

以上是关于For Loop 在不同的范围内的主要内容,如果未能解决你的问题,请参考以下文章

Python - 将 For Loop 项目作为新行写入 CSV

在 [0..n-1] 范围内生成 m 个不同的随机数

使用 for-loop 和 if 函数创建一个新向量?

在“for”循环中运行整个“unsigned char”范围

用于查找单元格值是不是在范围内的双 For 循环

邮件中loop某人啥意思