• ベストアンサー
  • 困ってます

Excel VBA

Excel VBAを勉強中の者です。 複数のワークブックを開いているため、ワークブックから指定していってセルを選択したいと思い下記のようなコードにしてみたのですができませんでした。 Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select このようなコードは有り得ないのでしょうか? または、ワークブックを開いて、ワークシートをアクティブにして、セルを選択するというように、ひとつひとつ選択していくのではなく、一文でワークブックからセルまで指定する他の方法はありますでしょうか? 教えてください。よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数307
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.4

No1,No2です。 Vlookup関数でも可能ですよ。 但し、後々のエラー処理(もし検索値が見つからなかったときなど)を考えると Vlookup関数より Findで検索させる方法の方が楽です。 http://excelvba.pc-users.net/fol7/7_1.html にFindメソッドの使い方がありますので参考にしてください。 ファイルが開いているかどうかなどの処理も必要になるでしょうが Sub Search() Dim Obj As Object   With Workbooks("●●●.xls").Worksheets("▲▲▲") Set Obj = .Range("B2:I200").Find(.Range("B1"), LookAt:=xlWhole) If Obj Is Nothing Then MsgBox .Range("B1") & "は見つかりませんでした" Else Workbooks("○○○.xls").Worksheets("△△△").Range("B1").Value=Obj.Offset(0,5).Value End If End With End Sub とかいったコードになります(検証はしていませんのでミスがあったらごめんなさいです) あと多くのファイルにデータが分散する考え方も後々のフォロー(ファイル名が変更されたりなど)で めんどくさいことに発展しますので一度検討されることをお勧めします。 コードを考えるのも慣れるまでは大変でしょうが、どうやって目的を達成するか(アルゴリズム)を思いつくと思わぬ解決があります。 例えば Workbooks("●●●.xls").Worksheets("▲▲▲").Range("C1")セルにでも Vlookup関数を配置して 先に答えが出るようにしてけば  Workbooks("●●●.xls")のファイルB1セルに値を入れた時点で エラーがわかると思いますし コードの流れを Workbooks("●●●.xls")を開いて C1セルの値を変数に格納 Workbooks("●●●.xls")を閉じる Workbooks("○○○.xls")を開いて B1セルに 変数の値を入れる Workbooks("○○○.xls")を閉じる と簡単にセルに値を入れるだけにしてしまう方法などがあるでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 確かに既に多くのファイルにデータが分散し、面倒なことになりつつあります。 中間にVlookup関数を配置してというのは最初に思い付いたのですが、フォローが大変になるかなと思いやめました。でも、エラーがわかり、コードもとてもシンプルにできるとは思いもしませんでした。 やってみるとすぐにできました。ありがとうございます。 勉強のため、Findメソッドでもやってみようと思います。 (1回書いてみたのですがエラーになってしましました(泣)。どうしてもできない場合は、また教えてください。よろしくお願いします) ありがとうございました。

関連するQ&A

  • Excel VBAでエラーが出てしまう

    Excel VBAで今現在選択しているシートから"春"というワークシートに移動して"A1"セルを選択しようとするプログラムを作ろうとしています。 Worksheets("春").Select Range("A1").Select ならできるんですけど、 Worksheets("春").Range("A1").Select ならエラーになります。 なぜなのでしょうか?

  • Excel VBAで他のワークブックからのコピぺの仕方について

    Excel VBAで開いている全てのワークブックから決められたセルの中身とそのシート名をそれぞれ決められた一つのワークブックにコピぺする マクロを作りたいのですが、どうやって作って良いのかが分かりません。 例えば、 Sub Mac() For i = 1 To 100 Workbooks("Book1.xls").Worksheets("sheet1").Range(Cells(2108, 2), Cells(3108, 2)).Cut Destination:=Workbooks("Book1.xls").Worksheets("sheet1").Cells(13, 2) End Sub みたいにすれば良いと思うのですが、開いている全てのファイルからのコピぺってどうやって記述するのでしょうか? 何卒よろしくお願い致します。

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

