使用宏对检测软件中的数据进行排序

时间:2017-07-18 15:26:04

标签: excel vba excel-vba

所以我在工作中使用一个仪器软件将读数输出到csv excel文件。由于测试的长度和每30秒的读数,我每24小时测试累积几千行。当测试运行时,它会读取我不需要读数的内容,因此我必须手动浏览工作表并更换" false"读数用零。

我想要做的是使用命令按钮提示用户选择要排序的列并应用一系列值,这样如果它落在该范围内,它会将值返回到单元格,如果它没有&# 39; t落在该范围内,它返回0.我用较小的纸张和额外的列完成了这个(参见附件)但我不是非常熟悉Macros或VBA所以我不知道在哪里开始。

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

Example of what I do now

1 个答案:

答案 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)使用工具箱将正确的组件拖到Userform中。您可以自由地根据需要自定义此表单以添加或删除功能。我让我看起来像这样: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()。此方法查看WorkSheet并确定所有列的名称。然后将它们添加到ComboBox。

命令按钮1:“取消”,退出用户窗体而不做任何事情。

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

我希望这有帮助!