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

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が使用できるのかと思いますが、出来ません。
ご指導よろしくお願いします。

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

A 回答 (4件)

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などは利用できますが、意外に面倒かもしれません。フィールドがなくても取得できます。

この回答への補足

bookを閉じた状態で読み込みする事が出来ました。
逆に書き込みを行うとした時にエラー424 オブジェクトが必要ですと出ます。
このメソッドで書き込みは出来ないのでしょうか?
Application.ExecuteExcel4Macro("'" & myPath & "[" & fn & "]Sheet1'!R1C1") = "test"

補足日時:2011/01/07 08:14
    • good
    • 4

#3の追伸です。



ここをご覧になってください。

http://support.microsoft.com/kb/278973/ja
ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)

サンプルファイル(ExcelADO.exe)もおいてあります。
    • good
    • 1

>逆に書き込みを行うとした時にエラー424 オブジェクトが必要ですと出ます。


>このメソッドで書き込みは出来ないのでしょうか?

ExecuteExcel4Macro(一般数式) Index 関数の利用も可能です。配列自体は取り出せませんが、配列からひとつの解を求めることは可能です。

これは読み出し専用です。書き込みするには、#2さんの方法や、ADODBやDAOを使いますが、ADODBをキーワードにして、Web検索をすればヒットするかとは思います。しかし、私自身、数年に1度書くかしないか程度で、実務的ではないし、しいてやれないことはない、という程度です。あまり、掲示板で披露した記憶がありません。

また、ADODBは、Excelの場合は、内部オブジェクトが備わっていないので、インスタンスを生成してから、値取得の段階に入っていきます。したがって、その時オーバーヘッドが掛かり、あまり思ったほどの効果はありません。

私からのアドバイスとしては、標準的な、ファイルを開いて、閉じる方法で良いのではないかと思います。

特に、#2さんの
Application.ScreenUpdating = False
 値-取得・値-書込
Application.ScreenUpdating = True
で、画面の変更のロスが減りますので、その分、時間が短縮できます。

私自身では、ADODB等で取得する場合は、データベースファイルに限ります。やはり、ファイルをOpenメソッドで開けて、それで書きこんで、保存するというオーソドックスな方法を使います。作成中に、目視して確認出来るという利点もあります。

なお、変則的には、私は、CreateObject("Excel.Application") というオートメーション化して使う場合があります。他の開いているブックに影響を受けないのと、マクロセキュリティに影響を受けない利点があります。しかし、これは、気を付けないと、メモリに残してしまうというミスを起こすことがあります。もうひとつは、絶対的とは言いませんが、.Value プロパティの省略などは、しないように注意しなければなりません。
    • good
    • 0

開かないで操作する方法は存じませんが、開いたことを気づかせずに操作するなら以下でどうでしょう?



マクロを書いたBOOKのアクティブなシートのA1セルの値を転記するなら

Sub Sample01()
  Dim TargetBook As Workbook
  Dim ws As Worksheet
  Set TargetBook = Workbooks.Open("Book2.xls")
  Set ws = ThisWorkbook.ActiveSheet
  With Application
    .ScreenUpdating = False
    TargetBook.Sheets("Sheet1").Cells(1, 5) = ws.Cells(1, 1)
    TargetBook.Close (True)
    .ScreenUpdating = True
  End With
End Sub

そうではなく、BOOK2のシート1のA1セルの値を転記するなら

Sub Sample02()
  Dim TargetBook As Workbook
  Set TargetBook = Workbooks.Open("Book2.xls")
  Application.ScreenUpdating = False
  With TargetBook
    .Sheets("Sheet1").Cells(1, 5) = .Sheets("Sheet1").Cells(1, 1)
    .Close (True)
  End With
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

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

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

QExcel2003 Sheet1とSheet2を比較して条件にあった処理を行いたいです。

先輩方、教えてください。
Excel2003ですが、
いろいろやってみましたがうまくいきません。
■前提
○sheet1とseet2に件数の異なる商品一覧シートがあります。

(Sheet1の方が数件多い)
○sheet1は、A列に商品コードのみ値が入っている。
○sheet2は、A列に商品コード、B列に商品名、C列に入数が入っている。
○結果が出せれば関数、VBAは問いません。

■行いたいこと
①A列にある商品コードをsheet1、sheet2から探し、sheet2にあるb列~c列をA列に繋げたい。
②Sheet1とSheet2の差異を分かる形で表示したい。(色替え、C列に何らかの表示等問いません。)
③できればヘッダーも表示させたい。
(例)
●Sheet1
商品コード
0001
0002
0003
0004

