• 締切済み

エクセルVBA CellsとRangeの違い

CellsとRangeの違いが分りません。違いを明確にするために以下の説明文を書きましたが、正しいでしょうか? ---------------------- Cellsはセルを表すコレクションである。Cell(s)と複数形になっている。コレクションはオブジェクトの集合体なので、コレクションCellsはセルオブジェクトの集合体である。Cellsはあくまでコレクションであってオブジェクトではない。 一方、Rangeはセルを表すオブジェクトである。 ---------------------- CellsがコレクションならばCells(Range("A10"))の表記があってもいいと思いますが、実際にはありません。Cells(1,10)です。なぜですか? コレクションCellsとオブジェクトRangeの違いを明確に示す例はありませんか?

noname#154650
noname#154650

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.10

#自分の文章表現力というか、 #解説力?みたいなもののスキルの低さに自己嫌悪に陥ってますが 読み返してみると『CellsとRangeの違い』というより 『セルオブジェクトの集合体であるコレクションは何か』 というのがポイントのような気がしてきました。 答えは『Rangeオブジェクト』です。 単独のセルを表すのは『Rangeオブジェクト』であり、 その集合体であるコレクションも『Rangeオブジェクト』です。 範囲(range)は1つでも複数でも複合でも構わないわけです。 >Rangeオブジェクト(Rangeコレクションでもある)が呼び出されます。 >..あえて言えばRangeコレクション 奥歯にモノが詰まったような言い方をしてるのは 混乱の元になるから避けたい点だったからなんですけど。 「Rangeコレクション」という言葉自体はヘルプにも記載があります。 でも実際にはセルの集合体であるコレクションも『Rangeオブジェクト』であり、 「Rangeコレクション」クラスはありません。 WorkSheetオブジェクトクラスとWorkSheetsコレクションクラス、 単体用と集合体用にクラスが2つがある、のと同じように RangeオブジェクトクラスとRangesコレクションクラスがあるわけではないのです。 セル『範囲』として1つの『Rangeオブジェクト』クラスがあるだけです。 後はプロにまかせます。 http://msdn.microsoft.com/ja-jp/library/dd296886.aspx #2007からRangesクラスが追加されてますがこれは別。 #WorkbookConnectionオブジェクト対象なので通常は使えません。

noname#154650
質問者

お礼

ありがとうございます。 一度整理して、落ち着いて考えてみます。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.9

#いや、『参照する』だと余計に解らなくなりますか。 例えば MsgBox Worksheets.Item(1).Range("A1").Address この構文のItemはプロパティである、という事は解りますね。 ItemプロパティはWorksheetオブジェクトを返します。 貴方の捉え方だと、『Itemはプロパティであり、オブジェクトでもある』ように見えるという事ですよね。 では MsgBox Worksheets.Add.Range("A1").Address この構文のAddメソッドはどう捉えますか? ここではAddはオブジェクトを返す(Function)メソッドです。 貴方の捉え方だと、『Addはメソッドであり、オブジェクトでもある』ように見えてしまいます。 違いますよね。 『.』で繋ぐ時に、『.』の前のプロパティやメソッドで返されたオブジェクトを参照しているだけです。 Worksheets.Add.Range("A1").Address これを1行で表現するなら Worksheetsプロパティ(で返されるWorksheetsコレクション).(の)Addメソッド(で返されるWorkSheetオブジェクト).(の)Rangeプロパティ(で返されるRangeオブジェクトA1).(の)Addressプロパティ と、なります。 >そうなるとVBAで定義されるプロパティの定義って何?と思ってしまいます。 全てのプロパティがオブジェクトを返すわけではありません。 ValueプロパティやColorプロパティのように単なる値を返すプロパティもあります。 単に、オブジェクトを返すプロパティやメソッドがある。ってだけなんですけどね -"-

  • end-u
  • ベストアンサー率79% (496/625)
回答No.8

