2017-03-27 12 views
0

ユーザーがExcelで列を指定して選択するように要求していますが、値をVBAで参照できる文字列に変換します。選択列の列がA、E、D、Sの場合、VBAで列を選択する方法

私はユーザーがA:A、E:E、D:D、S:Sを入力するのを避け、セルにA、E、D、Sを入力するだけです。私は答えが正しいと確信していますが、現時点では私は逃げ出しています。助言がありますか?

+0

何を試しましたか?コードを投稿してください。 – SJR

+0

さて、私はさまざまなプロパティを使用しようとしましたが、それについてです: 'Columns(1,5,4,19).select' –

+0

あなたが試みたものを投稿した場合は、あなたのためのコードを一から書くように人々に依頼してください。 – SJR

答えて

1

私が言ったように、,

分割し、得られた配列を反復処理し、範囲を構築:

Sub fooooo() 
Dim str As String 
Dim rng As Range 
Dim strArr() As String 

str = "A,E,D,S" 'you can change this to the cell reference you want. 

strArr = Split(str, ",") 
With Worksheets("Sheet1") ' change to your sheet 
    Set rng = .Range(strArr(0) & ":" & strArr(0)) 
    For i = 1 To UBound(strArr) 
     Set rng = Union(rng, .Range(strArr(i) & ":" & strArr(i))) 
    Next i 
End With 

Debug.Print rng.Address 

End Sub 

あなたは常に範囲を返す関数にこれを回すことができます。

Function fooooo(str As String, ws As Worksheet) As Range 

Dim rng As Range 
Dim strArr() As String 



strArr = Split(str, ",") 
With ws ' change to your sheet 
    Set rng = .Range(strArr(0) & ":" & strArr(0)) 
    For i = 1 To UBound(strArr) 
     Set rng = Union(rng, .Range(strArr(i) & ":" & strArr(i))) 
    Next i 
End With 

Set fooooo = rng 

End Function 

次に、必要なすべてのサブステップからこのように呼び出します。

Sub foofind() 
Dim rng As Range 
Dim str As String 

str = "A,E,D,S" 

Set rng = fooooo(str, Worksheets("Sheet1")) 

Debug.Print rng.Address 
+0

こんにちはスコット、提案していただきありがとうございます。私はあなたの最初の投稿、謝罪を完全に逃した。残念ながら、私は実際にこれを達成するためにルーチンを書く必要を避けようとしていましたが、私がしようとしていることに対して魔法の弾丸がないように聞こえます。ありがとうございました。私はこれを撃つだろう。 –

+0

@JonRoseこれは非常に簡単です。メモリ配列を解析するとき、ループはほぼ瞬間的になります。 –

+0

これは動作します。早速のご返事ありがとうございます。今、私はそれがどのように動作するかを理解するためにそれをdisectする必要があります。私はVBAでArrayの作業に精通していないので、後で使用するためにいくつかの値を追加する必要があります。再度、感謝します。 –

関連する問題