2016-10-02 3 views
0

コードに問題があります。列Aの最小値と最大値を表示できません。紛失または間違ったコードがどこにあるかを知ってください。VBAを使用して特定のシートの列の最小(最小)と最大(最大)の値を取得する方法

私のプログラムは、txtファイルを開き、Excelシートにデータを入力します。

0.23 
0.19 
0.19 
0.13 
0.15 
0.18 
0.19 
0.25 
0.25 
0.22 
0.13 

と私はVBAで私のコードを入力します:たとえば、列Aのデータがある

Private Sub CommandButton1_Click() 

Dim vMin, vMax 
Dim mg As Range 
Dim NOR, lastrow, currentrow As Long 

filetoopen = Application.GetOpenFilename("Text File (*.txt),*.txt", , "Select", , False) 

If VarType(filetoopen) = vbBoolean Then 
    Exit Sub 
End If 

Workbooks.OpenText filetoopen, Origin _ 
    :=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _ 
    , ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _ 
    False, Space:=False, other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _ 
    , Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _ 
    Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1)), _ 
    TrailingMinusNumbers:=True 

'get number of rows (row with value inside)------------- 
With ActiveSheet 
    NOR = .Cells(Rows.Count, "A").End(xlUp).Row 
End With 

'GET SMALLEST & LARGEST VALUE FROM COLUMN A========== 
With ActiveSheet 
    lastrow = NOR 

    For currentrow = 2 To lastrow 
     Set mg = ThisWorkbook.Sheets(1).Rows(currentrow) 

     'if row no data then no read------------------------ 
     If WorksheetFunction.CountA(mg) = 0 Then 

     Else 
      vMin = Application.WorksheetFunction.Min(Columns("A")) 
      vMax = Application.WorksheetFunction.Max(Columns("A")) 
     End If 
    Next currentrow 

End With 

MsgBox "Minimum = " & vMin & ", " & "Maximum = " & vMax, vbInformation 
MsgBox "last row A is = " & NOR 

End Sub 

私はこのコードを実行すると、MessageBoxが最小(最小)値を表示することはできませんし、列Aの最大(最大)値。

私はこの問題を解決するのに役立ちます。

AAF

答えて

0

私はあなたのコードを試してみた...そして二人は考えている: "列( "A")`に関数を適用

  1. は、すべての列がそう 必要はありません意味しますforと繰り返す。私の場合は

  2. は多分あなたが使用される小数点区切り文字をドット番号を輸入していないし、私のシステムはとても 数字はテキストとして輸入されたと'Max'も'Min'どちらもコンマに変更ドットまで を働いた輸入小数点の記号としてカンマを使用しています。

ので、作業コードは次のようになります。

Private Sub CommandButton1_Click() 

Dim vMin, vMax 

Dim mg As Range 

Dim NOR, lastrow, currentrow As Long 

filetoopen = Application.GetOpenFilename("Text File (*.txt),*.txt", , "Select", , False) 

     If VarType(filetoopen) = vbBoolean Then 
     Exit Sub 
     End If 
     Workbooks.OpenText filetoopen, Origin _ 
     :=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _ 
     , ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _ 
     False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _ 
     , Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _ 
     Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1)), _ 
     TrailingMinusNumbers:=True 

'get number of rows (row with value inside)------------- 

    With ActiveSheet 

    NOR = .Cells(Rows.Count, "A").End(xlUp).Row 

    End With 

'GET SMALLEST & LARGEST VALUE FROM COLUMN A========== 

With ActiveSheet 

    lastrow = NOR 

    'For currentrow = 2 To lastrow 

    'Set mg = ThisWorkbook.Sheets(1).Rows(currentrow) 

    'if row no data then no read------------------------ 

    'If WorksheetFunction.CountA(mg) = 0 Then 

    'Else 

     vMin = Application.WorksheetFunction.Min(Columns("A")) 

     vMax = Application.WorksheetFunction.Max(Columns("A")) 

    'End If 

    'Next currentrow 

End With 

MsgBox "Minimum = " & vMin & ", " & "Maximum = " & vMax, vbInformation 

MsgBox "last row A is = " & NOR 

End Sub 

と結果:

enter image description here

はそれが役に立てば幸い!

+0

あなたの答えをありがとう...私はそれをしようが、なぜ最小値と最大値は0ですか? – aaf

+0

いいえ、最小値は0.13で、最大値は0.25です。コンピュータに小数点の区切り記号としてカンマがあることを忘れないでください。ありがとう。 – ZeroWorks

+0

申し訳ありません友人、私は混乱しました..小数点記号としてポイントのコードを置き換える方法は?あなたの助けをありがとう – aaf

0

これは、ADOを使用してファイルを直接Excelに読み込む代わりに、ファイルを直接読み込む代わりの方法です。このオプションはコードが少なく、大規模なデータセットに対しても非常に高速に動作するはずです。

コード:

Public Sub ShowMinAndMax() 
    Dim objConnection As Object: Set objConnection = CreateObject("ADODB.Connection") 
    Dim objRecordset As Object: Set objRecordset = CreateObject("ADODB.Recordset") 
    Dim FolderPath As String: FolderPath = "C:\SomeFolderHere\" ' The folderpath to the file you want to read 

    objConnection.Open "Provider=Microsoft.Ace.OLEDB.12.0;" & _ 
         "Data Source=" & FolderPath & ";" & _ 
         "Extended Properties=""text;HDR=No;FMT=TabDelimited""" 

    'Get the minimum and maximum value, you also need to 
    'change the fileName, currently my File is Named Example.Txt. 
    'You need to update that in the SQL statement 
    objRecordset.Open "SELECT Min(F1) as MinVal, Max(F1) as MaxVal FROM Example.txt", objConnection, 3 

    MsgBox ("The minimum value is: " & objRecordset.Fields("MinVal") & vbCrLf & _ 
      "The maximum value is: " & objRecordset.Fields("MaxVal")) 

    'Clean Up 
    If objRecordset.State = 1 Then objRecordset.Close 
    objConnection.Close 
    Set objConnection = Nothing 
    Set objRecordset = Nothing 
End Sub 
関連する問題