その他の回答 (3)

  • 回答No.3
  • imogasi
  • ベストアンサー率27% (4558/16317)

VBAを勉強中のものにはむつかしい。 (1)まず他シート参照を勉強すること (2)ブックやシートのエクセルのオブジェクトの上下(包摂)関係を認識し理解し其れでオブジェクト変数で組み立てる方法をべんきょうしたらよい。 しかし近くにVBAを良く知っている人が居ないと、教えてもらうことなくて理解や、そういうことの関連問題に出くわすのは難しい。 たまたま見つかった私の控えていた例であげてみる(下記は採り上げたことに深い意味はない)。 他ブックは開いておくこと。 上位のオブジェクト(ブックの指定部分)+シートを特定する部分も出来るだけ記述して特定化してコードを書くことが当面良いのではないか。 そのうちコードは、段々オブジェクト名で置き換えたり、Withー End Withで書きたくなってくる。 Sub 入力() Dim wk1 As Workbook Dim wk2 As Workbook Set wk1 = ActiveWorkbook Set wk2 = Workbooks.Open("C:\Documents and Settings\XXXX\My Documents\ピボットMode.xls") Dim LastRow As Long With wk1.Worksheets("sheet2") LastRow = wk1.Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = wk2.Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = wk2.Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = wk2.Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = wk2.Worksheets("sheet1").Range("B7").Value End With End Sub

共感・感謝の気持ちを伝えよう!

質問者からの補足

詳しいご回答ありがとうございます。 確かに難しいようです。 目的は、他のワークブックにある一覧表から、品目で検索し、その数量を引っぱってきたいのです。 ワークシート関数ではなくVBAを使用する理由は、マクロを実行するまで数量を引っぱってきて欲しくないからです。 確かに上位のオブジェクト+シートも出来るだけ記述する方が、今の私にはわかりやすいです。 そこで、馴染みのあるワークシート関数のVLOOKUP関数をVBAに使用してできればいいなと思いました。 Workbooks("○○○.xls").Worksheets("△△△").Range("B1") = Application.WorksheetFunction.VLookup(Workbooks("○○○.xls").Worksheets("△△△").Range("B1"), Workbooks("●●●.xls").Worksheets("▲▲▲").Range("B2:I200"), 5, False) しかし、エラーが出るためパスの部分が間違っているのかなと思い、単純なActivateやSelectでパスをどう記述すればあっているのかいろいろ試してみようと思いました。しかし、いろいろやっても再び同じエラーが出たため質問させて頂きました。まさかActivaになっていないワークブックのセルをSelectすること自体が無理とは思いませんでした。試しにもなっていませんでしたね。 上記目的に合うわかりやすい方法はありますでしょうか?よろしくお願いします。

  • 回答No.2

>実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」というエラーメッセ時が出てしまいます。なぜでしょうか? 失礼しました。文法的には問題ないですが ActiveになっていないBookのセルを Select するのは無理ですね。 さて Select した後に何をしたいのでしょか? 例えば そのセルに 10 という値を入れるというのであれば Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Value=10 例えば 現在ActiveになっているブックのSheets("c")のA1の値を入れるというのであれば Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Value=ThisWorkbook.Worksheets(“C”).Range(“A1”).Value となるはずです。 どうしてもSelectしたければ Workbooks(“ワークブック.xls”).Active Worksheets(“C”).Range(“A1”).Select となりますが、それがご希望の動作になりますでしょうか。

共感・感謝の気持ちを伝えよう!

  • 回答No.1

