2015-11-09 48 views
2

我一直在爲此苦苦掙扎了一段時間,我需要幫助。我是vba新手,希望能對此問題提供一些指導。我的電子表格已設置,所以我在單元格a2中,正在讀取b2中的值,該值是一個整數,告訴我有多少個補充配置文件(sups)存在。假設數字3在b2中。然後我期望c2下面的2行在c3和c4中輸入一些文本(角色)。循環遍歷單元格並將值添加到數組中,然後顯示到VBA中的活動單元格

在a2上,我讀取b2中的補充配置文件數量,然後循環顯示在c2,c3和c4中找到的角色a2上。這可能會改變,因爲在某些情況下,只會有2個角色或3個,等等。

要做到這一點,我已經編寫如下:

Sub testarray() 

Dim sups As Integer 
Dim role, resultrole As String 
Dim test() As String 

role = ActiveCell.Offset(i, 2).Value 
sups = ActiveCell.Offset(0, 1).Value 

i = 0 
Do While i <= sups 
test() = Split(role) 
i = i + 1 
ActiveCell.Value = test() 
Loop 

End Sub 

的問題是,我只得到排C2顯示,並且不低於全部內容。我想a2顯示值c2,c3和c4。我將針對許多行運行此代碼,以便關聯角色。

見我的代碼和電子表格值的圖片我讀

enter image description here 感謝您對這個您的幫助......真的非常感謝所有的反饋!

+0

我想你想在循環內部使用'role',但使用'cells(r,c)'而不是'offset'會更容易。 – findwindow

+0

因此繼續你的邏輯,在A5單元格中你會有下一個2? –

+0

另外我不認爲分裂是你想要的,你擁有它的方式,它將在每個空間分割一個字符串,並用這些值分開來填充一個數組。你想連接值。 –

回答

0

一些小的調整,以儘可能接近我原來的。我不喜歡使用ActiveCell,但@ScottHoltzman有這樣的解決方案。

Sub testarray() 

Dim sups As Integer, i& 
Dim role, resultrole As String 
Dim test As String 

role = ActiveCell.Offset(i, 2).Value 
sups = ActiveCell.Offset(0, 1).Value 

i = 0 
Do While i <= sups - 1 
If i = 0 Then 
    test = ActiveCell.Offset(i, 2) 
Else 
    test = test & ", " & ActiveCell.Offset(i, 2) 
End If 
i = i + 1 

Loop 
ActiveCell.Value = test 
End Sub 
+0

我能夠更輕鬆地將其結合到我的代碼的其餘部分中......但是,Scott H的上面的部分可能更有效 – chepito77

1

您只會看到單元格A中顯示的第一個值,因爲您從不告訴代碼移動到活動單元格的任何位置。你有一個循環,但它只是遍歷數字。

下面的代碼將循環遍歷B列中的所有單元格,並將角色寫入列A中與sups編號存儲位置相鄰的位置。它會寫入由|分隔的內容。你可以編輯你想要的。我也拿出使用數組。正如你使用它,它不會給你你想要的 - 這是一個連接值。您可以將單元格範圍存儲到數組中,並循環訪問數組以在A列中寫入單元格值,但對於給定問題似乎沒有真正的優勢。

Sub testarray() 

Dim sups As Long, x As Long 
Dim role As String 

Dim lRow As Long 

lRow = Range("B" & Rows.Count).End(xlUp).Row 

Dim cel As Range 

For Each cel In Range("B2:B" & lRow) 

    role = "" 

    If Len(cel) Then 

     sups = cel 
     For x = 1 To sups 

      role = role & "|" & cel.Offset(x - 1, 1) 

     Next 

     role = Mid(role, 2, Len(role) - 1) 

     cel.Offset(, -1) = role 

    End If 

Next 


End Sub 
+1

不錯,和OP看看你是否可以看到他做了什麼,以消除使用'ActiveCell'的需要。 – BruceWayne

+0

這太棒了!非常感謝。太棒了......正是我想要做的。我將研究這段代碼。謝謝!! – chepito77

+0

@ chepito77 - 如果您找到了滿意的答案,請標記答案,以便其他人可以繼續使用。 –

0

這應該與ActiveCell property一次一個。

Sub testarray() 

    Dim sups As Long, roles As Variant 

    With ActiveCell 
     sups = .Offset(0, 1).Value 
     ReDim roles(sups - 1) 

     For sups = LBound(roles) To UBound(roles) 
      roles(sups) = .Offset(sups, 2) 
     Next v 
     .Cells = Join(roles, Chr(10)) 
    End With 

End Sub 
相關問題