Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10261 / 13644 ツリー ←次へ | 前へ→

【22692】複数ファイルでのデータ pepper 05/2/28(月) 17:38 質問[未読]
【22706】Re:複数ファイルでのデータ ponpon 05/2/28(月) 22:07 発言[未読]
【22711】Re:複数ファイルでのデータ かみちゃん 05/3/1(火) 7:33 回答[未読]
【22714】Re:複数ファイルでのデータ ichinose 05/3/1(火) 8:17 発言[未読]
【22738】Re:複数ファイルでのデータ ponpon 05/3/1(火) 22:35 発言[未読]
【22740】Re:複数ファイルでのデータ かみちゃん 05/3/1(火) 22:47 回答[未読]
【22741】Re:複数ファイルでのデータ ponpon 05/3/1(火) 22:56 発言[未読]
【22849】Re:複数ファイルでのデータ pepper 05/3/4(金) 21:56 お礼[未読]

【22692】複数ファイルでのデータ
質問  pepper  - 05/2/28(月) 17:38 -

引用なし
パスワード
   はじめまして。VBA初心者です。
複数ファイル間でのやりとりについてわかりません。

質問は01〜10までのファイルがあり、一つのファイルに一つのシートと
なっています。シート名はファイル名と同じです。
そこでこれらから セルH180 の値をコピーし Book1に

file H180
01  123
02  155
03  193
 …

としたいのですがさっぱりです。どなたかご教示願います。

【22706】Re:複数ファイルでのデータ
発言  ponpon  - 05/2/28(月) 22:07 -

引用なし
パスワード
   ▼pepper さん:
ponponです。こんばんは。
 手作業でするのをコードにしてみました。
 fileが1から9だとloopできるので、こんな風になります。
 参考にしてください。
Sub test()
Dim A As Range
Application.ScreenUpdating = False
 For i = 1 To 9
  Workbooks.Open Filename:="D:\文書\test\0" & i & ".xls" 'ファイルの場所
  'Workbooks.Open Filename:="D:\文書\test\10.xls"
   With Workbooks("Book1.xls")
     Set A = .Sheets("sheet1").Range("A1")
     A.Value = "file"
     A.Offset(, 1).Value = "H180"
     A.Offset(i, 0).Value = "0" & i
     A.Offset(i, 0).NumberFormatLocal = "@"
     A.Offset(i, 1).Value = Workbooks("0" & i & ".xls").Sheets(1).Range("H180").Value
   End With
  Workbooks("0" & i & ".xls").Close
 
 Next
Application.ScreenUpdating = True

End Sub


>はじめまして。VBA初心者です。
>複数ファイル間でのやりとりについてわかりません。
>
>質問は01〜10までのファイルがあり、一つのファイルに一つのシートと
>なっています。シート名はファイル名と同じです。
>そこでこれらから セルH180 の値をコピーし Book1に
>
>file H180
> 01  123
> 02  155
> 03  193
> …
>
>としたいのですがさっぱりです。どなたかご教示願います。

【22711】Re:複数ファイルでのデータ
回答  かみちゃん  - 05/3/1(火) 7:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>質問は01〜10までのファイルがあり、一つのファイルに一つのシートと
>なっています。シート名はファイル名と同じです。
>そこでこれらから セルH180 の値をコピーし Book1に

すでにponponさんからもコメントが出ていますが、fileとセル番号の条件に汎用性を持たせてみました。

Book1ではなく、マクロを記述したブックに、file、セル番号の条件をあらかじめ
記述しておくと、その隣のセルに値を書き出す方法です。
この際、ブックの存在とシートの存在をチェックして、存在しなければその旨の
メッセージを出力するようにしています。

Option Explicit

Sub Macro1()
 Dim WorkbookPath As String, OpenFileName As String
 Dim TargetAddress As String, TargetSheetName As String
 Dim MaxRow As Long, RowNo As Long
 Dim GetValue As String
 
 'ブックのパス
 '(例)このマクロが書かれたブックと同じフォルダの場合
 WorkbookPath = ThisWorkbook.Path
 '(例)特定のフォルダの場合(末尾に\はつけない)
 'WorkbookPath = "C:\My Documents"
 '抽出対象セル
 TargetAddress = Range("B1").Value
 '最大行
 MaxRow = Range("A1").CurrentRegion.Rows.Count
 For RowNo = 2 To MaxRow
  '対象ブック名の取得
  OpenFileName = WorkbookPath & "\" & Cells(RowNo, 1).Value & ".xls"
  '対象シート名の取得
  TargetSheetName = Cells(RowNo, 1).Value
  '指定されたブックが存在するか
  If Dir(OpenFileName) <> "" Then
   '指定されたブックを開く
   Workbooks.Open Filename:=OpenFileName
   '指定されたシートが存在するか
   If IsSheet(TargetSheetName) Then
    '指定されたシートを選択する
    Sheets(TargetSheetName).Select
    '抽出対象セルで指定されたセルの値を取得する。
    GetValue = Range(TargetAddress).Value
   Else
    GetValue = "シートが見つかりません"
   End If
   '指定されたブックを閉じる
   ActiveWorkbook.Close
   '取得した値を書き込む
   Cells(RowNo, 2).Value = GetValue
  Else
   Cells(RowNo, 2).Value = "ファイルが見つかりません"
  End If
 Next
End Sub

'シート名存在チェック
Function IsSheet(strSheetName As String) As Boolean
 Dim ws As Worksheet
 'ブック内のシート名の比較を行う
