• ベストアンサー

選択した範囲を配列に格納

勉強はじめたばかりの超初心者です。 InputBoxメソッドを用いシートのなかからデータ処理をする範囲を選択 し、その選択した範囲の行数を求めようとしております。 下記の様にすればできることは承知しておりますが、選択した範囲の値 をSelectを用いずに直接配列に格納し、Ubound関数とかで行数を求める にはどうしたらよいのでしょうか。何かべつの変数を定義しVariantで 型宣言をしてといったところまでは想像つくのですが、それ以上がわかりません。ご教示いただけると幸いです。 Dim MotoN As Integer Public Sub データ範囲取得() Set MotoHani = Application.InputBox(Prompt:="元範囲を選択", Type:=8) MotoHani.Select MotoN = Selection.Rows.Count End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

質問のご趣旨がいまいちわかりませんが、最初の質問を額面通りに受け取って回答すると、次の通りです。外していたらすみません。 Public Sub データ範囲取得() Dim buf As Variant Dim motoHani As Range Set motoHani = Application.InputBox(Prompt:="元範囲を選択", Type:=8) buf = motoHani Debug.Print "rows count:"; UBound(buf, 1) Debug.Print "colomns count:"; UBound(buf, 2) End Sub

damezaru
質問者

お礼

ありがとうございます Variantで宣言した変数で単に=で置き換えれば 良いということですね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.3

下記のサンプルでうまく行きます。 実験確認済みです。 =========================<サンプル>======================= Dim MotoN As Integer Dim I As Integer Dim Cnt As Integer Dim MotoHani As Range Dim arys() As Variant Dim ary As Variant Public Sub データ範囲取得() Set MotoHani = Application.InputBox(Prompt:="元範囲を選択", Type:=8) MotoN = MotoHani.Rows.Count arys = MotoHani I = 0 For Each ary In arys I = I + 1 Debug.Print "ary(" & I & ")=" & ary Next ary End Sub =========================================================

damezaru
質問者

補足

ありがとうございました。 検証の方法までご教示いただき感謝いたします。

全文を見る
すると、全ての回答が全文表示されます。
  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

質問を具体的にお願いします。 ExcelのVBAでしょうか? それと、目的は何のためにとか理由を書いてください。 ただ単にROWの行数を求めるのであれば 3行目のSET の下に MOTON = MotoHani.ROWS.count の一行ですみます。

damezaru
質問者

お礼

