痔になりやすい生活習慣とは?

こんにちは。VBA初心者、の段階から脱出を試みているものです。

ここやその他サイトを調べて、EXCELファイルを閉じたまま外部参照するには、Application.ExecuteExcel4Macroを使えばいいことがわかったのですが、参照先の最終行などの情報を取得するにはどうしたらいでしょうか。

私が調べた限りでは、以下のような単純に値を取得する方法しか説明されておらず、VBEのヘルプにも詳しい説明がありませんでした。

Cells(1, 1) = Application.ExecuteExcel4Macro _
("'C:\My Documents\[Book2.xls]Sheet1'!R1C1")

参照先から値を取得する際に、必要な範囲だけ見るようにしてできるだけ速く処理できるようにしたいと思っています。
(したがって、 65535行目までループするとか、OPENメソッドで一旦ファイルを開くような手法は避けたいと思っています)

なにかいい方法がありましたらご教示いただけないでしょうか。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

Application.ExecuteExcel4Macroに関して詳しくありませんが


メモリ上に展開してもよいなら下記の形で取得できると思います。

Sub test()
Dim appExcel As Object
Dim sh As Worksheet
Dim row As Integer

Set appExcel = GetObject("C:\Book1.xls")
row = appExcel.Worksheets(1).UsedRange.Find("*", , xlFormulas, , xlByRows, xlPrevious).row
Set appExcel = Nothing

End Sub
    • good
    • 4
この回答へのお礼

ご回答ありがとうございます。

このメモリ上に展開する手法は、さまざまな場面で応用が効きそうですね!

実は最終行を取得するのは第1ステップで、その後応用していろいろと処理するつもりだったので助かります。

FINDメソッドの部分も、検索対象をワイルドカードにして、Afterの部分を省略、SearchDirection を xlPreviousにすると最終行の値にヒットするというのも自分では決して思い付きませんでした(ちなみにLookInの部分はXlValueでもちゃんと動いたので、どちらでもいいんですよね?)。

大変勉強になりました。

お礼日時:2011/02/12 19:23

Sub Test1()


 Dim fn As String
 Dim a As Long, b As Long
 Dim ret As Variant
 Dim frml As String
 fn = "'C:\My Documents\Excel\[TEST1.xls]"
 frml = fn & "Sheet1'!C1"
 On Error Resume Next
 '数字検索
 a = Application.ExecuteExcel4Macro("MATCH(" & 10 ^ 10 & "," & frml & ",1)")
 '文字検索(ただし、"*"があればヒットしてしまいます。その場合は、"熙"のような文字が良い)
 b = Application.ExecuteExcel4Macro("MATCH(""*""," & frml & ",1)")
 On Error GoTo 0
 If a > b Then
  ret = a
 Else
  ret = b
 End If
 MsgBox ret
 'Cells(1,1).Value = ret
End Sub

私からの拙いアドバイス。

>VBA初心者、の段階から脱出を試みているものです。

こういう裏技から遠ざかることが、初心者からの脱却だと思います。しょせん、単発ワザは、裏技に過ぎません。もし、学ぶなら、Ver.4 マクロ関数、Ver.5 のテクニックを知っておくと良いのですが、今は、資料などはありません。また、それを学んでも、今では、あまり生産的ではありません。

初心者から離脱は、基本の積み重ねしかないと思います。それも、ほんのちょっとしたことで、暗黙のプロパティを使って、Cells(1, 1) ではなく、Cells(1, 1).Value とか、変数のデータ型の決め方とか、分かっているようで分からないことを覚えて、毎日、コードを書くことです。
    • good
    • 1
この回答へのお礼

ご回答、およびアドヴァイスありがとうございました。

プログラミング自体初心者みたいなところから始めて、参考書やWEBの情報を読みなら全くの独学でやっているので、結構基本的なところが抜けてしまっているかと思います。

