web-dev-qa-db-ja.com

Excelで現在のセルを取得するVB

Excel/VBに小さなスクリプトがあり、それを動作させようとしています。コピーするデータのダイナミックレンジを選択するだけですが、グリッドデータ(A11など)を取得する方法に関するヘルプ/コードが見つかりません。

以下は、データの範囲を選択するマクロ記録からのコードです。

_Range("D291:D380").Select
_

私はRange(Current).Selectまたは何かができると期待していたが、それはうまくいかない。

どんな助けも大歓迎です。

22
user266450

やってみました:

1つのセルの場合:

ActiveCell.Select

複数の選択されたセルの場合:

Selection.Range

例えば:

Dim rng As Range
Set rng = Range(Selection.Address)
27
Ben McCormack

キーワード「Selection」はすでにvba Rangeオブジェクトであるため、直接使用できます。コピーするセルを選択する必要はありません。たとえば、Sheet1で次のコマンドを発行できます。

ThisWorkbook.worksheets("sheet2").Range("namedRange_or_address").Copy
ThisWorkbook.worksheets("sheet1").Range("namedRange_or_address").Paste

複数選択の場合、forループでAreaオブジェクトを使用する必要があります。

Dim a as Range
For Each a in ActiveSheet.Selection.Areas
    a.Copy
    ThisWorkbook.worksheets("sheet2").Range("A1").Paste
Next

よろしく

トーマス

2
Thomas

動的に生成された文字列で範囲を取得しようとしている場合は、次のように文字列を作成する必要があります。

Range(firstcol & firstrow & ":" & secondcol & secondrow).Select
2
Lance Roberts

これはあなたの質問に直接答える助けにはならないかもしれませんが、あなたを助けてくれるかもしれないダイナミックレンジで作業しようとするとき、私は有用だと感じました。

ワークシートのセルA1:C3に100〜108の数字があるとします。

          A    B    C  
1        100  101  102
2        103  104  105
3        106  107  108

次に、すべてのセルを選択するには、CurrentRegionプロパティを使用できます。

Sub SelectRange()
Dim dynamicRange As Range

Set dynamicRange = Range("A1").CurrentRegion

End Sub

これの利点は、新しい行または列を番号のブロック(109、110、111など)に追加すると、CurrentRegionは常に拡大された範囲(この場合はA1:C4)を参照することです。

VBAコードでCurrentRegionをかなり使用しましたが、動的なサイズの範囲で作業するときに最も便利です。また、コードの範囲をハードコードする必要がなくなります。

最後に、私のコードでは、A1をCurrentRegionの参照セルとして使用したことがわかります。また、どのセルを参照しても機能します(たとえば、A1をB2に置き換えてみてください)。理由は、CurrentRegionは参照セルに基づいてすべての連続したセルを選択するからです。

2
Alex P

これを試して

Dim app As Excel.Application = Nothing
Dim Active_Cell As Excel.Range = Nothing

Try
            app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)
 Active_Cell = app.ActiveCell

Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
        End Try

'             .address will return the cell reference :)
1
James Heffer

私はこれが質問のタイトルから直接適用されないことを理解していますが、可変範囲に対処するいくつかの方法は、コードが実行されるたびに範囲を選択することです-特にユーザーが選択した範囲に興味がある場合。そのオプションに興味がある場合は、Application.InputBoxを使用できます(公式ドキュメントページ here )。オプション変数の1つは「タイプ」です。タイプが8に設定されている場合、InputBoxにはExcelスタイルの範囲選択オプションもあります。コードでの使用例は次のとおりです。

Dim rng as Range
Set rng = Application.InputBox(Prompt:= "Please select a range", Type:=8)

注:

InputBoxの値を、範囲ではなく、範囲なしの変数(Setキーワードなし)に割り当てると、以下のコードのように、範囲の値が割り当てられます(ただし、状況によっては、値をバリアントに割り当てる必要があります):

Dim str as String
str = Application.InputBox(Prompt:= "Please select a range", Type:=8)
0
Mistella