2017-08-28 101 views
2

我有數據的後續片材創建單元的命名範圍如何基於在Excel VBA中另一列的值

Channel Quarter Week value 
a  1  1 5811 
a  1  2  199 
a  1  1 8111 
a  2  2  881 
a  2  1  124 
b  2  2 1991 

我需要基於信道和季列的組合來更新值列(我創建了一個幫手列該中心將作爲一個鍵)

Helper Channel Quarter Week value 
a1  a  1  1 5811 
a1  a  1  2  199 
a1  a  1  1 8111 
a2  a  2  2  881 
a2  a  2  1  124 
b2  b  2  2 1991 

從我的VBA形式,我已經創建的,在這些輔助列名稱的字典一樣

cellDict = [a1:= 1000, 2:= 2000, b1:= 500 etc] 

現在我想在這個字典的基礎上更新'value'列的值,使得對應於a1的單元格每個都被更新爲1000/3(因爲a1的行數爲3)和類似地,對應於a2的單元每個以1000/2更新。

的嘗試是通過取總價值,並通過名爲範圍的數

所以將它創建了一個名爲範圍具有獨立的輔助名稱值列,然後遍歷每個命名範圍和更新單元格的值我的問題是我怎麼幫手列的基礎上,創建值列命名的範圍,使我有(假設值列V)

Range("a1") = V1:V3 
Range("a2") = V4:V5 etc.. 

回答

2

我認爲你可以在大量的做這沒有命名範圍更簡單的方法

首先,我假設行按您的幫助列進行排序!
只需找到幫手列中的第一個a1,例如。與find method並得到其行號爲rowStart

然後使用WorksheetFunction.CountIf Method來計算助手列中a1的發生次數爲rowCount。所以rowEnd = rowStart + rowCount - 1

現在,您可以循環像...

Dim iRow As Long 
For iRow = rowStart to rowEnd 
    'use your dictionary and rowCount to replace values here. 
    'Example for accessing the cell: 
    Worksheets("MySheet").Cells(iRow, "E").Value = "" 
Next iRow 
+0

在檢查函數的定義,我假設我需要定義一個範圍,我的整個幫手列,如COUNTIF將需要在範圍如此工作會發現還是可以在列上使用它? – hbabbar

+0

如果輔助列始終位於特定列中,則不需要命名範圍。列A然後使用'Worksheet(「MySheet」)。範圍(「A:A」)'引用整個列A.或者'Worksheet(「MySheet」)。Columns(1)'引用整個第一列。當然,你可以使用這些引用的函數'find'和'countif'。 –

+0

感謝您的解釋,我可以找到開始和結束行號。我不清楚如何在該行號的「值」列中迭代'單元格',因爲我可以在命名範圍內使用ForEach。 – hbabbar

相關問題