2017-07-18 10 views
0

私はcsv Excelファイルに読み取り値を出力する計測ソフトウェアを使用しています。テストの長さと30秒ごとの読み取りのために、私はテストの24時間ごとに数千の行を蓄積します。テストが実行されると、読み込みが必要ないものが読み込まれるため、手動でシートを通過し、「false」の読みを0に置き換えなければなりません。マクロを使用して計測ソフトウェアからデータをソート

私がしたいのは、コマンドボタンを使用して列を選択して値の範囲を適用するようにして、その範囲内にある場合はその値をセルに返し、範囲内に収まっていれば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_Initialize()を通過します。このメソッドはワークシートを調べ、すべての列の名前を決定します。次に、これらをComboBoxに追加します。

コマンドボタン1:「キャンセル」、何もせずにユーザーフォームを終了します。

コマンドボタン2: "確認"、このメソッドは、選択した列に移動し、目的の範囲内でチェックします。値がその範囲外になると、0に設定されます。

私はこの助けを願っています!

関連する問題