2017-06-02 12 views
1

私はVBAをかなり新しくしています。基本的には、私のコードは、いくつかのカテゴリを持っている領域の列の最大値に基づいて分類を出力しようとします。論理は正しいようですが、私は#VALUEを得続けます!エラー。どんな助けでも大歓迎です!VBA値エラー

Public Function luclass(NAPS As Double) As String 
Dim lastrow As Long 
Dim c As Range, rng As Range 
Dim maxclass As String 
Dim maxshape As Double 
    With ThisWorkbook.Worksheets("LandUseClass2") 
    lastrow = .Cells(.Rows.Count, "B").End(xlUp).Row 
    maxclass = "Blank" 
    maxshape = 0 
    For Each c In .Range("B2:B650" & lastrow) 
      If c.Value = NAPS Then 
       If .Range("F" & c.Row).Value > maxshape Then 
        .Range("C" & c.Row).Text = maxclass 
       End If 
      End If 
    Next c 
    End With 
    luclass = maxclass 
End Function 
+2

はどのようにこの関数が呼び出されましたか?それがセル式によって呼び出されるユーザー定義関数(UDF)の場合、それを行うことはできません。関数は入力を受け取り、計算し、出力を生成します。副作用はありません。関数は他のセルを変更できません。 –

答えて

2
  1. 変更.Range("B2:B650" & lastrow).textとして.Range("C" & c.Row).Value = maxclassに変更.Range("C" & c.Row).Text = maxclass
  2. .Range("B2:B" & lastrow)への読み取り専用プロパティです。

#Valueエラーは、関数内の範囲に書き込もうとしているために発生します。

代わりFunctionSubを使用するか、正確にあなたが達成するために抱き合わせていると我々はそこに形成し、それを取るかを説明:)

Public Sub luclass(NAPS As Double) 
+0

ありがとうございましたが、今は、 "Public Sub luclass(NAPS As Double)As String"という文字列が、As String部分が予期された文末であると言っていますか? – Melanie

+0

ああ、私は通常、サブシステムは入力を受け付けないと思いますか? – Melanie

+0

@Melanie subsは入力を受け取ることができますが、最終的な 'As String'を取り除くことができます。したがって、署名は単純に' Public Sub luclass(NAPS As Double) 'です。 –