编程请教高手

nyb1234 2009-05-22 12:03:22
我现在有20个物种点数据(有三列:经度、纬度和值)存放在EXCEL中,我想每次提取19个(三列数据是一个),留下一个,每次留下的点不一样,循环一遍,如何编程呢?提出来的能够放在EXCEL中用,并且能够区分20个循环的结果。谢谢大家了。

JD WD zhi
107.35 39.24 1
103.83 36.99 1
99.98 39.31 1
103.15 38.72 1
105.68 38.85 1
99.58 39.49 1
100.62 38.97 1
101.5 38.91 1
103.08 39.44 1
103.69 40.72 1
104.88 39.31 1
105.56 39.16 1
105.26 40.18 1
104.79 41.29 1
105.73 41.34 1
106.33 41.14 1
106.64 40.46 1
106.93 39.87 1
106.95 39.53 1
107.29 39.98 1
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
samtyty 2009-05-22
  • 打赏
  • 举报
回复
再次看了你提问,我确认你想做Leave-One-Out Cross Validation。

告诉你思路吧,其实非常简单:
留下第一和最后一个时,单独处理;中间的分两次处理,假如要留下第K个,总共有N个样本,对1到K-1,K+1到N分开处理就行了。
samtyty 2009-05-22
  • 打赏
  • 举报
回复
你这是Leave-One-Out
是不是想实现LOO算法啊
xxwood 2009-05-22
  • 打赏
  • 举报
回复
啥意思??不大明白。。。难道是想这样:第一次留下第一个,第二次留下第二个。。。第二十次留下第二十个。是这样吗?

for i=1 to 20
for j=1 to 20
if j<>i then
提取该行
end if
next j
next i
outou 2009-05-22
  • 打赏
  • 举报
回复
up
我是一道光_ 2009-05-22
  • 打赏
  • 举报
回复
是不是要用到数据库知识~
zhiyongtu 2009-05-22
  • 打赏
  • 举报
回复
用VBA吧。
Option Explicit

Sub Get19From20(strSheetName As String, lFirstRow As Long, lLastRow As Long)
Dim shtSheet As Worksheet, shtCurSheet As Worksheet, lSheetIndex As Long, lRow As Long
On Error Resume Next
Set shtSheet = Worksheets(strSheetName)
If Err.Number <> 0 Then
MsgBox "在当前工作簿中不存在名为“" & strSheetName & "”的工作表!请检查后重试。", _
vbExclamation, "工作表不存在"
Exit Sub
End If
lSheetIndex = 0
For lRow = lFirstRow To lLastRow
lSheetIndex = lSheetIndex + 1
On Error Resume Next
Set shtCurSheet = Worksheets(CStr(lSheetIndex))
If Err.Number <> 0 Then
On Error GoTo ErrorHandle
Set shtCurSheet = Worksheets.Add(After:=Worksheets(lSheetIndex))
shtCurSheet.Name = CStr(lSheetIndex)
End If
On Error GoTo ErrorHandle
shtCurSheet.UsedRange.ClearContents
shtSheet.UsedRange.Copy shtCurSheet.Range("A1")
shtCurSheet.Rows(lRow).Delete Shift:=xlUp
Next lRow
MsgBox "物种点数据提取完毕,共从表“" & strSheetName & _
"”的第" & lFirstRow & "行到第" & lLastRow & "行中提取" & lSheetIndex & "次数据。" & _
vbCrLf & "留下第 n 个物种点数据行的提取结果存放在以 n 为名字的工作表中。", , "提取完毕"
Set shtCurSheet = Nothing
Set shtSheet = Nothing
Exit Sub

ErrorHandle:
MsgBox "正在留下第" & lSheetIndex & "个物种点数据行以提取数据的时候出现错误,程序停止运行。" & _
vbCrLf & "当前用以保存结果数据的工作表是“" & lSheetIndex & "”。以下为出错信息:" & _
vbCrLf & vbCrLf & "Error # " & Err.Number & ", " & Err.Description & _
vbCrLf & "Source: " & Err.Source, vbCritical, "程序异常中止"
Set shtCurSheet = Nothing
Set shtSheet = Nothing
End Sub

Sub DoIt()
Const SourceSheet As String = "源"
Get19From20 SourceSheet, 2, 21
End Sub

将你的物种点数据放在工作表“源”中;进入Visual Basic编辑器,插入一个模块,将以上代码贴入该模块;运行DoIt过程,搞定。
liuxu2559 2009-05-22
  • 打赏
  • 举报
回复
可以将符合要求的点的值放在一个临时的数组或数据库表中,每次新加数据时,查看是否在数组(或表)中.

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