たとえ意図したとおりに動いたとしても、わかってる人からみればよろしくない部分の多々あることでしょう。

#2のような回答をいただいても、ちょっと前の自分だったら、Set appExcel = GetObject("C:\Book1.xls")とオブジェクトを変数に格納せずに、いきなりGetObject("C:\Book1.xls").Worksheets(1).UsedRange.Findのようなかたちで応用していたかもしれません。

なぜオブジェクトを一旦変数に格納すべきなのかは、いまだにちゃんと理解していなのですが…
(「たまにエラーになることもあるから」というレベルです、正直なところ)

お礼日時:2011/02/12 22:44

#1です



>今調べているのは、外部参照のファイルを閉じたままで同じ結果を得るにはどうしたら良いのかということです。

Range("A1").Value = "=COUNTA('C:\My Documents\[Book2.xls]Sheet1'!$A$1:$A
$65536)"

これは、セルA1にBook2.XLSのレコード数を計算する式を入力すると言うコードです。
質問者さんが仰るように、Book2.XLSはオープンしていないですが。
的外れな回答でしたらすみません。
    • good
    • 0
この回答へのお礼

度々ありがとうございます。

A1セルに「ワークシート関数」を入力するというわけですね。ナルホドです。
ExecuteExcel4MacroはセルをR1CI形式で参照しなければならないと説明されていたので、質問の意図が伝わっていないかと思ってしまいました。

確かにワークシート関数COUNTAを書けば、ファイルを閉じたままでも(空白セルがない)という前提で最終行が取得できますね。

お礼日時:2011/02/12 19:00

'C:\My Documents\[Book2.xls]Sheet1'のA列には空白の行がなければ


(B列でもC列でも良いのですが)

Range("A1").Value = "=COUNTA('C:\My Documents\[Book2.xls]Sheet1'!$A$1:$A$65536)"
アクティブシートのA1 に Book2.xls の 行数を書き込む

ではどうでしょうか

この回答への補足

早速のご回答ありがとうございます。

質問の仕方が良くなかったのかもしれませんが、普通に最終行を調べるのなら
Cells(Rows.Count, 1).End(xlUp).Row

Range("A1").SpecialCells(xlLastCell)
などの方法があるのは存じております。

今調べているのは、外部参照のファイルを閉じたままで同じ結果を得るにはどうしたら良いのかということです。

以下のようなコードを試してみたのですが、前者は結果が「#NAME?」となり、後者はコードの実行時エラーになってしまいます。

Cells(1, 1) = Application.ExecuteExcel4Macro _
("'D:\sample\[sample.xlsm]Sheet1'!R1C1.SpecialCells(xlLastCell)")

Cells(1, 2) = Application.ExecuteExcel4Macro _
"'D:\sample\[sample.xlsm]Sheet1'!R65535C1.End(xlUp).Row")

ExecuteExcel4Macroでなくてもよいので、なにか方法はないでしょうか。

補足日時:2011/02/12 14:45
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

QVBA EXCEL 開かずにデータ操作

現在下記のようなコードでテストしています。

Sub Sample()

Dim TargetBook As Workbook

   Set TargetBook = Workbooks.Open("Book2.xls")
   TargetBook.Sheets("Sheet1").Cells(1, 5) = Cells(1, 1)
   TargetBook.Close

End Sub

Book2を開いてセルの読み書きはテストできました。
これをBook2をopenせず閉じた状態で操作したいと思っています。
Workbooksの表示されるメソッドを色々試してみますが出来ません。
OpenDatabaseが使用できるのかと思いますが、出来ません。
ご指導よろしくお願いします。

Aベストアンサー

Sub Sample2()
Dim myPath As String
Dim fn As String
  myPath = Application.DefaultFilePath 'パス
  fn = "Book2.xls" 'ファイル名
  'R1C1型で書く
  ret = Application.ExecuteExcel4Macro("'" & myPath & "[" & fn & "]Sheet1'!R1C1")
  ThisWorkbook.Sheets("Sheet1").Cells(1, 5) = ret