>回答を拝見する限り、プロパティとコレクションは分離されるものではなく >「プロパティでありコレクションでもある」のように見えます。 >そう捉えていいですか? ダメです。 仰ってるのは『Cells は プロパティ であり コレクション でもある』ように見えるという意味ですよね。 私がずっと言ってるのは『Cells は プロパティであり コレクションではない』という事です。 プロパティ と コレクション(オブジェクト)は違います。 >CellsプロパティもItemプロパティもオブジェクトを呼び出す、という事を理解してください。 『CellsプロパティはRangeオブジェクトを返す』 『CellsプロパティによってRangeオブジェクトが呼ばれる』 とか、意味が解りませんか? 『CellsプロパティはRangeオブジェクトを参照する』 だったら解りますかね? あまりゴチャゴチャ書くから解らないんですかね? 最初のレス#3の >ActiveSheet.Cells とした時、CellsプロパティはActiveSheetの『すべてのセル (Range オブジェクト)』を返します。 >という事は >ActiveSheet.Range("A1:IV65536") と書いているのと同じ事です。 これは理解できますか?

  • end-u
  • ベストアンサー率79% (496/625)
回答No.7

>プロパティについて受けた説明は、オブジェクトの様子、例えばセルの「値」「色」等を表すもの、でした。 Property Value([RangeValueDataType]) Excel.Range のメンバ 「値」はRangeオブジェクトの設計図(=Rangeクラス)にPropertyとして定義されています。 [RangeValueDataType]の引数を持った、型指定なしのValueプロパティとして定義されています。 Property Color As Variant Excel.Interior のメンバ 「色」はInteriorオブジェクトの設計図(=Interiorクラス)にPropertyとして定義されています。 引数を持たない、Variant型のColorプロパティとして定義されています。 同じように Property Cells As Range 読み取り専用 Excel.Worksheet のメンバ 「Cells」はWorksheetオブジェクトの設計図(=Worksheetクラス)にPropertyとして定義されています。 引数を持たない、Range型のCellsプロパティとして定義されています。 そのように設計されているからPropertyであって、 >Worksheets(sheet1).Cells この記述で判断するわけではありません。 重ねて書きますが >ワークシートの1様子を表す「セル」であるからプロパティである.. と判断するのではなくて Property Cells As Range と定義されているからPropertyなのです。 >Worksheets(sheet1).Cells(1,1) これは、省略せずに書くと (Excel.Global.)Worksheets.Item(sheet1).Cells.Item(1, 1) #6の繰り返しになりますが (ExcelライブラリのGlobalクラスの)Worksheetsプロパティを書いたら WorksheetオブジェクトのコレクションWorksheetsが呼び出されます。 呼び出されたWorksheetsコレクションの設計図(=Worksheetsクラス) に定義されたItemプロパティに引数sheet1を与えて書いたら Worksheetオブジェクトが呼び出されます。 呼び出されたWorksheetオブジェクトの設計図(=Worksheetクラス) に定義されたCellsプロパティを書いたら Rangeオブジェクト(Rangeコレクションでもある)が呼び出されます。 呼び出されたRangeオブジェクトの設計図(=Rangeクラス) に定義されたItemプロパティに引数(1, 1)を与えて書いたら Rangeオブジェクトが呼び出されます。 上記の意味で >Worksheets(sheet1).Cells(1,1)において Worksheetsは(Worksheets)コレクション Worksheets(sheet1)は(Worksheet)オブジェクト sheet1は(Worksheet)オブジェクト Cellsは(Range)コレクション Cells(1,1)は(Range)オブジェクト です。 CellsはCellsコレクションではなくあえて言えばRangeコレクション Cells(1,1)はCellオブジェクトではなくあえて言えばRangeオブジェクト Cells.Select のSelectはCellsプロパティによって呼び出されたRangeオブジェクトに定義されたメソッドです。 >しかしCellsもプロパティ、Itemもプロパティで2つ重なりませんか?特に問題はないのでしょうか? Worksheets(sheet1).Cells(1,1) これもプロパティが重なっています。 WorksheetsプロパティとItemプロパティとCellsプロパティとItemプロパティ。 問題には思わないでしょう? あえて書けば MsgBox Cells.Item(1).Item(1).Item(1).Item(1).Item(1).Address CellsプロパティもItemプロパティもオブジェクトを呼び出す、という事を理解してください。 Cellsプロパティで呼び出したオブジェクトの、 Itemプロパティで呼び出したオブジェクトの、 Itemプロパティで呼び出したオブジェクトの.. ..を繰り返してます。

noname#154650
質問者

お礼

