2017-03-28 7 views
-1

DenseRank行の位置またはrowIDに基づいて、Excel VBAでスタックされています。私は、列に基づいてランク付けするのではなく、行#でランク付けし、列の "City"で値が変更されたときに基づいてランク付けを再開したいということを示すために、Sales列を追加しました。ROW()によるExcel VBAランク

#City# |#Sales# |#DESIREDOUTPUT# 
Chicago  1   1 
Chicago  5   2 
Chicago  10   3 
Chicago  7   4 
New York 3   1 
New York 5   2 
New York 2   3 

申し訳ありませんが、テーブルを正しくフォーマットすることができません。 C1における

+0

それがVBAでなければなりませんか?それは数式で簡単に行うことができます。 –

+2

C2では、 '= countif(a $ 2:a2、a2)'と入力します。 – Jeeped

答えて

1

式アプローチ

PUT:次いで

=IF(A2=A1;C1+1;1) 

とは


VBAアプローチダウンドラッグ

Sub main() 
    With Range("A2", Cells(Rows.Count, 1).End(xlUp)).Offset(, 2) 
     .Formula = "=if(RC[-2]=R[-1]C[-2],R[-1]C + 1,1)" 
     .Value = .Value 
    End With 
End Sub 
+0

私は勇敢なdownvoterが理由を説明し、私の答えを改善させたいです – user3598756

+0

完璧!私はこれを行うことができ、CとRの値の一部を操作し、それを別の列のデータセットに適合させました。再度、感謝します。 – Chris

+0

あなたは歓迎です – user3598756

1

私はVBAが必要な理由については明らかではないんだけど、

with worksheets("sheet1") 
    with .range(.cells(2, "C"), .cells(.cells(.rows.count, "A").end(xlup).row, "C")) 
     .formula = "=countif(a$2:a2, a2)" 
     .value = .value 
    end with 
end with