• 締切済み

エクセルVBA セル選択範囲を調べるメソッドについ

cj_moverの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

なんか、ちょっとわかった気がしたので重ねてレスしてみます。   Range("A1:C5,D6:E10,G3:G12,B15:E16") を例えにすると   matrix = [{1,1,5,3;6,4,10,5;3,7,12,7;15,2,16,5}] で、得られるような   {top,left,bottom,right} 矩形範囲毎に絶対座標を配列にしたものを さらに二次元配列や二段階配列にする、みたいなことでしょうかね? そういうことでしたら > そこで、これを数値に変換したり、選択範囲が離れてていた場合は離れた範囲ごとに配列として返 > してくれる関数やメソッドのようなものは、VBAに用意されていないでしょうか? 残念ながら用意されていないです。なので、ご自分で工夫するしかないですね。 少し気になるのは最終的にそれらの座標を元に何をしたいか、ということです。 そこまでの見通しがあれば、また違うアドバイスもできるかも知れませんけれど。 "...でなければ出来ない"事例、というのは 私の経験では、相当に特殊で、例えば、 Excel2003までは 8192Areas より多い範囲を返してくれない.SpecialCells メソッドを拡張して自作した時 ぐらいで、通常は  .Address プロパティ、.Row プロパティ .Column プロパティ、  Application.ConvertFormula メソッド、などを組み合わせ、 文字列処理して、セル範囲の参照文字列で工夫した方が まだ、扱い易いように思います。 (私の想像力が乏しいだけで、必然的なニーズがあるのかも知れませんが。) それから、 > もしなければ作成する予定です。 ということなので、一応、説明しておきますが、 Excel2003 で選択できるセルブロック(=矩形範囲、Area)の数は8192 までです。 ところが、.Address プロパティは 255文字までしか返しません。 255文字を超えた部分についてはバッサリ無視して、 不完全な結果だということを知ることさえ出来ません。 この点を理解した上で取り組まれた方がよいかと思います。 確実にやるなら、 .Address を採るにしても、Areaごとにするとか、 あらかじめ、Areas数を限定しておくとか、 対策が必要です。 なので、Areasごとに、.Row .Column を採っていった方が (#1下から2番目の例)結局能率的な場合もあると思います。 あとは、二次元配列なのか、ユーザー定義型(Type)を配列にするか、とか、 何にせよ、目的次第ですけれども。 とりあえず、以上です。

tubasa000
質問者

補足

cj_moverさん こんにちは アドバイスありがとうございます。 御回答の通りで、このような配列で返ってくることを求めていました。 次のような場合に使用出来ることを考えています。 エクセルでよく利用する使い方のではと自分自身で勝手に思っているのですが。 リスト形式のデーターテーブル(シート)がある。 ユーザーは処理対象としたいレコード(セル)を任意に選択する(複数可)。 プログラムは、選択されたレコード(セル)を対象に処理(他のシートにコピーや印刷 など。差込印刷)をする。 これらのことをするのにプログラムはユーザーの選択セル情報を知る必要があるのでそ の方法を探していたところでした。 いずれにしろ構想の段階ですが、文字型では、処理が難しくなるのではないのかなぁと 思い、数値型でのアドレス情報での処理をしようと思った次第です。 あと、.Areasは今まで知らなかったメゾッドですが、この処理に利用できるのではない のかなぁと感じました。 データ数の制限は、元データがそんなに大きくないのでとりあえずは大丈夫です。

関連するQ&A

  • VBA、セルの選択範囲について

    下記のような表を用意し、   A   B  C  D  E 1    1月 2月 3月 合計 2 Aさん 1  2  3  6 3 Bさん 1  2  3  6 4 Cさん 1  2  3  6 5 合 計 3  6  9  18 セルの範囲選択を指定し別シートの任意のセルへコピーをVBAで行いたいのですが、 Aさん、Bさん、Cさんという範囲を選択する為に、合計という文字は含みたくないので、 Range("A2").Select Range(Selection, Selection.End(xlDown).Offset(-1)).Select と記載し、これは出来ました。 同様に、 1月、2月、3月という範囲も同様にxlToRightを使用し選択出来ました。 Range("B1").Select Range(Selection.End(xlToRight).Offset(, -1), Selection).Select しかし、B2:D4の範囲の指定の仕方がわかりませんでした。 データのレコード数は一定ではないのでB2:D4というように範囲を指定する事は出来ません。 そのときに応じてDさん、Eさんと増えたり、4月、5月と増えたりするので。 何か方法があればご指導お願いします。

  • VBA_選択セル範囲の最小値を求めるプロシージャ。教えてください。

    EXCELVBAの参考書を読んでいて分からないところがあります。 以下は参考書に書いてある内容。 『 1:Sub Position() 2: '選択セル範囲の位置を代入するための変数を宣言する 3: Dim R1 As Long, R2 As Long, C1 As Long, C2 As Long 4: '選択セル範囲の左上の行番号/列番号を求める 5: R1 = Selection.Row 6: C1 = Selection.Column 7: '選択セル範囲の右下の行番号/列番号を求める 8: R2 = Selection.Row + Selection.Row.Count - 1 9: C2 = Selecton.Columns + Selecton.Columns.Count - 1 10: '選択セル範囲の1行下に、各列の最小値を求めるMIN関数の式を代入する 11: Range(Cells(R2 + 1, C1),Cells(R2 + 1,C2)).FormulaR1C1 = "MIN(R" & R1 & "C:R" & R2 "C)" 』 と書いてあり 11行目の説明は、 『"MIN(R" & R1 & "C:R" & R2 "C)" は、「MIN(R」 & R1 & 「C:R」 & R2 「C)」になり、最終的にセルに置きたい式は次のような式です。式の中の「□」と「○」は、変数R1とR2の値、つまり選択セル範囲の上端/下端の行番号です。 =MIN(R□:CR○C) 』とあります。 なぜ=MIN(R□:CR○C)になるのでしょうか?? CRとは行の先頭という意味ですか?? 初心者ですので分かりやすく教えてください。

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

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

  • ExcelのVBAで特定のセルのみ選択

    Excel VBAの初心者です。 数式など入ったセルの選択は Selection.SpecialCells(xlFormulas).Select で、出来ましたが単純にセルの値が「1」などの時に選択するには どうすれば良いでしょうか。

  • Excel VBAで選択範囲を一括編集

    Excelで選択された範囲に入力された数値を、例えば2倍するにはどのようにすればいいのでしょうか。 Selection.Value = Selection.Value * 2 のようなやり方が知りたいです。

  • Excel VBA のセル内の選択テキストの読み書きは?

    Excel VBAで、選択されたセルではなくセル内の選択された部分のテキストの読み書きはできるのでしょうか? つまり、選択されたセルのテキストは Selection.Value を使って OldText = Selection.Value Selection.Value = "NewText" と読み書きができますが、セル内で選択されたテキストについてのインターフェイスはあるんでしょうか?

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • エクセルVBAで、選択セルを常にC行にする。

    エクセルVBAで、選択セルを常にC行にする。 例:ボタンをクリックすれば、選択しているセルがN25ならC25になり、N7ならC7にしたいのです。 選択セル範囲がB2:N12ならば、一番上を有効として、C2のみを選択範囲としてほしいのです。 VBAで記述するならどのようになるか。ご教示ください。

  • EXCEL VBA 空白行を含んだ範囲選択

    EXCEL VBA超初心者です。 EXCELのVBAについての質問です。 以下のような、日ごとのお金の貸付、返済の一覧データがあります。 例 A B C D E 1 年  月 日 貸付  返済 2 2008 5 10 10000 3 2008 6 10      8000 4 2008 7 10 20000 5 2008 8 20      7000 ・データの行数は決まっていません。 ・最後の行が「貸付」で終わることもありますし 例のように「入金」で終わることもあります。 ・各データには必ず「年」「月」「日」が入力してあります。 VBAで、A2セルからE5セルを範囲選択するには どのように記述したらいいですか? ちなみに自分で色々と調べてみて Selection.SpecialCells(xlCellTypeConstants, 23).Select としたのですが それだと空白セル(例でいうとE2やD3セル)が選択されず とびとびになってしまいました。 ご教授お願いいたします!

  • セルの範囲選択

    エクセルVBAの質問です。 セルの範囲選択をしたくて色々と試してみたのですが、どうも上手くいかないので教えてください。 「Range("F25:F36")」とした時の「F36」が可変の場合はどうすれば良いのでしょうか? よろしくお願いします。