End Sub

他にも、
>OpenDatabaseが使用できる
ODBC(Open Database Connectivity)という意味でしたら、[外部データの取り込み]から操作します。ただし、その使用する列全体を使用してしまいますので、取り込みには、その以下にデータを置くことは出来ない欠点があります。

Office をインストールしていれば、Jet はインストールしていますから、当然、ADODBなどは利用できますが、意外に面倒かもしれません。フィールドがなくても取得できます。

Sub Sample2()
Dim myPath As String
Dim fn As String
  myPath = Application.DefaultFilePath 'パス
  fn = "Book2.xls" 'ファイル名
  'R1C1型で書く
  ret = Application.ExecuteExcel4Macro("'" & myPath & "[" & fn & "]Sheet1'!R1C1")
  ThisWorkbook.Sheets("Sheet1").Cells(1, 5) = ret
End Sub

他にも、
>OpenDatabaseが使用できる
ODBC(Open Database Connectivity)という意味でしたら、[外部データの取り込み]から操作します。ただし、その使用する列全体を使用してしまいますので、取り込み...続きを読む

Qエクセルで開いていないbookのセルの値が欲しい

エクセルが少し使える程度です。
1000個のブック内に同じ名前のシートが1個づつできています。
その1000個のシート毎にK列の最大値を求めたいのですが、
1000個のシートを”全て開くことなしに”できないでしょうか?

シート名は整理表から求めることができます。
シート名="C9&"\"&D9&"\["&A9&".xls]sheet1'"

シートが開いていれば、以下で求めることができるのですが。
=max(シート名!$k$2:$k$1250)

Aベストアンサー

ご質問の内容を取り違えていましたらすみません。
状況・課題の確認も兼ねて冗長な説明になるかと思いますがご容赦ください。

まず、開いているブックへの参照は
A:=max([Sample.xls]Sheet1!$k$2:$k$1250)
といった形になりますよね。

ここでリンク元のブックを閉じると、
数式は自動的に
B:=max('D:\***\[Sample.xls]Sheet1'!$k$2:$k$1250)
といった形に変わります。

この状態であれば、閉じたブックの値を参照することができます。
また、Bの形の数式を直接入力した場合でも
閉じたブックの値を参照できます。

問題は、対象のブックが大量にある場合に
Bの形の数式を順次入力していくのは現実的でない
ということだろうと思います。