●Sheet2
商品コード,商品名,入数
0001,魚,2
0003,肉,5
0004,水,1

●求める結果
商品コード,商品名,入数,フラグ
0001,魚,2,○
0002,,,×
0003,肉,5,○
0004,水,1,○
どうぞ、ご教示のほど、よろしくお願いいたします。

先輩方、教えてください。
Excel2003ですが、
いろいろやってみましたがうまくいきません。
■前提
○sheet1とseet2に件数の異なる商品一覧シートがあります。

(Sheet1の方が数件多い)
○sheet1は、A列に商品コードのみ値が入っている。
○sheet2は、A列に商品コード、B列に商品名、C列に入数が入っている。
○結果が出せれば関数、VBAは問いません。

■行いたいこと
①A列にある商品コードをsheet1、sheet2から探し、sheet2にあるb列~c列をA列に繋げたい。
②Sheet1とSheet2の差異を分かる形で表示した...続きを読む

Aベストアンサー

VLOOKUP関数で拾ってきて、対象が無くてエラーになったら空白、そして「×」を表示させればよい。

>■行いたいこと
>①A列にある商品コードをsheet1、sheet2から探し、sheet2にあるb列~c列をA列に繋げたい。
 ↓
 ①sheet1のA列にある商品コードをsheet2から探し、該当する行のB列とC列の値をsheet1のB列とC列に表示したい。
だろうと脳内変換してみた。

sheet1のB列には、
 =VLOOKUP(A1,sheet2!A:A,2,0)
sheet1のC列には、
 =VLOOKUP(A1,sheet2!A:A,3,0)
の数式を基本とし、エラーに対する数式を加え、
 =IF(ERROR(VLOOKUP(A1,sheet2!A:A,2,0)),"",VLOOKUP(A1,sheet2!A:A,2,0))
 =IF(ERROR(VLOOKUP(A1,sheet2!A:A,3,0)),"",VLOOKUP(A1,sheet2!A:A,3,0))
とする。
sheet1のD列には、B列またはC列に価があれば「〇」なければ「×」を表示する数式をIF関数を使って記述すればよい。
(この数式は省略。簡単でしょ。)

VLOOKUP関数で拾ってきて、対象が無くてエラーになったら空白、そして「×」を表示させればよい。

>■行いたいこと
>①A列にある商品コードをsheet1、sheet2から探し、sheet2にあるb列~c列をA列に繋げたい。
 ↓
 ①sheet1のA列にある商品コードをsheet2から探し、該当する行のB列とC列の値をsheet1のB列とC列に表示したい。
だろうと脳内変換してみた。

sheet1のB列には、
 =VLOOKUP(A1,sheet2!A:A,2,0)
sheet1のC列には、
 =VLOOKUP(A1,sheet2!A:A,3,0)
の数式を基本とし、エラーに対する数式を加え、
 =I...続きを読む

Q入力シートを領して分類名別にsheetを作りたいです。

すみません、教えてください。
入力シートを利用して分類別(C列)にシートを作成しました。
例えば
4/5の「1.事務用品」を別のシートにシート名を1.事務用品と作成して
このシートに転送したいです。
関数の作成方法を教えたください。
宜しくお願い致します。

Aベストアンサー

関数でシートを作成することはできません(たぶん)。よって、VBAになってしまいます。
こんな感じでしょうか?

Sub sample()
Dim wsI As Worksheet
Dim wsO As Worksheet
Dim i As Long
Set wsI = Sheets("入力シート")
For i = 3 To wsI.Cells(Rows.Count, "C").End(xlUp).Row
On Error Resume Next
Set wsO = Sheets(wsI.Cells(i, "C").Value)
If Err.Number <> 0 Then
On Error GoTo 0
Sheets("入力シート").Copy After:=Sheets(Sheets.Count)
Set wsO = ActiveSheet
wsO.Name = wsI.Cells(i, "C").Value
wsO.Range(Cells(3, "C"), Cells(Rows.Count, "C")). _
ColumnDifferences(wsO.Cells(i, "C")).EntireRow.Delete
wsO.Range("A1").Select
End If
On Error GoTo 0
Next
End Sub

関数でシートを作成することはできません(たぶん)。よって、VBAになってしまいます。
こんな感じでしょうか?

