ユーザー入力を変数に格納する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
[OK]を、それがある程度動作しますので。しかし、A4の代わりにセルを選択すると、A $ 4 $が入力されます。これはループを実行していて、セル参照を持つことができません。 – Leon
投稿したコードは単なる例です。あなたの使用のために問題を修正している場合は、問題のある実際のコードを投稿する必要があります。 –
'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