対象ブックが開いている場合には、indirectを使用して
C:=max(INDIRECT("'"&A1&":\"&B1&"\["&C1&".xls]Sheet1'!$k$2:$k$1250"))
とすれば参照を動的に生成することができますが、
indirectでは閉じたブックを参照することはできません。

で、ようやく対策ですが、
Bの形の数式自体を文字列として生成し、
D:="=max('"&A1&":\"&B1&"\["&C1&".xls]Sheet1'!$k$2:$k$1250)"
メモ帳等を経由して貼り付けることで、
イの形の数式を一気に入力することができます。
(エクセルからエクセルへ直接の値貼り付けや数式貼り付けでは不可)

ただし、対象のブックが動いた場合には
その都度参照を貼りなおす必要がありますので、
対象のブックが頻繁に動くような場合には、
マクロを利用するほかはなかろうと思います。
1.#1さんの方法で直接参照する。
2.「整理表」の変更をイベントで取得して参照数式を書き換える。
3.リンク元ブックをバックグラウンドで開いてしまう(!)
といったアプローチが考えられます。

ご質問の内容を取り違えていましたらすみません。
状況・課題の確認も兼ねて冗長な説明になるかと思いますがご容赦ください。

まず、開いているブックへの参照は
A:=max([Sample.xls]Sheet1!$k$2:$k$1250)
といった形になりますよね。

ここでリンク元のブックを閉じると、
数式は自動的に
B:=max('D:\***\[Sample.xls]Sheet1'!$k$2:$k$1250)
といった形に変わります。

この状態であれば、閉じたブックの値を参照することができます。
また、Bの形の数式を直接入力した場合でも
閉じたブッ...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q参照先のブックを開かずに内容をコピーしたい

エクセルのマクロ初心者です。
いつもここで他の方のQ&Aを参考にしたり、自分で質問したりしてお世話になっています。

今回は、参照先のブックを開かずにその内容をコピーする方法についてお聞きしたいです。
現在、下記のようなマクロを組んでいます。

Workbooks.Open FileName:="BookA.xls"
Sheets("Sheet1").Activate
Range("B4:H4").Copy
Windows("BookB.xls").Activate
Sheets("Sheet2").Select
Range("B1").Select
Sheets("Sheet2").Paste
Workbooks("BookA").Close
Windows("BookB").Activate

つまり、BookAのセルの一部分をコピーしてBookBのセルに貼り付けるという内容なんですが、コピー参照先のBookAを一度開いてコピーしてからBookBに行って貼付け、さらにBookAを閉じた後でBookBに再び戻る、という動作になっているため、画面がパラパラと切り替わる時間があって少々うっとおしいのです。
BookAをいちいち開かずに内容をコピーする方法があると思うのですが、どのような構文を使えばいいでしょうか?
ご回答よろしくお願いします。

エクセルのマクロ初心者です。
いつもここで他の方のQ&Aを参考にしたり、自分で質問したりしてお世話になっています。

今回は、参照先のブックを開かずにその内容をコピーする方法についてお聞きしたいです。
現在、下記のようなマクロを組んでいます。

Workbooks.Open FileName:="BookA.xls"
Sheets("Sheet1").Activate
Range("B4:H4").Copy
Windows("BookB.xls").Activate
Sheets("Sheet2").Select
Range("B1").Select
Sheets("Sheet2").Paste
Workbooks("BookA").C...続きを読む

Aベストアンサー

>画面がパラパラと切り替わる時間があって少々うっとおしいのです。
これだけならマクロの最初と最期で
Application.ScreenUpdating = False
処理
Application.ScreenUpdating = True
とすればいいのでは?

QVBAでのExecuteExcel4Macroの値取得でエラー

こんにちは。
Excel VBAより、ExecuteExcel4Macroを実行して、
外部のExcelファイルの、名前(店名、月度)を定義したセルの値を取得したいと思っています。
店名:文字列型
月度:Date型

そこで、ExecuteExcel4Macro()を実行し、以下のような処理を加えました。

------------------------------------------------------------------------------------

dim 店名 as Variant, 月度 as Variant
If 外部マクロ実行("'c:\[test.xls]出勤簿'!店名", 店名) = False Or _
外部マクロ実行("'c:\[test.xls]出勤簿'!月度", 月度) = False Then
MsgBox "取得失敗", vbExclamation
End
End If


Public Function 外部マクロ実行(com As String, ByRef result As Variant) As Boolean
On Error GoTo erron3
result = ExecuteExcel4Macro(com)
On Error GoTo 0
外部マクロ実行 = True
Exit Function

erron3:
外部マクロ実行 = False
End Function

------------------------------------------------------------------------------------

これを実行したところ、「月度」の値は取得できるのですが、
「店名」の値には「エラー 2042」という値が入ります。
※dirname, filenameは正しい値が入っています。
※シート「出勤簿」および「月度」「店名」のセル名の定義も存在します。

test.xlsを開いてるときは、上記の現象は起こらず、
「店名」の値は正常に取得できます。


また、試しに、test.xlsを開き、
Worksheets("出勤簿").Range("店名")を実行すると、正常な値が取得できました。


まとめると、
・閉じたブックの、あるシートにある、セルに定義された名前を指定して
・ExecuteExcel4Macroで、文字列が入っている値を取得しようとした時、
・正常に値が取得できない
という現象に遭遇しています。

3日ほど調べているのですが、どうしても原因が分かりません。
解決策をお持ちの方、いらっしゃいましたらアドバイスを頂けると助かります。

環境:WindowsXP Pro SP3
Excel 2003 (11.5612.5606)

以上、よろしくお願いいたします。

こんにちは。
Excel VBAより、ExecuteExcel4Macroを実行して、
外部のExcelファイルの、名前(店名、月度)を定義したセルの値を取得したいと思っています。
店名:文字列型
月度:Date型

そこで、ExecuteExcel4Macro()を実行し、以下のような処理を加えました。

------------------------------------------------------------------------------------

dim 店名 as Variant, 月度 as Variant
If 外部マクロ実行("'c:\[test.xls]出勤簿'!店名", 店名) = False Or _
外部マクロ実行("'c:\[test....続きを読む

Aベストアンサー

'-------------------------------------------------
Sub Test()
 Dim 店名
 Dim 月度

 店名 = 外部マクロ実行("'C:\[test.xls]出勤簿'!店名")
 月度 = 外部マクロ実行("'C:\[test.xls]出勤簿'!月度")

   If 店名 = 0 Or 月度 = 0 Then
     MsgBox "取得失敗", vbExclamation
   Else
     MsgBox 店名 & " @ " & Format(月度, "yyyy/m/d")
   End If

End Sub
'-----------------------------------------------

Function 外部マクロ実行(com As String)
  外部マクロ実行 = ExecuteExcel4Macro(com)
End Function
'-----------------------------------------------


●ただ今回の場合は、Functionは無しでもいいような。。。

'----------------------------------------------
Sub Test555()
 Dim 店名
 Dim 月度

 店名 = ExecuteExcel4Macro("'C:\[test.xls]出勤簿'!店名")
 月度 = ExecuteExcel4Macro("'C:\[test.xls]出勤簿'!月度")

   If 店名 = 0 Or 月度 = 0 Then
     MsgBox "取得失敗", vbExclamation
   Else
     MsgBox 店名 & " @ " & Format(月度, "yyyy/m/d")
   End If

End Sub
'----------------------------------------------------

以上。

'-------------------------------------------------
Sub Test()
 Dim 店名
 Dim 月度

 店名 = 外部マクロ実行("'C:\[test.xls]出勤簿'!店名")
 月度 = 外部マクロ実行("'C:\[test.xls]出勤簿'!月度")

   If 店名 = 0 Or 月度 = 0 Then
     MsgBox "取得失敗", vbExclamation
   Else
     MsgBox 店名 & " @ " & Format(月度, "yyyy/m/d")
   End If

End Sub
'-----------------------------------------------

Function 外部マクロ実行(com As String)
  外部...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QエクセルVBAで他Bookを閉じたまま参照・訂正

Cells(1, 1) = Application.ExecuteExcel4Macro _
("'C:\My Documents\[Book2.xls]Sheet1'!R1C1")
でBook2を開かずにセルを参照できますが、

1.別の記述方法があるのでしょうか。

2.逆に、閉じたBook2のセルに対し、値を訂正できないでしょうか。

よろしくお願いいたします。

Aベストアンサー

こんにちわ。
以前私もあなたと同じことをやりたくてマイクロソフトのサポートセンターへ問い合わせたことがありますが、外部参照という機能を使わない限りブックを開かずにセルを参照することはできないそうです。
ですから、あなた様が書かれたコード以外書く方法はないと思います。
また、ブックのセルの値を訂正するには、そのブックを開かない限り訂正することができないそうです。

私でよろしければ、またサンプルマクロを作ってみたいと思います。ご希望の節は、あなた様がどの様なことをおやりになりたいのかお知らせ下さい。

お手数をおかけいたしますが、よろしくお願いいたします。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング