2016-08-23 4 views
1

私の問題の説明に続いて: 私は列の長さを変更するテーブルを持っています。私はその後、最小値を持つ行が6列の最大値を見つけ、対応する値を選択し、値をコピーして貼り付けてください。

行にコピーする最小値の4欄に検索したいこれは私のコードです:私はエラーを取得しておくいくつかの理由

Sub TestMax() 

Dim searchArea As Range 
Dim searchResult As Range 
Dim rowMax As Long 
Dim maxValue As Long 
Dim columnSearch As Integer 
Dim lastRow As Long 

columnSearch = 4 

'Select all the cells in the column you want to search down to the first empty cell. 
lastRow = Sheets("V&A 16").Range("B1048576").End(xlUp).Row 
Range(Cells(8, 4), Cells(lastRow, 4)).Select 
Set searchArea = Range(Cells(8, 4), Cells(lastRow, 4)) 

'Determine the max value in the column. 
maxValue = Application.Max(searchArea) 

'Find the row that contains the max value. 
Set searchResult = Sheets("V&A 16").Columns(columnSearch).Find(What:=maxValue, _ 
After:=Sheets("V&A 16").Cells(8, columnSearch), LookIn:=xlValues,  LookAt:=xlWhole, _ 
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ 
SearchFormat:=False) 


'Store the row that contains the minimum value in a variable. 
rowMax = searchResult.Cells.Row 
searchResult.Select 
Range(Cells(rowMax, 3), Cells(rowMax, 13)).Select 
Selection.Copy 
Range("C6").Select 
ActiveSheet.Paste Link:=True 

End Sub 

。しかし、Maxの代わりにApplication.Minと全く同じコードが動作します。 Annyヘルプ?前もって感謝します!!

+0

は、 ' – newguy

答えて

0

コードの大部分を適切な方法でやり直す可能性がありますが、コード内の変数名と固定値について議論することができますが、段階的なアプローチでは役に立たないと思います。

(あなたはVBAに新しいしている場合)ので、初心者のために、私は次のことを示唆している:

まず、私はこの

maxValue = Application.WorksheetFunction.Max(searchArea) 

maxValue = Application.Max(searchArea) 

を変更するだろうし、 rowMaxを取得する

rowMax = Application.WorksheetFunction.Match(maxValue, searchArea, 0) 

(できます。ネスレこと)

注:

  • 列4(検索エリア内の重複しない値だけがある場合にのみ動作します)。さもなければ物事はちょっと複雑になるかもしれないが、これはデータを最初にソートすることによって大いに省略することができる。
  • rowmaxはこの場合、あなたのsearchrangeの中のtargetrowを返す。
  • 「探索範囲は、」固定8で始まるため、あなたは「rowmax = awf.match + 8」...つまり、あなたはその後searchAreaレンジで動作しないことを選択した場合

EDITを行うことができます: これを試してください。私が言ったように、アプローチはおそらく少し恐ろしいですが、私は学習の観点からは、あなたがこれまで行ってきたことを保ち、それを単に何らかの働き方に変えるのが最善であることを確かめます。助けることを望む!これは初心者のためにかなりクリーンなアプローチであるため、

Sub TestMax() 

Dim searchArea As Range 

Dim rowMax As Long 
Dim maxValue As Long 

Dim lastRow As Long 

columnSearch = 4 

'get the lastrow 
lastRow = Sheets("V&A 16").Range("B1048576").End(xlUp).Row 

'set the search area 
Set searchArea = Range(Cells(8, columnSearch), Cells(lastRow, columnSearch)) 

'Find the row that contains the max value inside the search area 
rowMax = Application.WorksheetFunction.Match(_ 
    Application.WorksheetFunction.Max(searchArea), searchArea, 0) 

'clumsily copy+paste (alternative: set values instead of copying) 
'searchArea.Cells(rowMax, columnSearch).EntireRow.Copy 
'Cells(6, columnSearch).EntireRow.Select 
'ActiveSheet.Paste 

' Alternative: 
ActiveSheet.Rows(6).Cells().Value = searchArea.Rows(rowMax).EntireRow.Cells.Value 
End Sub 
+0

助けてくれてありがとう。あなたが提案した変更を適用すると、エラーが表示されます: 'WorksheetFunctionクラスのMatchプロパティを取得できません。どうすれば変更できますか? – Lani

+0

は、検索や選択、コピー、貼り付けを避けるために、今まで行ってきたことの大部分を保ちようとしました(プログラムを一時停止したり、複数のシートを扱うときにエラーやひどいものになりがちです) –

+0

ありがとう!私は本当にちょうどbeginenrなので、私はこれらの事すべてを知らない – Lani

1

あなたは可能性がカラム4をループ最小値に対応する行を検索し、第6号

(例:チェック対象データの10,000行を考慮して)行にその行をコピーする

Sub Foo() 

smallest = Cells(1, 4).Value 
i = 1 

For i = 2 To 10000 
    If Cells(i, 4).Value < smallest And Cells(i, 4).Value <> "" Then 
     smallest = Cells(i, 4).Value 
     Row = i 
    End If 
Next i 

Rows(Row & ":" & Row).Select 
Selection.Copy 
Rows("6:6").Select 
ActiveSheet.Paste 

End Sub 
+0

+1' WorksheetFunction.Min(範囲)を試してみてください - AWF-機能ではなく、高速ループを完了するために、比較される傾向にある場合でも。 –

関連する問題