2016-08-06 4 views
0

基本情報:?Q10 そして、レンジ・を合計:(エラーが発生した)

Function Col_Letter(lngCol As Long) As String ' number to letter function 
Dim vArr 
vArr = Split(Cells(1, lngCol).Address(True, False), "$") 
Col_Letter = vArr 
End Function 

'Worksheets ("button").cells(1,3).value ' with value 12 
    'Worksheets ("button").cells(2,3).value ' with value 15 

私は、範囲L3と範囲-mandayrngを暗く使いたいですmandayrng。

Dim mandayrng as range 

    mandayrng = Worksheets("manday").Range(cells(Col_Letter(Worksheets ("button").cells(2,3).value),3), cells(Col_Letter(Worksheets ("button").cells(2,3).value),10))'the range is L3: Q10 

With Worksheets("report") 
row = worksheet.Range("C" & Rows.Count).End(xlUp).row 
For k = 6 To row 
    Worksheets("report").Cells(i, 6) = Application.WorksheetFunction.sum(mandayrng) 'sum with the range of mandayrng 

    Next k 
    End With 

ここにコードが機能していませんが。

修正方法?

+1

あなたのコードで何を意味するかを動かない?より具体的にしてください。 –

+0

あなたはこのビデオを見る必要があります[Excel VBAの紹介パート5 - セル(範囲、セル、アクティブセル、終了、オフセット)の選択](https://www.youtube.com/watch?v=c8reU-H1PKQ) –

答えて

1

Col_Letterを使用する必要はありません。セルはaの文字または数字を受け取ります。

enter image description here

Aレンジ列アドレスが列の文字で始まり、行インデックスが続くことができます。 Rangeに2つのパラメータがある場合、範囲は最初のパラメータから2番目のパラメータまでの間にあるすべてのセルを含みます。

enter image description here

これらの実施例はすべてを参照して、 "L3:Q10"

  • Range("L3:Q10")
  • Range("$L$3:$Q$10")
  • Range("L3", "Q10")
  • Range("Q10", "L3")
  • Range(Cells(3,"L"), Cells(10,"Q"))
  • Range(Cells(3, 12), Cells(10, 17))
  • Range(Cells(10,"Q"), Cells(3,"l"))
  • Range(Cells(3, 17), Cells(10, 12))
  • Range("L3", Cells(10, 12))
  • Range(Cells(3, 17), "Q10")

Aレンジは引数として1つのセルを受け付けない(例えばRange(Cells(1,1))は無効です)

範囲とそのセルの引数は同じワークシートになければなりません。

Worksheets("manday")がActiveWorksシートの場合、次のコードは動作します。これは、範囲が修飾されていないと、自動的にActiveWorksシート上にあると想定されるためです。ここで

Worksheets("manday").Range(Cells(3,"L"), Cells(10,"Q"))

回避策です:

Worksheets("manday").Range(Cells(3,"L").address, Cells(10,"Q").address)

これも有効な

Worksheets("manday").Range(Worksheets("manday").Cells(3,"L"), Worksheets("manday").Cells(10,"Q"))

あるしかし、私はこれを好む:

をあなたは次のように簡素化することができます10
Dim FirstColumn As Integer 
Dim LastColumn As Integer 

FirstColumn = Worksheets("button").Cells(2, 3).Value 
LastColumn = Worksheets("button").Cells(2, 3).Value 

With Worksheets("manday") 
    Set mandayrng = .Range(.Cells(3, FirstColumn), .Cells(10, LastColumn)) 

End With 
0

これを試してみてください。範囲を指定してsetコマンドを使用する必要があります。そうしないと、オブジェクト変数またはブロック変数が定義されていません。

Dim mandayrng as range 

    set mandayrng = Worksheets("manday").Range(cells(Col_Letter(Worksheets ("button").cells(2,3).value),3), cells(Col_Letter(Worksheets ("button").cells(2,3).value),10))'the range is L3: Q10 

編集:セクションを持つために、ワークシートを指定する必要がいけない:

With Worksheets("report") 
    row = .Range("C" & Rows.Count).End(xlUp).row 
    For k = 6 To row 
     .Cells(i, 6) = Application.WorksheetFunction.sum(mandayrng) 'sum with the range of mandayrng 
    Next k 
End With 

は最終的に、以下のコードについて、あなたは関数から配列を返すようにしたいです。他のニュースで

Function Col_Letter(lngCol As Long) As String() 
Dim vArr() as string 

あなたは何が起こるか、「などのように長い/文字列」特定し、使用することvArrイムを暗くわからない置く場合:これを行うには、アレイのために必要であるとして、あなたは、ブラケットを持っていることを確認してください

0

次の:ところで、あなたはその後、Function Col_Letter()を使用する必要があります

Option Explicit 

Sub main() 
    Dim mySum As Double 

    With Worksheets("button") 
     mySum = Application.WorksheetFunction.Sum(Worksheets("manday").Range(Cells(3, .Cells(1, 3).value), Cells(3, .Cells(2, 3).value))) 
    End With 
    With Worksheets("report") 
     .Range("F6:F" & .Range("C" & .Rows.Count).End(xlUp).row).value = mySum 
    End With 
End Sub 

次のように変更します。

Function Col_Letter(lngCol As Long) As String ' number to letter function 
    Col_Letter = Split(Cells(1, lngCol).Address(True, False), "$")(0) 
End Function 
関連する問題