早速のご教示ありがとうございます。 確かにselectionはいりませんね。ばかな例ですみません。 目的は、EXCEL VBAの私の勉強のためです。InputBoxメソッドで取得 した範囲にあるデータを配列に格納する際に、例えばA2からB10を選択 した場合、 Dim Hani As Variant Hani=Range("A2","B10") といったやり方は存じております。 左上のセルの番地と右下のセル番地を取得したり、また左上のセル番地 と行数、列数から配列に格納するような方法もあるかと思います。 質問したい内容は例のようにRange型でデータの範囲が判っている場合 (例ではDataHani) これをデータの番地や行数、列数を引数としない 方法で、配列に格納させる方法を教えていただきたいというお願いで す。 Ubound関数ならば、配列を引数とするかと思い最初の質問といたしました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルのマクロで行選択の選択範囲を変数指定する方法

    あるファイルのデータを別のファイルに行挿入でコピーするマクロを作ろうとしています。 コピー元の選択について、行範囲が固定であれば例えば   Rows("10:20").Select でよいのですが、コピー元行範囲がファイルにより異なるので変数化する必要があります。 単純には、 Sub Row_Copy() Dim AA, BB As Integer AA = 10 BB = 20 ' 10行目から20行目を行選択しコピーする Rows("AA:BB").Select '##ここが問題## Selection.Copy ' ' (簡単のため)同じシートに行挿入する例 Rows("30:30").Select Selection.Insert Shift:=xlDown End Sub ですが、これだと Rows("AA:BB").Select の部分でエラーになります。 いろいろとやってみましたが、どうしても何らかのエラーになってしまいます。Rowsは変数では使用できないのでしょうか? ちなみに、行範囲の選択ではなくRangeでセル範囲の選択をするという方法もありますが、複数ファイルのデータをコピー先の一つのファイルにマージするために行挿入でコピーしたいことと、列方向の柔軟性を持たせたいため、コピー元選択方法として行範囲の指定をしたいという趣旨があります。 また、1行毎のコピー・行挿入をデータの行数だけ繰り返すという手もありますが、データ量が多いとかなり処理時間がかかるためこれも避けたいと思っています。 マクロ初心者で知識不十分ですが、よろしくお願いします。

  • 複数セル選択範囲を下の変動する最終行まで伸ばしたい

    Win7とExcel2007でマクロ作成の初心者です。 Sub 選択範囲を広げる() Sheets("計算").Select Range("CU6").Select Selection.Resize(, Selection.Columns.Count + 27).Select ここで選んだセルの選択部分を、下の行に向かって選択範囲を広げたいです。 ただ、下方の行数は、常に変動するため、どうやって変動の選択範囲を広げたいか わかりません。よろしくお願いします。 表のCU6以下は、文字列と空白が交互にあります。 End Sub

  • エクセルVBAでの範囲選択について

    はじめまして。 VBAを勉強し始めたばかりなのですが、 sub test() Range("A1:M10").Select Selection.WrapText=True End Sub とあるものを、 『InputBox』を使わずに自由に範囲選択をするように するにはどういう方法があるのですか?

  • インプットボックスのキャンセル処理

    インプットボックスのキャンセルを押したときに「型が一致しません」というエラーがでてしまいます。いろいろ調べてみてはいるのですが分かりません。教えて下さい。 Sub 指定した行数を挿入() Dim TopRow As Integer, CntRow As Integer, InstRows As Integer Dim i As Integer, ii As Integer, n As Integer Sheets("Sheet1").Select Rows("7:7").Select TopRow = ActiveCell.Row CntRow = Selection.Rows.Count n = InputBox("行数を入力して下さい。", "指定した行の挿入") If n = "" Then Exit sub End if InstRows = n For i = 1 To CntRow Rows(TopRow + (i - 1) * (InstRows + 1)).Select For ii = 2 To InstRows Selection.EntireRow.Insert Next ii Next i End Sub

  • 日付が表示されているセルのみ範囲指定したい

    Excel2007でマクロ作成中の初心者です。 範囲指定がうまくいかない。 1)セルB30  =IF(A30="","",VLOOKUP(A30,表データ,2,FALSE))   セルB31  =IF(A30="","",VLOOKUP(A31,表データ,2,FALSE))    以下略  というように、セルB30~B60まで関数が入っており、  以下のように表示されています。  1   9月21日 2   9月22日    以下略    〃 29  10月19日 30  10月20日 31       ←(ここのセルは日付表示されず空欄。 関数 =IF(A60="","",VLOOKUP(A60,表データ,2,FALSE))が入っている) 2)以下のコードを実行すると Sub 範囲を選択() Range("B30").CurrentRegion.Select Selection.Resize(Selection.Rows.Count - 1).Select Selection.Offset(1, 0).Select Selection.Resize(Selection.Rows.Count - 1).Select End sub 1から31行まで選択されてしまします。これを30行目まで、日付の表示あるセルのみ 選択したいのですが、どうすればよろしいでしょうか

  • マクロ 選択範囲と同一の範囲を違う列で選択する

    いつも回答して頂き感謝感謝です。 今回の質問ですが、下記のマクロで日付が入力されている列の範囲選択が出来ましたが、この選択範囲を元に列を任意に変更し同等の行範囲で選択したいのですがどうしたらよろしいでしょうか?思いつく範囲でマクロを記述しましたがさっぱりでした。御指導の程宜しくお願い致します。 ・B4から下方向に日付が連続で入力されている。 ・C3から右方向に商品名が入力されている。 ・上記の交差する箇所に商品の使用回数が入力されている。 Sub 範囲の選択5() Dim Date1 As Date Dim Date2 As Date Dim 商品名 As Variant Dim b1 As Variant Dim b2 As Variant Dim b3 As Variant With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/12/1のように入力してください。") Set b1 = .Columns("B").Find(Date1, , xlValues, 1) If b1 Is Nothing Then MsgBox "入力した日付が見当たりません。再度入力して下さい。": GoTo s1 s2: Date2 = Application.InputBox("最後の日付を2012/12/31のように入力してください。") Set b2 = .Columns("B").Find(Date2, , xlValues, 1) If b2 Is Nothing Then MsgBox "入力した日付が見当たりません。再度入力して下さい。": GoTo s2 .Range(b1, b2).Select s3: 商品名 = Application.InputBox("商品名を入力して下さい。") Set b3 = .Rows("3").Find(商品名, , xlValues, 1) If b3 Is Nothing Then MsgBox "入力した日付が見当たりません。再度入力して下さい。": GoTo s3 .Range(b3).Select End With End Sub

  • ExcelVBA 行削除

    ExcelVBA 行削除 行削除マクロを組んでみようと、以下のソースを書きましたが エラーが出てしまいます。理由分かりますか?? ==ソース========================= Sub DeleteRows() Dim Va1 As Integer, Va2 As Integer, Va3 As Integer Worksheets("Sheet1").Activate Va1 = Selection.Row Va2 = Application.InputBox(Prompt:="何行消しますか??", Type:=1) Va3 = (Va1 + Va2) - 1 Rows("Va1:Va3").Delete End Sub ============================== やりたい事は、選択されているセルの行から数行(行数は数値指定)下までを選択して、 それを削除したいだけです。

  • 最期の行まで範囲指定ができません

    Excel365solo,Win10使用の超初心者です。 セルB26~BE26まで項目名が入り、不規則にセル結合してます。 B27~B57まで月日と曜日を表示するVLOOKUP関数が入っています。 そしてB27~B57まで5月21日~6月20日までが表示されています。 そして、次のコードでB27~BE57の範囲指定しても、B27~BE56しか 選択してくれません。仕方なく Selection.Resize(Selection.Rows.Count + 1).Select を追加して 使っています。原因がわかりません。ご教示お願いします。 Sub test() Range("B27").Resize(Day(DateSerial(Year(Date), Month(Date), 0)), 58).Select ’Selection.Resize(Selection.Rows.Count + 1).Select End Sub

  • エクセルのマクロについて

    行を選択し、関数を数値に変換するために下記のようなマクロを作成しました。 選択する行数が少ないと実行でるのですが、一度にたくさんの行を選択すると下のようなエラーが返されます。 「実行時エラー"424"」オブジェクトが必要です。 どこが間違いなのか教えて頂ければ助かります。 Sub TextValue() '選択された行範囲をデータに変換します。 Dim rc As Integer Dim rngCell As Range Dim sMsg As String rc = MsgBox("データに変換しますか?", vbOKCancel) If rc = vbCancel Then Exit Sub sMsg = "変換する範囲を選択して下さい。" Set rngCell = Application.InputBox(Prompt:=sMsg, Type:=8) rc = MsgBox("選択されている範囲の関数を" & vbCrLf & "データに変換します。" & vbCrLf & _ "選択された行範囲は " & rngCell.Address(0, 0) & vbCrLf, _ vbOKCancel, "処理を確認してください。") If rc = vbCancel Then Exit Sub rngCell.Select Selection.Value = Selection.Value End Sub Excel2002  OSはXPです。 宜しくお願い致します。

  • ExcelVBAで相対参照をしたい

    ExcelVBAで、任意の範囲を選択して各行ごとにある処理を行いたいと考えています。 Sheet_Name = ActiveSheet.Name range_address = Selection.Address range_address = Replace(range_address, "$", "") range_address = Left(range_address, InStr(range_address, ":") - 1) work_columns = Selection.Columns.Count '列数 Work_Rows = Selection.Rows.Count '行数 Range(range_address).Select Range(activecell_address, ActiveCell.Offset(0, work_columns)).Select 行の選択が出来れば、あとは、ソートするだけです。 と、選択範囲の左上のアドレスと、選択範囲の行数、列数の取得は出来たのですが、1行ごとの選択がうまく出来ません。(相対参照の仕方がわかっていないだけだと思いますが) やりたいことは、選択範囲を上から順に行ごとにソートしたいのですが、どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?