• ベストアンサー

マクロで、他のブックのあるシートのセルの値を取得する方法

マクロ初心者です。よろしくお願いします。 2つのブックがあるとします(a.xlsとb.xls)。 この2つには似たようなデータが入っているのですが、これらを逐一比較するマクロを組みたいと思っています。 いま行き詰まっているのは、a.xlsの上でマクロを走らせる際、b.xlsのセルの値を取得することができないことです。 IF CELLS(1,1)=「ブックbの(1,1)の値」 THEN ・・・ というような条件式を作りたいのですが、「 」内をどのように書けばよいのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

Workbooks("b.xls").Worksheets("Sheet1").Cells(1,1) のように書きます。 b.xlsはあらかじめ開いてある必要があります。 長いのでWithステートメントを使うか、 dim shtb As Worksheet Set shtb = Workbooks("b.xls").Worksheets("Sheet1") として shtb.Cells(1,1) のように書くのがいいと思います。

tarobei
質問者

お礼

なるほど!できました。 これで完成です。 ありがとうございました。

その他の回答 (1)

回答No.2

Workbooks.Open "C:\なんたら\かんたら\b.xls" でフルパスでb.xlsをオープンして、 if Cells(1, 1)= Workbooks("b.xls").Worksheets("Sheet1").Cells(1, 1) then Workbooks("b.xls").Close SaveChanges:=False 終わったらb.xlsをクローズします。

tarobei
質問者

お礼

そうですね!こうすればいちいちb.xlsを開いていなくてもできるのですね! ありがとうございました。