ありがとうございます。 >Worksheets(sheet1).Cells(1,1)において >Worksheetsは(Worksheets)コレクション >Worksheets(sheet1)は(Worksheet)オブジェクト >sheet1は(Worksheet)オブジェクト >Cellsは(Range)コレクション >Cells(1,1)は(Range)オブジェクト >CellsはCellsコレクションではなくあえて言えばRangeコレクション >Cells(1,1)はCellオブジェクトではなくあえて言えばRangeオブジェクト ほぼ私の理解と同じです。ただCellsはCellsコレクションでなくRangeコレクション、の部分は違ってましたが。プロパティの識別は、あくまで「VBAでプロパティとして分類されているか否か」だけで決まるようですね。回答を拝見する限り、プロパティとコレクションは分離されるものではなく「プロパティでありコレクションでもある」のように見えます。そう捉えていいですか?そうなるとVBAで定義されるプロパティの定義って何?と思ってしまいます。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

1)Set x = Application 2)Set x = Workbooks 3)Set x = Range("A1") 4)Set x = Cells 1)ApplicationプロパティによってApplicationオブジェクトが呼び出されてSetされる。 2)WorkbooksプロパティによってWorkbookオブジェクトのコレクションWorkbooksが呼び出される。 3)RangeプロパティによってRangeオブジェクトが呼び出される。 4)CellsプロパティによってRangeオブジェクトが呼び出される。 普段は意識する必要がないのですが、 オブジェクトを呼び出して使う時、どうやって呼び出しているか、という問題なのだろうと思います。 通常は、上位オブジェクトのプロパティとして用意された.xxxプロパティを使ってxxxオブジェクトを呼び出します。 Excelでは、大抵、プロパティとオブジェクトで同じxxxという名称が使われています。 でもCellsプロパティはCellsオブジェクトを呼び出しているわけではなくて Rangeオブジェクトを呼び出しています。 (そもそもCellsオブジェクトやCellオブジェクトはない。Cellsコレクションもない。) Rangeオブジェクトを呼び出すプロパティは他にも Itemプロパティ、Offsetプロパティ、Resizeプロパティ、Dependentsプロパティ..とか色々あります。 IntersectやUnionなど、Rangeオブジェクトを返す(Function)メソッドもあります。 >CellsとRangeの違い ResizeとRangeの違い と同じように違う..と言ったら言い過ぎでしょうか。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

>え、何で? ? 何で、と言われても。 VisualBasicEditorで[F2]キー。「オブジェクトブラウザ」の見方はわかりますか? Property Cells As Range 読み取り専用 Excel.Application のメンバ Property Cells As Range 読み取り専用 Excel.Range のメンバ Property Cells As Range 読み取り専用 Excel.Worksheet のメンバ ExcelライブラリのApplicationクラスのメンバに Property Cells As Range ExcelライブラリのRangeクラスのメンバに Property Cells As Range ExcelライブラリのWorksheetクラスのメンバに Property Cells As Range ..があります。 CellsはRange型を返すPropertyです。 オブジェクトでもコレクションでもメソッドでもありません。 >▼Cells プロパティを Worksheet オブジェクトに指定した場合 >これ、どういう意味なのでしょうか?ワークシートオブジェクトに指定するというのは具体的には何でしょう? 続けて >expression.Cells >expression 必ず指定します。Worksheet オブジェクトを返すオブジェクト式を指定します。 とありますよね。 Cellsプロパティを使う時は 『expression.Cells』というように『対象オブジェクト.Cells』と書きます。 expression(対象オブジェクト)の部分が Worksheetオブジェクトだった時は、という意味で >▼Cells プロパティを Worksheet オブジェクトに指定した場合 ▼Worksheet オブジェクトに Cells プロパティを 指定した場合 です。 『Worksheetオブジェクトを表すオブジェクト』とは ActiveSheetとかSheet1とかSheets.Item(1)とかWorksheets.Item(1)とか。 Worksheetオブジェクト.Cells と書いたら WorksheetオブジェクトのCellsプロパティの事で、 WorksheetオブジェクトのCellsプロパティは WorksheetオブジェクトのRangeオブジェクト、Range("A1:IV65536")を取得します。 CellsプロパティはRangeオブジェクトを取得する..というより CellsプロパティによってRangeオブジェクトが呼び出される..と言ったほうが理解しやすい? また、Cellsプロパティは引数を持ちません。 先にも書きましたが Cells(10, 1)はCells.Item(10, 1)のItemプロパティが省略されたもので、 (10, 1)というのはItemプロパティの引数です。