Sub sample()
Dim wsI As Worksheet
Dim wsO As Worksheet
Dim i As Long
Set wsI = Sheets("入力シート")
For i = 3 To wsI.Cells(Rows.Count, "C").End(xlUp).Row
On Error Resume Next
Set wsO = Sheets(wsI.Cells(i, "C").Value)
If Err.Number <> 0 Then
On Error GoTo 0
Sheets("入力シート").Copy After:=Sheets(Sheets...続きを読む

QAuto_Openの記述方法を教えて下さい

Function LoginName() As String
LoginName = CreateObject("WScript.Network").UserName
End Function

上記の内容をエクセル起動に実行されるようにしたいのですが
Auto_Openの記述方法が分からないので教えて下さい

Aベストアンサー

LoginName 関数を Workbook_Openイベントプロシジャに書きたいということですか?百歩譲っても Workbook_Open イベントプロシジャに書くのは、LoginName関数を呼び出して、それを表示する等の命令ではないでしょうか?

ブックを開いたときに、ユーザ名を表示するような場合は、こんな感じになります。
Workbook_Openイベントプロシジャを書く場所は、ThisWorkbookの下です。

Private Sub Workbook_Open()
MsgBox LoginName
End Sub

Function LoginName() As String
LoginName = CreateObject("WScript.Network").UserName
End Function

QExcel 他のbookの複数のシートを取り込む方法について相談

皆様
Excelについて、お知恵をお貸しください。
内容は次のような内容です。

条件
毎日作成されるExcelのファイルがあります。
20161128.xls(ファイル名はその日の日付になります。)で、シートは5つあります。シート名は1~5で固定です。
各シートはA3:E100まで数字と空欄が入っています。

実施したいこと
別のExcelのファイルの1つのシートに集約したい。
また、集約するシートのExcelファイルを開くときに集約を実行したい。
 例えば
  ①20161128.xleのシート1の内容を取り込み先のシートのA1:E100までコピー
  ②20161128.xleのシート2の内容を取り込み先のシートのF1:J100までコピー
  ③20161128.xleのシート3の内容を取り込み先のシートのH1:L100までコピー
   これをシート5までくりかえしたい

単純な内容ですが、できなくて困っています。
ぜひお知恵をお貸しください。また、同様の質問を探したのですが、見付けきれませんでした。
こちらを参照のような回答でもかまいません。
お手間をとらせますが、よろしくお願いします。

皆様
Excelについて、お知恵をお貸しください。
内容は次のような内容です。

条件
毎日作成されるExcelのファイルがあります。
20161128.xls(ファイル名はその日の日付になります。)で、シートは5つあります。シート名は1~5で固定です。
各シートはA3:E100まで数字と空欄が入っています。

実施したいこと
別のExcelのファイルの1つのシートに集約したい。
また、集約するシートのExcelファイルを開くときに集約を実行したい。
 例えば
  ①20161128.xleのシート1の内容を取り込み先のシ...続きを読む

Aベストアンサー

集計用のブックを開く時に集計したいとのことですが、集計対象のブック(日付のブック)は、どのように指定するのでしょうか?とりあえず、「当日日付のブックを集計する」で良ければ、こんな感じです。

集計用ブックのThisWorkbookモジュールのWorkbook_Openイベントプロシジャに次のVBAを張り付けて保存してください。集計用ブックを開くと集計結果が表示されます。
ちなみに、日付のブックと集計用のブックと同じフォルダにあるものとします。

Private Sub Workbook_Open()
Dim myRng As String
Dim ShNo As Long
Dim r As Long
Cells.Clear
For ShNo = 1 To 5
myRng = "'" & ThisWorkbook.Path & "\[" & Format(Now(), "yyyymmdd") & ".xlsx]" & ShNo & "'!A1"
r = (ShNo - 1) * 5 + 1
Range(Cells(1, r), Cells(100, r + 4)).Formula = "=IF(" & myRng & "="""",""""," & myRng & ")"
Next ShNo
Cells.Copy
Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A1").Select
End Sub

集計用のブックを開く時に集計したいとのことですが、集計対象のブック(日付のブック)は、どのように指定するのでしょうか?とりあえず、「当日日付のブックを集計する」で良ければ、こんな感じです。

集計用ブックのThisWorkbookモジュールのWorkbook_Openイベントプロシジャに次のVBAを張り付けて保存してください。集計用ブックを開くと集計結果が表示されます。
ちなみに、日付のブックと集計用のブックと同じフォルダにあるものとします。

Private Sub Workbook_Open()
Dim myRng As String
Dim ...続きを読む

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

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

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


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

このカテゴリの人気Q&Aランキング

おすすめ情報