• 締切済み

エクセルの選択範囲のセルの値を取得する方法(VB6.0)

visual vasic 6.0を使っています。 エクセルにおいて選択範囲のセルの値あるいはテキストを取得する 方法を教えていただけないでしょうか? よろしくお願いいたします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

VB6側からExcelを起動するなら CreateObject 既起動のExcelを取得するなら GetObject を使用します dim oXL as Object Set oXL = nothing On Error Resume Next Set oXL = GetObject(,"Excel.Application") On Error goto 0 if oXL is Nothing then   On Error Resume Next   Set oXL = CreateObject("Excel.Application")   On Error goto 0 End if if oXL is Nothing then   MsgBox "Excelの取得および起動に失敗しました"   Exit Sub end if 選択範囲の取得は dim oRng as Object Set oRng = oXL.ActiveSheet.Selection 等として 選択されているオブジェクトを取得しましょう その上で oRng.Rows.Count 等を取得すればいいでしょう Excel-VBAでは省略可能なオブジェクトもすべて指定しないといけませんよ

dai_3276
質問者

お礼

明快な回答ありがとうございました。 いろいろと勉強させていただいた結果解決することができました。 感謝です。 結局最後の選択範囲の取得は ActiveSheetを指定せずになぜか oXL.Selection.Rows.Count で取得することができました。 感激です。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

VB6から、Excel.ApprecationをCreateしてVisibleにして シート名をパス名.ブック.シート名のカタチでObjectを捉える(Sheetとする)。 http://homepage1.nifty.com/rucio/main/technique/teq_15.htm ほかWEBで多数実例が載っている。「Createobject excel」ででも Googleなどで照会。 後は 下記コードを入れたブックから実行して、Book2.xlsのシート1のRange("A1:B2")を表示する例 Sub test01() Dim cl As Range Dim ExcelApp As Object 'Excel.Application Dim Book As Object 'Excel.Workbook Dim Sheet As Object 'Excel.Worksheet Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = True ExcelApp.Workbooks.Open "Book2.xls" Set Book = ExcelApp.Workbooks("Book2.xls") Set Sheet = Book.Worksheets(1) Sheet.Range("B2").Value = "こんにちは" '--- For Each cl In Sheet.Range("A1:B2") MsgBox cl Next '--- Book.Close ExcelApp.Quit End Sub のように、エクセルの世界にはいって、セルを対象にするときは上記で言うSheet すなわちSheet.XXXのように普通のエクセル内でのVBAでは、つけない場合でも、Sheet.をつけてコードを書いてください。 またエクセルの定数xlxxxの使用は注意すること。 ーーー >セルの値あるいはテキストを取得する・・ エクセルには、セルの値(Value)として 数値 かまたは 文字列 論理値 が入っており、この文字列のことを質問者は「テキスト」といっているのでしょうが、コントロールのようにテキストというプロパティはセルにありませんので不適切用法と思う。 ーーー VBは判っていても、エクセルの世界にはいると、エクセルVBAのこと(エクセルの操作との対応性など)を経験して・知ってないと、コードがかけない。甘く見ないこと。

dai_3276
質問者

補足

ありがとうございます。 コードまでつけていただきありがとうございます。 もう一つ質問ですが、 現在立ち上がっている状態にある エクセルシート内のセル範囲を VBのコードから取得したいのですが、 Selection.Rows.Count を使用してもうまくいかないのですが やはり甘くみているようで、うまくいきません。 他の方法がないものでしょうか?

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

http://hanatyan.sakura.ne.jp/ 「Excel & Word関係」が参考になると思います。

