2017-07-31 41 views
0

有人可以幫我解決這個非常簡單的問題。基本上這是一個簡化的代碼,用於解決更多更復雜的問題。我希望能夠輸出已分配給列b中的a,b,c,d和e的值。我用於a,b,c,d和e的值取自單元格a1,a2,a3,a4和a5。如何在VBA中輸出指定的值

謝謝:)

Sub help() 
    Dim letters As String 
    Dim count As Integer 

    a = Range("a1").Value 
    b = Range("a2").Value 
    c = Range("a3").Value 
    d = Range("a2").Value 
    e = Range("a3").Value 

    letters = "abcde" 

    For count = 1 To Len(letters) 
     Range("b" & count) = Mid(letters, count, 1) 
    Next 

    'HOW DO I OUTPUT THE ASSIGNED VALUES TO a,b,c,d & e RATHER THAN OUTPUTTING LETTERS?' 
End Sub 
+1

請說明您的問題。我發現它不清楚。如果您試圖從包含變量名稱的字符串訪問變量的值,那在VBA中是不可能的。常見的解決方法是使用例如由字母鍵入的字典。 「a」,「b」,「c」,「d」,「e」,而不是單獨的變量,如「a,b,c,d,e」。 –

+0

嗨,約翰,謝謝你的建議..使用字典正是我一直在尋找的東西。我的任務的確切目的很難解釋,但這個簡化的版本足以得到我正在尋找的答案。 – Jemz42

+0

感謝您的幫助! – Jemz42

回答

2

最簡單的方法是改變你的代碼如下:

Sub help() 
    a = Range("a1").Value 
    b = Range("a2").Value 
    c = Range("a3").Value 
    d = Range("a2").Value 
    e = Range("a3").Value 

    Range("b1").Value = a 
    Range("b2").Value = b 
    Range("b3").Value = c 
    Range("b4").Value = d 
    Range("b5").Value = e 
End Sub 

或者,你可以使用數組,而不是單個變量,例如

Sub help() 
    Dim myArr(1 To 5) As Variant 
    Dim count As Long 
    For count = 1 To 5 
     myArr(count) = Cells(count, "A").Value 
    Next count  

    For count = 1 To 5 
     Cells(count, "B").Value = myArr(count) 
    Next count  
End Sub 

這也可以說簡化:

Sub help() 
    Dim myArr As Variant 
    myArr = Range("A1:A5").Value ' myArr will be a two-dimensional array 
    Range("B1:B5").Value = myArr 
End Sub 

或者,正如約翰·科爾曼在評論所說,你可以使用字典:

Sub help() 
    Dim myVars As Object 
    Dim letters As String 
    Dim count As Long 
    Set myVars = CreateObject("Scripting.Dictionary") 

    myVars("a") = Range("a1").Value 
    myVars("b") = Range("a2").Value 
    myVars("c") = Range("a3").Value 
    myVars("d") = Range("a2").Value 
    myVars("e") = Range("a3").Value 

    letters = "abcde" 

    For count = 1 To Len(letters) 
     Range("b" & count) = myVars(Mid(letters, count, 1)) 
    Next 
End Sub 
+0

非常感謝!這種字典方法非常適合我的特殊應用。我原來的代碼與上面的第一個響應結構相同,但由於我的項目規模,我想要更優雅的東西。 – Jemz42

1

分配各地只需打開你對這個變量做出了決定並讓它進入單元格。

一對夫婦的其他快速提示:

  1. 此外,儘管VBA不需要特定的變量聲明,隱式聲明的類型始終是Variant。因此,認定所有變量並始終使用Option Explicit被認爲是專業做法。
  2. 始終定義並設置工作簿和工作表的引用。

所以......

Sub help() 
    Dim wb as Workbook 
    Dim ws as Worksheet 
    Set wb = ThisWorkbook 
    Set ws = wb.Sheets("Sheet1") 

    Dim a as String 
    a = ws.Range("A1") 

    ws.Range("B1") = a 
End Sub