2017-07-31 8 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

こんにちはJohnさん、あなたの助言をいただきありがとうございました。使用する辞書はまさに私が探していたものでした。私の仕事の正確な目的は説明するのが非常に難しいですが、この単純化されたバージョンは、私が探していた答えを得るのに十分でした。 – 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

は、単に割り当てを好転あなたは変数にしてそれをセルに移動させました。

カップル他の簡単なヒント:VBAは、特定の変数の宣言を必要としないながら

  1. はまた、暗黙的に宣言された型は常に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 
関連する問題