2011-09-08 5 views
3

ユーザー入力を変数に格納するInputBoxがあります。ユーザーが入力している入力はセル番号です。ユーザーがVBAを使用してExcel InputBoxの入力としてセルをクリックさせる

たとえば、入力ボックスがポップアップし、ユーザーに「どこで開始しますか?」と尋ねられます。ユーザはA4で入力するか、またはどちらかのセルを入力します。

私の質問は、物理的に入力する代わりにセルA4を物理的にクリックできるようにする方法はありますか?任意の助けを事前に

おかげ

更新:だからは、基本的に我々は、水平方向にまたがる転置データの長いリストを持っています。私たちは、これらのリストを横に積み重ねることを望んでいます。これは、このコードが想定しているものです。

以前はすべてうまくいきましたが、ユーザーは手動でセル番号をInputBoxに入力する必要がありました。入力ボックスは、切断を開始する場所をユーザーに尋ね、2番目のボックスは貼り付けを開始する場所をユーザーに尋ねます。これらの入力値を文字列変数に格納し、すべてが魅力的に機能しました。

それ以来、実際にどの行番号を調べるのが難しいかもしれないので、ユーザーは物理的にセルをクリックできるようにしたいと思っていました。次のコードは、ユーザーがセルをクリックできるようにするために使用しようとしている変更を反映するように更新されています。 Application.InputBoxメソッドを追加し、変数の宣言をRangeに変更しました。

何が起こっていたのかを見るために一度に1つのプログラムに入りました。これが私が見つけたものです。以前、ユーザーがB4で開始してA16に貼り付けたい場合、B(B4:B15)のデータ範囲を選択し、切り取り、A16に貼り付けました。その後、私はコードを持っていた、それはB4ユーザーの入力スポットに戻り、私のx変数をインクリメントするためにforループを使用すると、右の次の列にオフセットされます。そこで、列C(C4:C15)を切り取り、今度はA28(xldownを使用)に貼り付けるなどの処理を繰り返します。

この現在のコードにステップインしたときに、私はRange変数に記録された値が表示されないということが起こっています。 B4:B15を切断してA16に貼り付ける最初のステップですが、次のループを実行するときは、B4で戻ってオフセットするのではなく、A16で開始してからオフセットします。これは、ユーザーが開始地点として選択したB4に戻ってから、オフセットする必要があります。

申し訳ありませんが、長い説明のために、これは状況をクリアするのを助けたと思います。 Application.InputBox

使用

現在のコード

Dim x As Integer Dim strColumnStart As Range Dim strColumnEnd As Range On Error Resume Next Application.DisplayAlerts = False Set strColumnStart = Application.InputBox("What cell would you like to start at?", "Starting position","Please include column letter and cell number", Type:=8) On Error GoTo 0 Set strColumnEnd = Application.InputBox("Where would you like to paste the cells to?", "Pasting position", "Please include column letter and cell number", Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If strColumnStart = "What cell would you like to start at?" Or _ strColumnEnd = "Please include column letter and cell number" Then Exit Sub Else For x = 0 To strColumnStart.CurrentRegion.Columns.Count strColumnStart.Select ActiveCell.Offset(0, x).Select If ActiveCell.Value = Empty Then GoTo Message Else Range(Selection, Selection.End(xlDown)).Select Selection.Cut strColumnEnd.Select ActiveCell.Offset(-2, 0).Select ActiveCell.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveSheet.Paste strColumnStart.Select End If Next x End If Message: MsgBox ("Finished") strColumnEnd.Select ActiveSheet.Columns(ActiveCell.Column).EntireColumn.AutoFit Application.CutCopyMode = False End Sub 

答えて

6

から:OPの要件を更新しましたhttp://www.ozgrid.com/VBA/inputbox.htm

Sub RangeDataType() 

    Dim rRange As Range 

    On Error Resume Next 

     Application.DisplayAlerts = False 

      Set rRange = Application.InputBox(Prompt:= _ 
       "Please select a range with your Mouse to be bolded.", _ 
        Title:="SPECIFY RANGE", Type:=8) 

    On Error GoTo 0 

     Application.DisplayAlerts = True 

     If rRange Is Nothing Then 
      Exit Sub 
     Else 
      rRange.Font.Bold = True 
     End If 
End Sub 

Sub Test2() 

    Dim x As Integer 
    Dim rngColumnStart As Range 
    Dim rngColumnEnd As Range 
    Dim rngCopy As Range 
    Dim numRows As Long, numCols As Long 


    On Error Resume Next 
    Set rngColumnStart = Application.InputBox(_ 
      "Select the cell you'd like to start at", _ 
      "Select starting position", , Type:=8) 

    If rngColumnStart Is Nothing Then Exit Sub 

    Set rngColumnEnd = Application.InputBox(_ 
      "Select where you'd like to paste the cells to", _ 
      "Select Pasting position", , Type:=8) 

    On Error GoTo 0 

    If rngColumnEnd Is Nothing Then Exit Sub 

    Set rngColumnEnd = rngColumnEnd.Cells(1) 'in case >1 cell was selected 

    Set rngCopy = rngColumnStart.CurrentRegion 
    numRows = rngCopy.Rows.Count 
    numCols = rngCopy.Columns.Count 

    For x = 1 To numCols 
     rngCopy.Columns(x).Copy _ 
       rngColumnEnd.Offset((x - 1) * numRows, 0) 
    Next x 

    rngCopy.ClearContents 

    MsgBox ("Finished") 
    rngColumnEnd.EntireColumn.AutoFit 
    Application.CutCopyMode = False 

End Sub 
+0

[OK]を、それがある程度動作しますので。しかし、A4の代わりにセルを選択すると、A $ 4 $が入力されます。これはループを実行していて、セル参照を持つことができません。 – Leon

+1

投稿したコードは単なる例です。あなたの使用のために問題を修正している場合は、問題のある実際のコードを投稿する必要があります。 –

+0

'x = 0の場合strColumnStart。ActiveCell.Offset(0、x).Select - ActiveCell.Value =空の場合 - GoToメッセージ - Else範囲(Selection、Selection.End(xlDown))。選択 - Selection.Cut strColumnEnd.Select - ActiveCell.Offset(-2、0).Select - ActiveCell.End(xlDown).Select - ActiveCell.Offset(1、0).Select - ActiveSheet.Paste - strColumnStart.Select - 次の場合x' – Leon

関連する問題