noname#154650
質問者

お礼

再度ありがとうございます。 オブジェクトブラウザ、初めて見ました。 プロパティについて受けた説明は、オブジェクトの様子、例えばセルの「値」「色」等を表すもの、でした。Worksheets(sheet1).CellsのCellsがプロパティというのは、ワークシートの1様子を表す「セル」であるからプロパティであるということですか?例えば Workbooks(book1).sheet1だったらsheet1はワークブックの1シートを表すからプロパティなのでしょうか? 現在の私の理解 Worksheets(sheet1).Cells(1,1)において Worksheetsはコレクション Worksheets(sheet1)はオブジェクト sheet1はオブジェクト Cellsはコレクション Cells(1,1)はオブジェクト Cellsに関しては例外的にセル全体を表すオブジェクトとしても使用される、例えばCells.select (selectはメソッド?) Cells.Item=(10,1)については私にもItemがプロパティに見えます、Itemは初めて見ますが。しかしCellsもプロパティ、Itemもプロパティで2つ重なりませんか?特に問題はないのでしょうか?

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

ワークシートのセル(単一セル,単一セル範囲,複数のセル範囲)は,Rangeコレクションオブジェクトとして取得したり操作することができます。 rangeではA1型式若しくは定義された名前を使い,R1C1型式で記入することはできません。 また,range(rangeオブジェクト,rangeオブジェクト)の書式により,単一セル範囲を取得,操作する事ができます。 range("A1").select range("A1:B4").value = 1 range(range("A1"), range("E5")).select range("A1:B4,D1:E5").interior.colorindex = 6 range("Print_Area").select ワークシートの単一セルは,cellsを使って取得したり操作することも出来ます。 cellsでは基本として行と列を指定します。 cells(2, 3).value = 2 range(cells(1, 1), cells(5, 5)).select 例外: cellsのもう一つの使い方として,親オブジェクトに含まれる全てのセルを取得,操作する事もできます。 activesheet.cells.clearcontents range("A1:B3,E1:F3").cells.value = 1 cellsの例外的な使い方として,rangeコレクションオブジェクトの既定のプロパティであるItemの代わりとして使う事ができます。 msgbox range("A1:E7").cells(35).address 親オブジェクトにrangeプロパティがある場合は,親オブジェクトに含まれるセル(セル範囲)をrangeで取得できます。 activesheet.autofilter.range.select msgbox activesheet.hyperlinks(1).range.address rangeプロパティはワークシートのセル以外のオブジェクトについても定義されている場合があります。 activesheet.shapes.range(3).select ----------- 既出回答でも指摘されていますが,「cellsコレクション」なる用語や説明はありません。sが付いているからコレクションと思った?のでしょうか。 また,コレクションはオブジェクトです。 「コレクション」についてよくわからない点があるようでしたら,VBAのヘルプから「Microsoft Visual Basic Documentation」に含まれている「Visual Basicプログラミングヒント」に掲載されている「オブジェクト、プロパティ、メソッド、およびイベントの概要」を読み込んでください。

noname#154650
質問者

お礼

Cellsコレクションについて オデッセイコミュニケーションズ発行 Excel VBAベーシック (著者 田中 了)より引用 Cellsは複数形になっていることからコレクションとわかりますが、(中略)、単体のセル(Rangeオブジェクト)の集合体が、ワークシートの全セルを表すCellsコレクションとなります。 回答頂いた内容では例外より上の記述では、Cellsはコレクションとしても無理はないように見えます。 >また,コレクションはオブジェクトです。 例えばコレクションを使った表現Worksheets(sheet1)がオブジェクトである、との意味でしょうか。ならば私もそうだと思います。

noname#154650
質問者

補足

最後の概要を読みました。 現状の私の理解と合ってるように思えます。Cellsの記載がないものの、オブジェクト、プロパティ、メソッドに関して、大きな疑問はありません。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