MsgBox strSheetName
 
 For Each ws In Worksheets
  '.Nameプロパティのシート名と受け取ったstrSNAMEを比べる
  If ws.Name = strSheetName Then
   IsSheet = True '名前が一致したのでTrueをセット
   Exit Function  'もうすること無いので関数を抜ける
  End If
 Next
 '一つも一致しなかったので、Falseをセット
 IsSheet = False
End Function

どうしても、Book1やマクロを記述したブックと別の新規ブックなどであれば、一
工夫必要かと思います。

【22714】Re:複数ファイルでのデータ
発言  ichinose  - 05/3/1(火) 8:17 -

引用なし
パスワード
   おはようございます。

参照セル範囲が少ないとリンクが処理速度が速かったので。

以下のコードを含むブックと参照するブック(01.xls〜10.xls)は、同じフォルダにあると言う仮定です。
尚、出力は、アクティブシートに対して行っています。

'=======================================================
Sub test()
  Dim cnt As Long
  Dim r_add1 As String
  Dim sht As String
   cnt = 10 '←ここを100にすれば、01.xls〜100.xlsまで処理します
   Range("a1:b1").Value = Array("file", "H180")
'                       ↑H180を変更すれば(例.V200)
'                       指定セルを参照します
   r_add = Range(Range("b1").Value).Address
   For idx = 2 To cnt + 1
    With Cells(idx, 1)
     .Value = idx - 1
     .NumberFormat = "00"
     sht = .Text
     With .Offset(0, 1)
       .Formula = "='" & ThisWorkbook.Path & _
             "\[" & sht & ".xls]" & sht & _
               "'!" & r_add
       '.Value = .Value
       End With
     End With
    Next
End Sub

確認してみて下さい。

【22738】Re:複数ファイルでのデータ
発言  ponpon  - 05/3/1(火) 22:35 -

引用なし
パスワード
   ▼ichinose さん:
ponponです。こんばんは。
またまた、横から失礼します。

>おはようございます。
>
>参照セル範囲が少ないとリンクが処理速度が速かったので。
>
>以下のコードを含むブックと参照するブック(01.xls〜10.xls)は、同じフォルダにあると言う仮定です。
>尚、出力は、アクティブシートに対して行っています。
>
>'=======================================================
>Sub test()
>  Dim cnt As Long
>  Dim r_add1 As String
>  Dim sht As String
>   cnt = 10 '←ここを100にすれば、01.xls〜100.xlsまで処理します
>   Range("a1:b1").Value = Array("file", "H180")
>'                       ↑H180を変更すれば(例.V200)
>'                       指定セルを参照します
>   r_add = Range(Range("b1").Value).Address
>   For idx = 2 To cnt + 1
>    With Cells(idx, 1)
>     .Value = idx - 1
>     .NumberFormat = "00"
            ↑
          書式を「文字列」にするまでは気がついたのですが、
          「00」にすればbook名が10を超えても大丈夫ですね。   


>     sht = .Text
>     With .Offset(0, 1)
>       .Formula = "='" & ThisWorkbook.Path & _
>             "\[" & sht & ".xls]" & sht & _
>               "'!" & r_add
              ↑
      これだとリンク貼り付けになりますよね。
      はじめは、これも考えたのですが・・・
      リンク貼り付けは、bookを開かなくても大丈夫なのでしょうか?
      txtファイルは、直接開かないで、内部で開いて、データの追加や
      削除ができるようですが、bookの場合はどうなのでしょうか?
      セルの値を取得するには、bookを開かないとだめですよね?
      bookでも大丈夫なのかな(^^;


>       '.Value = .Value
          ↑
      こいつがまたわからない。あちこちの掲示板で見るのですが
      「なんじゃこら」って感じです。どんな意味があるのでしょうか?
      いつもすみません。よろしくお願いします。

>       End With
>     End With
>    Next
>End Sub
>
>確認してみて下さい。

【22740】Re:複数ファイルでのデータ
回答  かみちゃん  - 05/3/1(火) 22:47 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>      これだとリンク貼り付けになりますよね。

.Value = .Value
を有効にする(ichinoseさんのコードは、コメント文になっていますが)ことに
よりリンク貼り付けになりません。

>      「なんじゃこら」って感じです。どんな意味があるのでしょうか?

コメント文にせずに、実行すると、意味がわかると思います。
値複写のようなものです。

あと、蛇足ですが、掲示板中の引用は、必要最小限のものでもよろしいかと思いま
す。ツリー表示で、一連の内容は、わかりますから。

【22741】Re:複数ファイルでのデータ
発言  ponpon  - 05/3/1(火) 22:56 -

引用なし
パスワード
   ▼かみちゃん さん:
 ponponです。こんばんは。


>.Value = .Value
>を有効にする(ichinoseさんのコードは、コメント文になっていますが)ことに
>よりリンク貼り付けになりません。
 
なるほど、わかりました。ありがとうございました。

>あと、蛇足ですが、掲示板中の引用は、必要最小限のものでもよろしいかと思いま
>す。ツリー表示で、一連の内容は、わかりますから。

これから気をつけます。

【22849】Re:複数ファイルでのデータ
お礼  pepper  - 05/3/4(金) 21:56 -

引用なし
パスワード
   みなさんいろいろとありがとうございました。
データはおかげさまで処理することができました。

ありがとうございました。

10261 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free