2017-07-18 108 views
0

因此,我使用一个仪表软件,将读数输出到csv excel文件。由于测试的长度和每30秒读数,我每24小时累积数千行测试。当测试运行时,它会读取我不需要读数的内容,因此我必须手动查看表格,并用零代替“false”读数。使用宏对仪表软件中的数据进行排序

我想要做的就是使用命令按钮来提示用户选择一个列进行排序并应用一系列值,因此如果该值落在该范围内,它会将值返回给单元格,如果它没有不会超出范围,它会返回0。我已经使用带有额外列的较小表单来完成此操作(请参阅附加文件),但我对宏或VBA不熟悉,因此我不确定从何入手。

任何人都可以帮我一把吗?

Example of what I do now

+0

通过'排序'你的意思是'纠正'? –

回答

0

这可以如下完成。

1)转到Excel功能区中的“开发人员”选项卡。单击插入,选择一个命令按钮(ActiveX控件),并将其放在您想要它的工作表上。

2)双击按钮,这将打开编辑器。您应该看到:

Private Sub CommandButton1_Click() 

End Sub 

3)添加行UserForm1.Show的代码块内。这应该看起来像:

Private Sub CommandButton1_Click() 
    UserForm1.Show 
End Sub 

4)现在我们将创建用户窗体。在编辑器的左边你会看到一个名为“Projects - VBA Project”的部分,在这个列表中你应该看到你的工作簿。右键单击工作簿的名称,然后单击插入 - >用户窗体。

5)使用工具箱将正确的组件拖到用户窗体中。您可以自由定制此表单,因为您认为可以根据您的需求添加或删除功能。我看起来像这样:enter image description here

6)在项目选项卡中,您将看到名为UserForm1的用户表单。右键单击此用户窗体并单击“查看代码”。粘贴以下代码:

Private Sub CommandButton1_Click() 
    Unload UserForm1 
End Sub 

Private Sub UserForm_Initialize() 

    Dim lastColumn As Long 
    lastColumn = Worksheets("Sheet1").Cells(1,Columns.Count).End(xlToLeft).Column 
    For i = 1 To lastColumn 
     UserForm1.ComboBox1.AddItem (Worksheets("Sheet1").Cells(1, i)) 
    Next 
End Sub 

Private Sub CommandButton2_Click() 

    Dim columnName As String 
    Dim columnIndex As Integer 
    Dim min As Double 
    Dim max As Double 

    If Not (ComboBox1.SelText = "" And TextBox1.Text = "" And TextBox2.Text = "") Then 

    columnName = ComboBox1.SelText 

    min = TextBox1.Text 
    max = TextBox2.Text 

    Dim lastColumn As Long 
    lastColumn = Worksheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column 
    For i = 1 To lastColumn 
     If Worksheets("Sheet1").Cells(1, i).Value = columnName Then 
      columnIndex = i 
     End If 
    Next 

    Dim cellValue As Double 

    Dim lastRow As Long 
    lastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 
    For i = 2 To lastRow 
     cellValue = Worksheets("Sheet1").Cells(i, columnIndex).Value 

     ' MsgBox CStr(cellValue) + "--" + CStr(cellValue > min) + "--" + CStr(cellValue < max) 

     If Not (cellValue >= min And cellValue <= max) Then 
      Worksheets("Sheet1").Cells(i, columnIndex).Value = 0 
     End If 
    Next 

    End If 

    Unload UserForm1 

End Sub 

7)更改组件名称(如CommandButton,ComboBox1等)以匹配您的UserForm。

代码是做什么的?

初始化:只要调用UserForm,它就会通过方法UserForm_Initialize()。此方法查看您的工作表并确定所有列的名称。然后它将这些添加到组合框。

命令按钮1:“取消”,不做任何事情就退出UserForm。

命令按钮2:“确认”,此方法将转到您选择的列,并在所需的范围内进行检查。如果一个值超出该范围,那么它会将其设置为0.

我希望这可以帮到你!

相关问题