関連するQ&A

  • ■ 他のブックのセル値を取り込むことは可能ですか?

    マクロで他のブックの特定のセルの値を取り込むことは可能ですか? 例えば、今A.xls B.xlsという2つのエクセルファイルを開いていまして、A.xlsの A4 の値を B.xls の G8 に入れたいのですが・・・。 説明分かりにくかったでしょうか? もしお分かりになった方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

  • 別のブックのセルの値をコピーするマクロについて

    ExcelのVBAのマクロに関する質問です。 複数のブックのセルの値をコピーするマクロについての質問なのですが、現在以下のファイルがあります。 サンプル1.xls サンプル2.xls サンプル3.xls データ.xls そして、 サンプル1のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA1~D1まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA1~D1まで、 サンプル2のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA2~D2まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA2~D2まで、 サンプル3のセルA1~D1までの値をデータ.xlsファイルのシート1のセルA3~D3まで、 セルA2~D2までの値をデータデータ.xlsファイルのシート2のセルA3~D3まで、 上記のような形でコピーしたいのですがマクロがわかりません。 データ.xlsにボタンを作成し、そのボタンを押すとこの処理が実行されるようにしたいです。 どなかた方法を教えていただけますでしょうか。ご回答お待ちしております。 ※ファイルの名前は今回はサンプル1などとしましたが実際は違う名前も使用します。 また、ファイルの数も今回は3つにしましたが増減します。

  • マクロ A1のセルの値を見て、B1に値を入力したい。

    エクセルのマクロでA1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、それ以外は「該当無し」と入れたいのですが下のマクロではうまく行きません。ぜひご指導ください。 Sub If Left(Cells(1, 1).Value, 1) = 1 Then Cells(2,1).Text = "a" ElseIf Left(Cells(1,1).Value, 1) = 2 Or _ Left(Cells(1,1).Value, 1) = 3 Or _ Left(Cells(1,1).Value, 1) = 4 Then Cells(2,1).Text = "b" ElseIf Left(Cells(z, 37).Value, 1) = 5 Then Cells(2,1).Text = "c" Else: Cells(z, 40).Text = "該当無し" End If End Sub

  • 別のブックから、特定のシートを指定して他のブックを開くには

    マクロ初心者です。 A.xlsと、B.xlsという2つのブックがあります。 B.xlsはこの時、閉じた状態です。 Aには1つのシートのみがあって、Bには日毎に追加されていく不特定数のシートがあります。 Aのブックのシート内のセル番地A1に、「aaa」と入力した場合、B内の「aaa」という名前のシート名を指定してB.xlsを開くマクロはどう書いたら良いのでしょうか。 頼りきりの質問になってしまって申しわけございません。 何卒宜しくお願い申し上げます。

  • 他のブックを開かずに値を取得したい

    お世話になっております。。。 excel2007です。 アクティブである、ThisWorkbookに 外部ファイルから値のみ取得し、ThisWorkbookのA14セルからA27まで 入力させたい・・・ のですが、上手くいきません。 WEB検索して、ExecuteExcel4Macroでやってみたのですが、 Cells(1, C + 13) = ExecuteExcel4Macro("'strFullPath1'!受注書" & "Cells(2, C + 23)") のところで、「値の更新:strFullPath1」と出てしまいます。 どうしたら良いでしょうか? Private Sub CommandButton1_Click() Const FILE_DIR1 As String = "\\192.168.~" '途中までのパス Const FILE_DIR2 As String = "\\192.168.~~" '途中までのパス Dim strFullPath1 As String Dim strFullPath2 As String Dim strFileName As String Dim フォルダ名 As String Dim C As Integer フォルダ名 = TextBox2.Value & "\" & Range("B4") & "\" strFileName = "*" & Range("B5") & " " & Range("B6") & ".xls" strFullPath1 = FILE_DIR1 & フォルダ名 & strFileName strFullPath2 = FILE_DIR2 & フォルダ名 & strFileName C = 1 If Dir(strFullPath1) <> "" Then For C = 1 To 14 Cells(1, C + 13) = ExecuteExcel4Macro("'strFullPath1'!受注書" & "Cells(2, C + 23)") Next D Else For C = 1 To 14 Cells(1, C + 13).Formula = "[strFullPath2]sheet!cells(1,D+17)" Cells(1, C + 13).Value = Cells(D, 14).Value Next D End If Unload Me End Sub 端折っているので、抜けがあるかもしれません。 お知恵を頂けますでしょうか? 宜しくお願い致します。

  • 変数が混じる名前のブックへのシート移動 マクロ

    いつもお世話になっております。 マクロ実行用Book=A.xls マクロ1で作成したファイル=●●日報.xls(●●の部分は、A.xls内のセル番地"AB2"にある文字列で、毎回変わります) マクロ2で作成したファイル=Book1.xls (1)A.xlsにて、●●日報.xlsを作成し、保存します(●●日報.xlsは保存後、閉じています) (2)マクロ2を実行し、Book1.xlsを作成します。 (3)Book1.xlsのシート(このブックにはシートは1枚のみです)を、A.xlsのブックの末尾に移動し、●●日報.xlsを上書保存する。 この場合、マクロのコードはどう書くのが適切なのでしょうか。 マクロ初心者のため、どなたかご教示いただけましたら幸いです。

  • エクセルマクロ 【空白セルを無視する方法を教えてください】

    マクロを独学で学び仕事に応用しているのですが、どうしても分からないことが発生してしまい、質問です。 内容は、今、エクセルシートのA1~B5の範囲で A B 1 1 1 2 1 2 3 4 1 5 1 という形で入力されています(見難くてスミマセン)。 この状態から「A列とB列に同じ数字が入力されてれば、メッセージBOXを表示して、なおかつOKボタンを押したら該当セルを赤くする」というマクロを作りたいのですが、本来であれば1行目のみ赤くなるはずなのですが、空白セルが含まれている3行目も赤くなってしまうんです。つまり、空白セルも「同じ値」と認識されているみたいなのですが...。 この場合、空白セルを無視するにはどうしたらよいのですか?教えてください。なお、マクロは以下のように作っています。 Sub ナンバーチェック() Dim Btn As Integer For X = 5 To 10 If Cells(X, "A").Value = Cells(X, "B").Value Then  Btn = MsgBox("同じ数値です", vbOK, "警告")  If Btn = vbOK Then   Cells(X, "A").Interior.ColorIndex = 3 Cells(X, "B").Interior.ColorIndex = 3 End If End If Next End Sub

  • マクロで入力済の最初のセルを取得したい

    マクロはまったくの初心者なのですが、シートに入力されている最初のセルを取得(行と列の番号)したいと思って下記の通りやってみたのですがうまくいきません。   Gyou = 1   Retu = 1 Chek1:    Maxcol = Cells(Gyou,Retu).End(xlToRight).Column    If MaxCol <> 0 then     GoTo Chek2    End If   If Gyou < 65536 then     Gyou = Gyou + 1     GoTo Chek1   End If Chek2:   MsgBox Maxcol としたのですが、入力されているセルはB3、C5だけです。 結果、MsgBox に表示されたのは256でした。 一番最初に入力されているセルはB3なのでMsgBoXには2と表示されると思ったのですがだめでした。 どこがおかしいのか自分では全然わかりません。あと、一番最初に入力されているセルの行番号も取得したいのですが、どなたかお教え下さい。よろしくお願いします。

  • 他ブックのセルの値をリンクさせたい

    Excel2007でマクロ作成中の初心者です。 常に同一フォルダの中のブックA(マクロ記入用)とブックB(データ計算用)を開いて、作業しています。 ちなみにこのフォルダはデスクトップ上にあります。 まず、ブックAを開き、出てきたフォームの中のコマンドボタンを押して、 ブックBを開き、セル("D2")に、ブックAのセル("A1")の値がリンクされているようにしたいです。 どのようにしたらリンクできるでしょうか。 Private Sub CommandButton89_Click() ブックBを開く Sheets("管理").Select  Range("D2").select End Sub ------------------------------------- Sub ブックBを開く() ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error GoTo err: Workbooks("25年計算.xlsm").Activate Exit Sub err: Workbooks.Open Filename:=ThisWorkbook.Path & "\25年\25年計算.xlsm" End Sub

  • 他ブックのセル参照するのに名前をセルで指定して参照させたい。

    他ブックのセル参照するのに名前をセルで指定して参照させたい。 題名が適当でないかもしれませんが、よろしくお願いします。 オフィス2000もしくは2002です。 200604.xls、200605.xlsという日付を基にした名称の規則的なブックがあります。 ファイル自体はネットワークの共通ドライブにあります。 それぞれsheet1に同様の形式で値のデータ(文字)が入っています。 その中のA1、B1、C1~・・・の値を 別ブック(仮にtest.xls)のA1に2006、A2に5と入力させることによって test.xlsの3行目に200605.xlsのA1、B1、C1~・・・の値を表示させたいです。 ブック名 test.xls    A列  B列  C列 ・・・・・・ 1行 2006 2行  5 3行 200605.xlsのA1、B1、C1~の値を表示させたいです。 4行 フォルダー名\[200605.xls]sheet1'!A1、次B1、次C1、と都度埋め込んでいけば値自体は出るのですが、 ブック名が手軽に変えられなくて困っています。 test.xlsのセルに埋め込んだ ='フォルダー名\[200605.xls]sheet1'!A1の [カッコ内]の文字をA1,A2セルに入れた値で参照させたいのですが、、、。 (A2は5ですが、参照したいのは2006の05というのも少々ミソです) 結果が同じなら手段はそんなには問いません。 よろしくお願いします。

専門家に質問してみよう