Workbooks(“C:\フォルダ\ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select は Workbooks(“ワークブック.xls”).Worksheets(“C”).Range(“A1”).Select で十分です。 すでに開いているブックですので パスを指定する必要はないですね。

共感・感謝の気持ちを伝えよう!

質問者からの補足

ご回答ありがとうございます。 実行すると「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」というエラーメッセ時が出てしまいます。なぜでしょうか? また、他にワークブックから指定する方法はありますでしょうか?

関連するQ&A

  • ExcelのVBAについてです。

    例えば"Book1.xls"という名前のブックの"Sheet1"という名前のシートの一部を削除する。 これをVBAでやらせようと思うんですが、"Book1.xls"を開かずに行うことはできるんでしょうか。 Workbooks("Book1.xls").Worksheets("Sheet1").Range("C7:M51").ClearContents のようにしてるんですがうまくいきません。 "Book1.xls"はLAN上のブックで実際はフルパスで指定してます。 よろしくお願いします。

  • VBAのコピー

    VBAのコピー Dim xls As New Excel.Application Dim wbk As New Excel.Workbook Dim sh3 As Worksheet Set sh3 = Worksheets("全") sh3.Activate sh3.Range("A1:Z65536").Select Selection.Clear Set wbk = xls.Workbooks.Open("\\***.***.*.***\管理\全データ抽出.xls") wbk.Worksheets("全").Activate 'ワークシートをアクティブにする wbk.Worksheets("全").Range("A1:Z65536").Copy 'コピーする 'ActiveSheet.Paste Destination:=Worksheets("全").Range("A1") '貼り付ける Worksheets("全").Range("A1").PasteSpecial Paste:=xlPasteValues wbk.Close SaveChanges:=False 'Worksheets("メイン").Cells(1, 1).Select を実行すると 『wbk.Close SaveChanges:=False』のところで クリップボードに大きな情報があります。・・・・ と言うメッセージがでて必ずとまってしまうのですが メッセージをでないようにしたいのですが 教えてください。お願いします。

  • EXCEL VBAを利用して別ウィンドウでブックを起動する

    エクセルファイル(A.xls)内のセル($A$1)をダブルクリックすることで、エクセルファイル(B.xls)のワークシート(1)を開くVBAを作成しています。 ここまでは出来たのですが、1つ問題があります。 上記VBAでは、A.xls と B.xls が1つのエクセルファイルとして開かれてしまいます。(表現が誤っていれば申し訳ないです) どういうことかと言いますと、A.xlsもしくは、B.xlsのどちらかを閉じると両方閉じてしまいます。また、A.xlsとB.xlsを画面上に並べて比較することができず、画面下のタブを切り替えてそれぞれのファイルを見なければなりません。 例えば、スタート→プログラム→MicroSoftOffice→EXCELを2回行えば、エクセルファイルが別ウィンドウでそれぞれ独立して立ち上がります。要は、A.xlsのセル($A$1)をダブルクリックした時にB.xlsはこのような状態で立ち上がってきて欲しいのです。 以下、作成途中のVBAコードの一部です。A.xlsのセル($A$1)をダブルクリックすると、独立したエクセルを開くことはできました。 Dim OP As Double   OP = Shell("EXCEL.EXE", vbMaximizedFocus) しかし、B.xlsのワークシート(1)はA.xlsと1つのファイルとして開かれてしまいます。 (例:A.xlsのセル($A$1)をダブルクリックすると、B.xlsと新規EXCELファイルの全部で3つの状態になります。) 目標は、A.xlsのセル($A$1)をダブルクリックすれば、B.xlsのワークシート(1)が開く。 A.xlsのセル($B$2)をダブルクリックすれば、B.xlsのワークシート(2)が開くです。 長くなりましたが、どうかご助言よろしくお願い致します。 【作成途中VBAコード】 Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) Dim OP As Double    Dim Bfile As String Bfile = target.Address Select Case Bfile Case "$A$1" OP = Shell("EXCEL.EXE", vbMaximizedFocus) Workbooks.Open ("C:\B.xls") Worksheets("ワークシート(1)").Activate Case Else End Select End Sub

  • EXCEL VBA 新規ブック保存について

    フォームで作成したデータから、請求書などの帳票をシートに作成しています。 その請求書シートを、新たなブックを作成し、シートへ貼り付け セルC7(帳票名)    F11(コード1)    J11(コード2) この3つを合わせた名前で任意のフォルダへ保存して、閉じるようにしたいと考えています。 また、ブックの保存先を指定するにあたり 下の指定でコードを書いたのですが    C:\Users\××××××\Desktop\管理システム\帳票 システムを丸ごと違うPCに変えても、エラーが出ないようにするには この指定の書き方でも良いのでしょうか? まだ初心者なもので 二つのブックを行き来するコードで頭が混乱しています。 まだVBA勉強を始めたばかりで、質問方法も拙いところも多々あると思いますが ご教授いただけます様、どうぞよろしくお願い致します! 自分で書いたコードですが 考えすぎて、ちょっと支離滅裂になってしまい 恥ずかしいのですが藁にもすがる思いでご質問させていただきました Dim Newbook As Workbook   Set Newbook = Workbooks.Add   fileName = Range("C7") & "_" & Range("F11") & Range("J11")   Newbook.SaveAs fileName:=Worksheets("請求書").Range("C7") & "_" & Worksheets("請求書").Range("F11") & Worksheets("請求書").Range("J11") Windows("管理システム.xls").Activate Worksheets("請求書").Select Cells.Select Selection.Copy Windows("fileName").Activate Cells.Select ActiveSheet.Paste Range("A1").Select  ブック名 (元データ) 管理システム.Xls  シート名        請求書 追記: 本来はフォームから直接印刷を出したいのですが      フォームでは対応しきれない部分を、シート上にて必要に応じ手を加えてから、      出力したいと考え、今回のシートへの出力を考えています

  • エクセルのVBAのコード内で指定セルを相対参照する方法をお教えください。

    ActiveCell.Offset(0, 2).Range("A1:C1").Select 前記のコードは選択範囲をアクティブセルより相対参照にて指定するものですが、下表にてアクティブセルをA1として、コード内のC1に換えてA1(アクティブセル)の数値によって選択範囲とするセル数を指定するにはどうしたらよいでしょうか?(アクティブセルをA2,A3とした実行結果を2,3行のようにしたいのです)  A B C D E F 1 3 * * * 2 4 * * * *  3 2 * *

  • エクセルVBAでブックを開きたいのですが、

    エクセルVBAでブックを開きたいのですが、 アクティブシートを別のブックに移動させたいのですが、 まず、目的のブックを開く → 移動させたいシート名を右クリック → 移動またはコピー を選択 → 移動先ブック を選択  というふうにしようと思っていますが、 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUMIKO\My Documents\YYYY.xls" のようにファイル名を入れると開くことができました。 が、   Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\Range("F1").Value.xls" のように、アクティブシートの セルF1にファイル名を入れて、開きたいのですが、どうしても開くことができません。いろいろ調べて試しましたが、無理でした。 基本的にマクロで記録で作っている初心者です。 回答よろしくお願いします。

  • エクセルVBAでセル選択するコードが変

    エクセルのワークシートでVBAでセル選択するコードで理解に苦しむことがあります。 通常、Cells(2, 1)はセル番地で言えばA2セル Cells(4, 1)はセル番地で言えばA4セルです。 しかし、 With .Range("B5:B15")でくくれば  .Cells(2, 1)はセル番地で言えばB6セルだと思います。 .Cells(4, 1) はセル番地で言えばB8セルだと思います。 ところが下記のコードを動かすと、なぜかC10:C12が選択されてしまいます。 この理屈がわかりません。 Sub test02()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(.Cells(2, 1), .Cells(4, 1)).Select     End With   End With End Sub なお、 .Range(.Cells(2, 1), .Cells(4, 1)).Selectを .Range(“A2:A4”).Selectに書きかえると、希望のB6:B8が選択されます。

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。