回 帖 发 新 帖 刷新版面

主题:磕头100 下,请高手帮我修改程序!!。。!


小弟最近用 VBA 写了个程序,主要功能是把导入的数据(可能会很大)进行 摘选 和 四舍五入,首先,数据读入excel,当 第二列/第三列 >=3, 则保留此行,否则删除。下一步,文件Sa1 和 Sa2 进行排序,按照 m/z 从小到大,最后将m/z 四舍五入到一个数。 那位程序大牛人,可以帮我把程序写成 VB, 可以用界面窗口控制 数据读入 和一些简单参数的设定,小弟将感激不尽,感谢000次,愿磕头100 下。




m/z_Sa1    Intensity    Noise                  m/z_sa2   Intensity  Noise

239.1052      710921    181.12                 239.123   212342      222
477.2031      13232    187.59                 477.233   342432      188
226.9508      782117    180.66                 233.555   12333       321






 Sheets("raw_data").Select
Range("a1").Select
Dim A As Integer
Dim B As Long
Dim D, C As Long
NF1 = ActiveSheet.UsedRange.Rows.Count

A = Sheets("raw_data").UsedRange.Columns.Count
B = Sheets("raw_data").UsedRange.Rows.Count
For D = 4 To (A / 2) + 2 Step 2
Cells(1, D - 1) = WorksheetFunction.Sum(Range(Cells(2, D - 2), Cells(65536, D - 2)))
    For C = 2 To B
    If Cells(C + 1, D - 2) = "" Then
    GoTo 64
ElseIf Cells(C, D - 2) / Cells(C, D) > 3 Or Cells(C, D - 2) / Cells(C, D) = 3 Then

'Cells(C, D - 2) = Cells(C, D - 2) * Cells(1, D - 2) / Cells(1, D - 1)
Else
64 Cells(1, D - 2) = C
Range(Cells(C, D - 3), Cells(B, D)).Select
Selection.Clear

Range(Columns(D - 3), Columns(D)).Select
Selection.Sort Key1:=Cells(2, D - 3), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal

Range(Columns(D - 1), Columns(D)).Delete
GoTo 10
End If
Next C
10 Next D
Cells(1, 1).Select

Cells(1, 2) = Cells(1, 1)
Cells(1, 1) = "Mass List"
Dim B1, E, D1, E1, G1, H1, I1 As Integer
Dim F1, A1, C1 As Long
B1 = Sheets("raw_data").UsedRange.Columns.Count
For D1 = 3 To B1 Step 2
  A1 = Sheets("raw_data").Columns(1).End(xlDown).Row
    For E1 = 2 To A1
         For C1 = 2 To A1
        If Cells(E1, 1) > Cells(C1, D1) - Cells(C1, D1) * 0.000002 And Cells(E1, 1) < Cells(C1, D1) + Cells(C1, D1) * 0.000002 Then
        Cells(E1, B1 + (0.5 * (D1 - 1))) = Cells(E1, B1 + (0.5 * (D1 - 1))) + Cells(C1, D1 + 1)
        Cells(C1, D1).Clear
        ElseIf Cells(E1, 1) < Cells(C1, D1) Then GoTo 61
        End If
        Next C1
61     Next E1
Range(Columns(D1), Columns(D1 + 1)).Sort Key1:=Cells(2, D1), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
             F1 = Columns(D1).End(xlDown).Row
              If F1 = 65536 Then
        GoTo 62
        Else
        End If
        Range(Cells(2, D1), Cells(F1, D1)).Copy
                     Range(Cells(A1 + 1, 1), Cells(A1 + F1 - 1, 1)) = Range(Cells(2, D1), Cells(F1, D1))
        Cells(A1 + 1, 1).PasteSpecial
        Range(Cells(2, D1 + 1), Cells(F1, D1 + 1)).Copy
        Cells(A1 + 1, B1 + (0.5 * (D1 - 1))).PasteSpecial
62 Cells(1, B1 + (0.5 * (D1 - 1))) = Cells(1, D1)
    
 Next D1



end sub

回复列表 (共3个回复)

沙发

我试试QQ562671395

板凳

1、数据读入excel,
       从哪里读?
2、数据读入 和一些简单参数的设定
       数据读入要控制什么?设定什么参数?

3 楼

数据从多个文本文件中读。文件格式统一简洁。参数就是计算中的一些条件,设为可变的。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册