2017-01-17 9 views
0

我對Excel VBA比較新。我需要使用相應單元格的值設置多個COUNTA函數的列範圍。每對匹配的單元格都有內部列號和每個函數範圍的最終列號。我試過這樣做,將單元格的值定義爲變量,然後將該變量定義爲地址,並將該值作爲列號。 像這樣: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

你傳入'T1Address'爲文字而不是變量:如果是這樣,你的代碼改變。試試這個:'ActiveCell.Formula ='= COUNTA('1st Sheet'!「&T1Address&」)「' –

+1

備用'Select'和'ActiveCell',只需使用'Range(」AT3「)。Formula =」= COUNTA('1st Sheet'!「&T1Address&」)「' –

回答

0

您正在傳遞T1Address而不是變量。試試這個:

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

Shai Rado's approach實際上是更好的方法。 可以忽略SelectActiveCell,只是使用

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

我看到的另一個問題是,你正在嘗試存儲單元"AQ3"T1Start值和細胞"AR3"T1End值。不知道這是否實際上是你的意圖,但我認爲你的意思是要獲得這些地址的列號。有了這個

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

UPDATE

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

:如果是這樣的情況下,更換此根據您的意見,要引用到工作簿中第一個工作表,不管它如何叫做。以下是我所知的替代品來完成它:

  • 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).name值作爲參數,而不是一個文本(比較Sheets(1)高亮色彩在我的代碼和
  • 我附上參數與'(單引號),因爲這是Excel如何理解它
  • 我也追加!名之後,因爲這個我你的視覺參考)小號Excel的語法

所以在最後,假設您的工作表被命名爲「MyWorksheet」和T1Address包含「A1」,小區「AT3」的值應該是=COUNTA('MyWorksheet'!A1)

+0

感謝您的快速響應!是的,這個問題是在T1Address發生變化的情況下解決的。 「AQ3」的部分值實際上就是我所說的,我需要使用該單元格的值來設置函數中列的範圍。 我把'1st Sheet'作爲表格名稱的例子,但實際上我需要參考Workbook的第一張表格,不管名字如何。我嘗試了 Range(「AT3」)。Formula =「= COUNTA(Sheets(1)」&T1Address&「)」 但它不起作用。再次感謝! – Alvatroc

+0

請檢查我的編輯 –

0

你可以做到這一點通過設置範圍,然後從中檢索Address

注意:如果我有更多的數據,如Sheets(2) and/or'第一張'和/或您想要放置此公式的位置可能重疊(同一張紙)。

嘗試下面的代碼:

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").Select 
ActiveCell.Formula = "=COUNTA('1st Sheet'!T1Address)" 

Range("AT3").Formula = "=COUNTA('" & Worksheets(1).Name & "'!" & T1Address & ")" 
相關問題