2014-03-12 560 views
0

我試圖將數據矩陣轉換爲適合特定分析軟件的新標準。VBA函數遍歷單元格,用相對列標題值替換單元格

初始矩陣如下所示:

real char num 10 10 25 26 26 56 
-------------------------------- 
state num  1 2 9 4 6 3 
-------------------------------- 
name 1  0 0 1 1 0 1 
name 2  1 0 0 0 0 0 
name 3  0 1 1 0 0 1 
name 4  0 1 0 0 1 0 
name 5  1 0 0 0 0 0 
name 6  0 0 1 0 1 0 

我一直在努力實現這一目標:

real char num 10 10 25 26 26 56 
-------------------------------- 
state num  1 2 9 4 6 3 
-------------------------------- 
name 1  0 0 9 4 0 3 
name 2  1 0 0 0 0 0 
name 3  0 2 9 0 0 3 
name 4  0 2 0 0 6 0 
name 5  1 0 0 0 0 0 
name 6  0 0 9 0 6 0 

從本質上講,我試圖做的是:
1。每列,在每個單元格中查找非0的數字;
2.如果達到此條件,請將單元格值替換爲相對「狀態」標題。意思是,例如,如果A4 <> 0,則將其替換爲A3值。

我使用的代碼如下:

Sub Iterate_replace() 
    Sheets("matrix").Select 

    Dim r As Range, cell As Range, state As Range 

    Set r = Range("C3") 
    Set state = Range("C2") 

    For Each cell In r 
     If cell.Value <> "0" Then 
      cell.Value = state.Value 
     End If 
    Next 
End Sub 

它工作在規定的一個單列的範圍很好,但我無法使其動態。我是否應該使用R1C1表示法來引用範圍內的單元格?我能找到的所有相關內容都不會說明如何使這個迭代更加靈活。我應該使用嵌套循環嗎?循環對我來說是非常困難的事情,但請耐心等待。

如果有人能指出我正確的方向,我將不勝感激。謝謝!

回答

0

我假設每張紙上都沒有其他問題。在這種情況下,你應該能夠讓你的程序動態修改喜歡你的代碼如下:

Sub Iterate_replace() 
    Sheets("matrix").Select 
    Dim i As Integer, j As Integer 
    Dim state As Range 

    Set state = Range("C2") 

    'Loops through each row and each column in matrix 
    For i = state.Column To ActiveSheet.Cells(state.Row, Columns.Count).End(xlToLeft).Column 
     For j = state.Row + 1 To ActiveSheet.Cells(Rows.Count, state.Column).End(xlUp).Row 
      If Cells(j, i).Value <> 0 Then 
       Cells(j, i).Value = Cells(state.Row, i).Value 
      End If 
     Next j 
    Next i 
End Sub 

通過每列在你的矩陣中的每一列。這將循環,如果你在什麼細胞中最左邊的狀態定義值位於。

+0

這太棒了。所以我需要的是嵌套循環和關於如何確定範圍的一些知識。非常感謝你,我從你的片段中學到了很多東西(是的,你的假設是正確的)。 – arbolitoloco

相關問題