ヘルプを見てもらうと良いのですが <引用> Cells プロパティ ▼Cells プロパティを Application オブジェクトに指定した場合 アクティブ シートがワークシートのとき、そのワークシートにあるすべてのセル (Range オブジェクト) を返します。アクティブ シートがワークシートでないとき、このプロパティは失敗します。値の取得のみ可能です。 expression.Cells expression 必ず指定します。Application オブジェクトを返すオブジェクト式を指定します。 ▼Cells プロパティを Range オブジェクトに指定した場合 指定した範囲のセル (Range オブジェクト) を返します。値の取得のみ可能です。 expression.Cells expression 必ず指定します。Range オブジェクトを返すオブジェクト式を指定します。 ▼Cells プロパティを Worksheet オブジェクトに指定した場合 ワークシートのすべてのセル (Range オブジェクト) を返します。値の取得のみ可能です。 expression.Cells expression 必ず指定します。Worksheet オブジェクトを返すオブジェクト式を指定します。 </引用> ActiveSheet.Cells とした時、CellsプロパティはActiveSheetの『すべてのセル (Range オブジェクト)』を返します。 という事は ActiveSheet.Range("A1:IV65536") と書いているのと同じ事です。 Cells(10, 1) は Range("A1:IV65536")(10, 1) と同じです。 これは、RangeオブジェクトのItemプロパティが省略された書き方で、省略しなければ Cells.Item(10, 1) や Range("A1:IV65536").Item(10, 1) と書きます。 これはCellsあるいはRange("A1:IV65536")の10行目,1列目のアイテムを返します。つまりA10セル。 前述ヘルプ引用 >▼Cells プロパティを Range オブジェクトに指定した場合 に書いてあるように、Cellsは常にシートの全てのセルを表すわけではありません。 ActiveSheet.Range("A1:A10").Cells と、対象であるオブジェクトRange("A1:A10")を指定すると Range("A1:A10")のCells、つまり A1:A10 セルを返します。 With ActiveSheet.Range("A1:A10")   ':   v = Application.Transpose(.Cells) End With Cellsプロパティで対象のRangeオブジェクトそのものを指定するという使い方をする事もあります。

noname#154650
質問者

お礼

ありがとうございます。 ヘルプは確認しましたが、プロパティである、にビックリしました。え、何で? ▼Cells プロパティを Worksheet オブジェクトに指定した場合 これ、どういう意味なのでしょうか?ワークシートオブジェクトに指定するというのは具体的には何でしょう?

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

>Cellsはセルを表すコレクションである。Cell(s)と複数形になっている。  ⇒NGです。   Cellsは複数形ですが、ただのメソッドでありコレクションでは有りません。   コレクション階層は、Application→WorkBooks(Book)→WorkSheets(Sheet)→Range(Cell)なのでセルのコレクションはRangeです。 >CellsがコレクションならばCells(Range("A10"))の表記があってもいいと思いますが  ⇒前述の通り、Cellsはただのメソッドだから、この構文はあり得ません。 >コレクションCellsとオブジェクトRangeの違いを明確に示す例はありませんか?  ⇒階層が相違しているので例えられません。

noname#154650
質問者

お礼

ありがとうございます。 Cells メソッド でグーグル検索かけると、確かにCellsメソッドが出て来ますね。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

Cellsはコレクションとして使われ、Rangeはオブジェクトとして使われますね。常にオブジェクトはコレクションよりも優先して使われますのでCells(Range("A10"))の表記などコレクションの中にオブジェクトが使われるといったことはありません。

noname#154650
質問者

お礼

ありがとうございます。 >オブジェクトはコレクションよりも優先して使われます 例えばWorksheets(sheet1)で説明するなら Worksheets コレクション Worksheets(sheet1) オブジェクト の意味と考えていいのでしょうか?