関連するQ&A

  • VBからEXCELのセルの値を取得する方法

    VBからEXCELファイルのあるセルの値を取得すると、本来の書式設定とは 違った形式で取得されてしまいます。 VBから値を取得する方法を教えて下さい。 *EXCELファイルのセルの設定  セルの書式設定-ユ-ザ-定義-[h]:mm   (時刻ではなく、時間として設定しています) これをVBから普通に取得すると「1.7523548785」などといった 数値になってしまいます。

  • セル範囲の左上のセルの取得方法

    エクセル2010のVBAで関数を自作しているのですが Test(A as range, B as range)という関数で Aはセル1個、Bはセル範囲を選択して、Aは必ずBの左上のセルになるので、 Test(B as range)の様に変数を減らしたいです。 ただ、関数内でAを使用するので、Bのセル範囲の左上の値を取得する必要があります。 Bのセル範囲の左上の取得方法が分かりません。

  • Excelで、指定した範囲の先頭のセルの値を取得するには?

    Excelで、指定したセル範囲(1列)で、空白を除いた先頭のセルの値を取得する 方法はありますでしょうか? できればマクロを使用せずに関数だけでできるほうがありがたいです。 例)  | A ------------ 1 |(空白) 2 | ○ 3 | △ 4 | × 5 | □ の場合、検索範囲にA1:A5 を指定すると、○が値として返ってくるような感じです。

  • エクセルでのセル範囲取得

    セルの選択された範囲をVBAで取得する時、選択開始行は「ActiveCell.Row」で取得出来ますが、 選択終了行を取得するプロパティは無いのでしょうか? 「Selection.Cells.Count」を使用して、選択範囲の行数が返って来るのは分かっています。 問題なのはセルの選択順序です。 セルの範囲選択を上から下方向の場合は問題無いのですが、下から上に選択した場合、 選択開始行より下なのか、上なのかが判断出来ません。 そこで、選択範囲の行数ではなく、選択範囲終了の「行位置」が取得できる方法が無いかと色々調べてみましたが、見つけられませんでした。 どなたか御存知でしたら教えて下さい。

  • = (イコール)で始まるセルの値を取得する方法について教えてください。

    = (イコール)で始まるセルの値を取得する方法について教えてください。 エクセルVBAでCSVファイルを取り込み(現状手でコピー)→mysqlに挿入というプログラムを実装しています。 その中で、CSVファイル(もしくはタブ区切りテキストファイル)の中に、+ (プラス記号)で始まるデータがありました。 エクセルで開いた場合、+が =+に変換されてしまい、#NAME? となってしまいました。 このセルに対してValueを取得すると、型が一致しません。のエラーが出ます。 取り込んだ時点でValueが取得できないため、値を変換しようにもできません。 もし、良い方法が思いつく方がいらっしゃれば教えていただけませんでしょうか。 以上、よろしくお願いいたします。

  • ある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

    Excelの関数について質問します。 ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。 なければユーザー定義で作りたいと思っています。 VLOOKUP関数では一番左端が検索されますが、 それをある範囲まで拡張して、 その右隣の値を取得できるようにしたいのです。 どうかお知恵をお貸しください。

  • ExcelVBA 選択したセルの取得

    こんにちは。ゆきのです。 選択した範囲のセルに対して、Excelのマクロで 1回ずつ処理を行いたいと考えています。 まずセル数を取得したいのですが、  「selection.cells.count」でセル数を取得すると、  同じセルが複数回カウントされます。 またセルの範囲を取得したいのですが、  「selection.address」で範囲を取得すると、  重複したセルを含んだそれぞれの範囲が取得されます。 例えば、  (1)  「$A$1」を「ctl」+「左クリック」で3回選択した状態だと、  「selection.address」が「$A$1,$A$1,$A$1」となり、  「selection.cells.count」は「3」となります。  (2)  「ctl」+「左クリック」で「A1:B1」「A1:A2」を連続で選択した状態だと、  「selection.address」が「$A$1:$B$1,$A$1:$A$2」となり、  「selection.cells.count」は「4」となります。  ($A$1が2回カウントされます) この時、同じセルを複数回カウントせずにセル数を 取得することはにできるのでしょうか? (上の例の場合ですと、(1)が「1」、(2)が「3」と取得したいです。) また、複数選択で範囲を取得する場合に選択が重複したセルを 除いた状態の範囲を取得することはできるのでしょうか? 処理したセルを記憶させるなどの方法は考えてみたのですが、 別の方法はないかと思い、質問させていただきました。 どなたか、教えて頂けませんか?? よろしくお願いします。

  • EXCELでセルの値を取得したい

    EXCELで、各行の一番最後のセル(右端)の値を取得したいのですが どうすればできますか。 関数やマクロがわからないので、ここで質問させていただきました。 どなたか教えていただけると助かります。 よろしくお願いいたします。

  • エクセルで、ある範囲のセルのうち、5以上の値で最小の値を求めたい

    エクセルで、ある範囲のセルのうち、5以上の値で最小の値を求めたいです。 1 3 2 6 9 0 4 ならば、 6が答え。 関数が無ければ、VBAで作った関数でも構いません。 また、VBAで範囲指定と条件指定が引数となる方法も知りたいです。

  • エクセルでセルの値を数式の範囲として使うには?

    タイトル通りなのですが、エクセルでセルの値を数式中で範囲として使うにはどうすればよいのでしょうか? 例えばA1セルに「1」という値が入っており、B2セルに「10」という値が入っているとします。この時、数式中で、「A1」と「B2」を用いて、「E1からE10まで」を指定することは可能でしょうか。可能でしたらどのような数式を組めば良いのでしょうか? よろしくお願いします。

専門家に質問してみよう