2017-01-17 4 views
0

Excel VBAでは比較的新しいです。私は対応するセルの値で多くのCOUNTA関数の列範囲を設定する必要があります。一致するセルの各カップルには、各関数の範囲のinicial列番号と最終列番号があります。私はこれを変数としてセルの値を定義して、列番号として値を持つAddressとして変数を定義することを試みました。VBA列番号にセルの値を使用して関数の範囲を設定します。

Dim T1Address As String 
T1Start = Sheets(2).Range("AQ3").Value 
T1End = Sheets(2).Range("AR3").Value 
T1Address = Cells(11, T1Start).Address & ":" & Cells(11, T1End).Address 
Range("AT3").Select 
ActiveCell.Formula = "=COUNTA('1st Sheet'!T1Address)" 

問題は、機能が動作しないことがあり、それだけにかかわらず、範囲の空でないセルの数の値「1」を示しています。このよう 。私は、列の一部がAdress変数の範囲に名前を割り当てることもできることを知ったので、これを行う方法を見つけましたが、どちらもうまくいかないようです。 このように:

ActiveWorkbook.Names.Add _ 
    Name:="RangeT1", _ 
    RefersTo:="T1Address" 

私は間違っていますか?ありがとう!

+2

Range("AT3").Select ActiveCell.Formula = "=COUNTA('1st Sheet'!T1Address)" 

あなたは '代わりに変数のリテラルとしてT1Address'を渡しています。 'ActiveCell.Formula =" = COUNTA( '1st Sheet'! "&T1Address&") "' –

+1

は 'Range ' COUNTA( '1st Sheet'! "&T1Address&") "' –

答えて

0

変数の代わりにT1Addressをリテラルとして渡しています。試してみてください:

ActiveCell.Formula = "=COUNTA('1st Sheet'!" & T1Address & ")" 

Shai Rado's approach実際には良い方法です。 あなたが

Range("AT3").Formula = "=COUNTA('1st Sheet'!" & T1Address & ")" 

SelectActiveCellを無視して使用することができ、私が見るもう一つの問題は、あなたがT1Start内のセル"AQ3"の値とT1Endのセル"AR3"の値を格納しようとしているということです。実際にそれがあなたの意図であるかどうかはわかりませんが、私はそれらのアドレスの列番号を取得することを意図していたと思います。この

T1Start = Sheets(2).Range("AQ3").Column 
T1End = Sheets(2).Range("AR3").Column 

T1Start = Sheets(2).Range("AQ3").Value 
T1End = Sheets(2).Range("AR3").Value 

UPDATE:その場合は、この置き換えあなたのコメントを1としてを、あなたは関係なく、どのようにそれを、ワークブックの最初のワークシートを参照したいですが呼び出されます。ここではそれを達成するために私の知識では選択肢は以下のとおりです。

  • Sheets(1).name - 両方のグラフシートおよびワークシート
  • Worksheets(1).nameを考慮します - だけ
  • Sheet1.nameをワークシート考慮します - (と間違えてはならないワークシートの名前を使用しています
  • ThisWorkbook.Worksheets(1).name - コードが呼び出されている場所からワークブックに修飾されています。つまり、ユーザーが複数のブックを開いている場合、これはまだ有効です。

オブジェクト全体を処理したくないため、ワークシートの.nameプロパティを使用しています。 あなたは

Range("AT3").Formula = "=COUNTA(Sheets(1)" & T1Address & ")" 

を試したと言うとき、あなたが代わりに(また、実際には間違っているだろう)オブジェクト自体のリテラルとしてSheets(1)を渡しているので、あなたは、以前と同じミスを犯しました。これは、あなたがそれを行うことができる方法である。

Range("AT3").Formula = "=COUNTA('" & Sheets(1).name & "'!" & T1Address & ")" 

ここで注意すべき物事のカップル:

  • 私は(Sheets(1)のハイライトの色を比較パラメータとしてではなく、リテラルとしてSheets(1).name値を使用していますそれはExcelがこの私ので、私は、名前の後に!をも付加している
  • それを理解する方法であるため、
  • )視覚的な参照のための私のコードにし、あなたに私が'(単一引用符)でパラメータを同封していますsのあなたが設定することによって、これを達成することができ、Excelの構文

だから最後に、ワークシートを想定すると、「MyWorksheet」という名前で、T1Addressは、「A1」、セルの値が「AT3」は=COUNTA('MyWorksheet'!A1)

+0

迅速な対応をありがとう!はい、問題はT1Addressの変更で解決されました。 "AQ3"の値の部分は実際に私が意味したもので、関数の列の範囲をそのセルの値で設定する必要がありました。 シートの名前の例として「1st Sheet」を入れていますが、実際には、名前にかかわらず、ワークブックの最初のシートを参照する必要があります。私は 範囲( "AT3")で試しました。数式= "= COUNTA(シート(1)"&T1Address&再度、感謝します! – Alvatroc

+0

私の編集を確認してください –

0

する必要があります含まれてい範囲を選択し、Addressを取得します。

Sheets(2) and/or「第一Sheet'`および/または場合は、多分重なっている。この式(同じシート)を配置するように、私は、より多くのデータを持っていると思います。

以下のコード試してみてください。

Dim T1Rng As Range 

Set T1Rng = Range(Cells(11, Sheets(2).Range("AQ3").Column), Cells(11, Sheets(2).Range("AR3").Column)) 
Range("AT3").Formula = "=COUNTA('1st Sheet'!" & T1Rng.Address & ")" 
0

あなたがシート「1枚目」のセルをカウントしたくない他の回答の一つにコメントで言うと、代わりに細胞をカウントしたいですワークブックの最初に現れているシートがあれば、その場合は、からあなたのコードを変更します。

Range("AT3").Formula = "=COUNTA('" & Worksheets(1).Name & "'!" & T1Address & ")" 
関連する問題