関連するQ&A

  • VBAのRangeオブジェクトについて

    いつもお世話になっております。 VBAのRangeオブジェクトについてご教示下さい。 例えば下記のPGを組みます。 Sub test() Dim r As Excel.Range Set r = Me.Range("A1") Debug.Print r.Cells.Count End Sub この時、Debug.Printには"1"と表示されます。 Debug.Printでブレイクを置き、ここでA列を削除するとDebug.printでエラーが出てしまいます。 Rangeオブジェクト生成後、もしも参照先のセルが削除してしまった場合、条件分岐の処理を入れたいのですが、どのように処理をいれればよろしいでしょうか? セル削除後、Rangeのプロパティを参照した時点でエラーが発生してしまいます。 Typeで確認するとRangeがちゃんと取れるのですが・・・。 "参照先のセルが消されたかどうか"を判別する方法はあるのでしょうか?

  • エクセルVBAで

    いつもお世話になります。 Range("a1:C5,E5:H10").Select Selection.ClearContents この選択範囲をそれぞれ5列ずつづらしていきたいのですがfor文を使って出来るでしょうか? セルが1つならcells(1,5n)とすればいいのですが,範囲が連続で複数の場合(rangeを使った場合)はどうすればいいのでしょうか。

  • エクセルVBAで他のbookのセルcellsで参照

    エクセルVBAで他のbookのセルの値(一定の範囲)を参照したいのですが、変数を使いたいため、cellsを使用したいのですがうまくいきません。方法はないでしょうか。 下記に例を示します。 rangeを使用すればすべてok((2)(5))(この場合はset文を使用しなくてもok(5))。同じbookならcells使用ok(4)。 他のbookをcells文使用する方法はないでしょうか(もちろんできれば、Thisbookの方もcellsを使用したい)。 よろしくお願いします。 sub test() Dim ThisBook As Workbook Dim Workbook2 As Workbook 'マクロを実行しているワークブック Set ThisBook = ThisWorkbook '他のワークブック Set Workbook2 = Workbooks("test11.xlsx") ' 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value  '(1)だめ 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range("a1:b2").Value '(2) OK 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test11.xlsx").Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value '(3) だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test1.xlsm").Worksheets(1).Range(Cells(3, 3), Cells(4, 4)).Value  '(4)だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:ii8000").Value = Workbooks("test11.xlsx").Worksheets(1).Range("a1:ii8000").Value  '(5) ok End Sub

  • エクセルのVBAで

    現在アクティブであるセル(sheet2)に sheet1のあるセル範囲においての平均値を出しいのですが 条件文がわかりません。 以下に間違いのためにデバックしてしまう条件文を載せます。 BBはFor文で使っている関数です。 誰か分かりやすく解説してくださる硬いたらお願いします。 間違っている文 ActiveCell = "=AVERAGE(Sheet1!Range(Cells((BB - 1) * 6 + 3, 3), Cells((BB - 1) * 6 + 8, 3))/6"

  • VBA 簡単な疑問

    Excel用に、VBAを書いています。初心者です。 素朴な疑問があります。 1.セルを指定する際に、Range()とCells()がありますが、 Range("D5") or Cells(5, 4) Rangeのカッコ内に指定する範囲(D5,A1など)に相当するCellsのカッコ内に指定する値(5,4 1,1など)を簡単に知る方法はないでしょうか? たとえば、Range("CT")をCellsで書く場合に、何行目(これは左の数値を見れば分かりますが)の何列目かを計算するのはできますが、ミスの原因になりそうです。 2. 単一セルについて、セルの選択とアクティブにするのは何か違いがあるのでしょうか? 複数のセルを選択であれば、その複数の中でどれをアクティブにするか意味がありそうですが、単一の場合は全く同じと考えて良いのでしょうか? お手数ですが、よろしくお願いします。

  • cellsプロパティ列名をアルファベットに変える

    ●質問の主旨 cellsプロパティで表された列名をアルファベットに 変えるためにはどのようなコードを使えばよいでしょうか? 例)cells(4,5)→E列 ●質問の補足 cellsプロパティで取り出された行数を Rangeプロパティを表したいと考えております。 上記の例を使うと、 Range("cells(4,5)→E列 & 4")というプロパティを作成し、 Setステートメントを使用した「Rangeオブジェクト」に したいと考えております。 ご存知のかたご教示よろしくお願い申し上げます

  • VBAのクラスオブジェクト

    VBAのコレクションオブジェクトについての質問です。 一般的な説明では、 ・コレクション(Collection)とは、同じ種類のオブジェクトの集合体をいいます。 となっているのですが、  以下のような自分で作成するコレクションオブジェクトもあるみたいです。 この場合、同じ種類ではないオブジェクトでコレクションを作れるのでしょうか?それともこの場合も、同じ種類のオブジェクトでないといけないのでしょうか? ・Collectionオブジェクトを使うと、文字列、数値、オブジェクトを要素とする独自のオブジェクトを作成できます。   Dim colTest As New Collection 

  • Excel VBAの質問です

    いつも識者の皆様にはお世話になっております。 Excel VBAのことで質問させてください。 下記のマクロで質問があります。 改善したい点はForEach~Next文の中の s.Range("A:A").Cells.EntireColumn.Insert s.Range("A:A").Cells.EntireColumn.Insert s.Range("A:A").Cells.EntireColumn.Insert s.Range("E1").Copy Range("A1,C1") s.Range("A1") = "ddd" s.Range("B1") = "eee" s.Range("C1") = "fff" の部分です。 (1)s.Range("A:A").Cells.EntireColumn.Insertを3つも書くのはスマートじゃないと思うんですが、何かいい構文はありませんか? (2)E1セルをコピーしてからC1に"fff"と入力するところまでの部分がデバッグモードでやればうまくいくんですが、普通にVBAを実行するとうまくいきません。 具体的にはA列に色をつけて塗りつぶしていた場合、1枚目のシートはB1セルだけ塗りつぶしがなくなって文字列"eee"が入っており、、A1・C1セルは塗りつぶしはありますが"ddd" "fff"の文字列が入っていません。 2枚目以降のシートはA1:C1までのセルにそれぞれ"ddd" "eee" "fff" が入力されていますが、塗りつぶしがなくなっています。 どこかしら構文がおかしいんだと思いますが、どこが悪いのかご指摘いただけますでしょうか。 上記2点以外にもどこか改善点があれば教えていただきたく思います。 識者の皆様、よろしくお願いいたします。 Sub test() Dim myPath As String Dim myFile As String Dim s As Worksheet myFile = Application.GetOpenFilename() If myFile = "False" Then MsgBox "cancel" Exit Sub End If Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Workbooks.Open myFile myPath = ActiveWorkbook.Path & "\" myFile = "bbb_" & ActiveWorkbook.Name For Each s In ActiveWorkbook.Worksheets s.AutoFilterMode = False s.Range("A:A").AutoFilter field:=1, Criteria1:="<>ccc" s.AutoFilter.Range.Offset(1).EntireRow.Delete shift:=xlShiftUp s.AutoFilterMode = False s.Range("A:A").Cells.EntireColumn.Insert s.Range("A:A").Cells.EntireColumn.Insert s.Range("A:A").Cells.EntireColumn.Insert s.Range("E1").Copy Range("A1,C1") s.Range("A1") = "ddd" s.Range("B1") = "eee" s.Range("C1") = "fff" s.Cells.Font.Name = "Arial" s.Cells.ColumnWidth = 255 s.Cells.EntireRow.AutoFit s.Cells.EntireColumn.AutoFit Next ActiveWorkbook.SaveAs Filename:=myPath & myFile ActiveWorkbook.Close False Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True MsgBox "DONE" End Sub

  • エクセルのCELLS関数で複数セルを選択したい

    こんにちは。EXCEL VBAのことで質問させていただきます。 複数セル(たとえばA1からC1)をまとめて選択する際、 Range("A1:C1").Select と記述すると思います。 これを「Range」ではなく「Cells」で記述できないでしょうか? 宜しくお願い致します。

  • マクロ:エクセルVBAでのワークシート関数の参照について

    VBA内でワークシート関数を使用する際の、引数の参照について困っています。 満たしたい条件は、 (1)マクロ実行後のシート上においても、セル選択状態で数式「=B1*sum(A1:A3)」 といったように、「値」ではなく、「数式」が入力されているようにしたい。 ↑ Application.WorksheetFunction.Sum(・・・は使えない? (2)上記例のB1およびA1:A3については、マクロ内のユーザ入力によって位置が変わり、C1にもD1にもなり得るので、 cells(1,1)="=B1*sum(A1:A3)" といった「B1」[A1:A3]的な参照を使いたくない。 イメージとしては、 sub sample() number = inputbox("数字を入力してください") cell_a = inputbox("セル1") cell_b = inputbox("セル2") yourrange = range(cells(cell_a,1),cells(cell_b,1) cells(1,1)="=number*sum(yourrange)"・・・※ end sub みたいなことをしたいのですが、※のようなことを する方法はありますでしょうか? 説明が下手なもので、補足等あれば随時いたします。 使用環境はWindows2000、Office2000です。 よろしくお願いします。

専門家に質問してみよう