Excel VBA質問箱 IV

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

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


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

【31509】集計シートに別のExcelファイルからコピー貼り付けについて れい 05/11/24(木) 1:12 質問[未読]
【31510】Re:集計シートに別のExcelファイルからコピ... かみちゃん 05/11/24(木) 7:31 回答[未読]
【31516】Re:集計シートに別のExcelファイルからコピ... Jaka 05/11/24(木) 12:47 回答[未読]
【31519】Re:集計シートに別のExcelファイルからコピ... Kein 05/11/24(木) 13:30 回答[未読]
【31541】Re:集計シートに別のExcelファイルからコピ... れい 05/11/24(木) 19:15 お礼[未読]

【31509】集計シートに別のExcelファイルからコピ...
質問  れい  - 05/11/24(木) 1:12 -

引用なし
パスワード
   こんばんわ。
初めて投稿します。初歩的な質問で申し訳ありませんがご教授願います。

表題の件の通り、以下を行いたい考えてます。

1.集計シートを開いた状態で別のExcelファイルを開く(Excelファイルを選択式にしたい)

  'フォルダ選択ダイアログの表示
  Set myObj = CreateObject("Shell.Application"). _
  BrowseForFolder(0, "フォルダを選択してください", 0)
  If myObj Is Nothing Then Exit Sub
 
  myDir = myObj.Items.Item.Path
  If Right(myDir, 1) <> "\" Then myDir = myDir & "\"

これでフォルダーを選択できるのは分かりました。
選択したフォルダーから任意のExcelファイルを開きたいのです;;

2.1.にて開いたExcelファイルの指定のセルをコピー

  '指定のセルをコピー
  Range("B18:D28").Select
  Selection.Copy

これでよろしいでしょうか??

3.集計シートに2.のコピーしたセルを指定のセルに貼り付けたい。

  Windows("集計シート.xls").Activate
  Range("B4").Select
  ActiveSheet.Paste

このまま繋げて問題ないでしょうか??

4.1.のファイルの別シートから指定セルをコピーし、集計シートに貼り付ける
 ※2.〜3.を3回ほど繰り返す作業になります。

上記記載の内容を繋げて処理するやり方を、お手数ですが教えてください。

宜しくお願い致します。

【31510】Re:集計シートに別のExcelファイルからコ...
回答  かみちゃん E-MAIL  - 05/11/24(木) 7:31 -

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

>選択したフォルダーから任意のExcelファイルを開きたいのです;;

任意のファイルとは、ファイルを開くダイアログボックスで選択したいということですか?
それであれば、GetOpenFilename メソッドのヘルプをご確認ください。

>2.1.にて開いたExcelファイルの指定のセルをコピー
>
>  '指定のセルをコピー
>  Range("B18:D28").Select
>  Selection.Copy
>
>これでよろしいでしょうか??
>
>3.集計シートに2.のコピーしたセルを指定のセルに貼り付けたい。
>
>  Windows("集計シート.xls").Activate
>  Range("B4").Select
>  ActiveSheet.Paste
>
>このまま繋げて問題ないでしょうか??

コピー元セルに数式がないならばそれでもいいですが、
リンク式を埋め込んで、値化することで、ファイルを開かずに値だけ取得すること
もできます。
参考にそのコードを書いておきます。
(コピー元ブックのフルパスがstrSelectFileNameとして、それのSheet2シートの
値を「集計シート.xls」のSheet1に取得する例です。)

Sub Macro1()
 
 strSelectFileName = "選択したファイル名(フルパス)"
 strPath = Mid(strSelectFileName, 1, InStrRev(strSelectFileName, "\"))
 strFileName = Mid(strSelectFileName, InStrRev(strSelectFileName, "\") + 1)
 
 Windows("集計シート.xls").Activate
 Sheets("Sheet1").Activate
 For C = 2 To 4 'B列〜D列
  For R = 18 To 28 '8行目〜28行目
   With Cells(R - 14, C)
    .Formula = "='" & strPath & "\[" & strFileName & "]Sheet2'!" & Cells(R, C).Address
    .Value = .Value
   End With
  Next
 Next
End Sub

【31516】Re:集計シートに別のExcelファイルからコ...
回答  Jaka  - 05/11/24(木) 12:47 -

引用なし
パスワード
   Dim OPnWB As Workbook, 開くファイルのフルパス As String

GetOpenFilenameに付いては、 [#30257]
因みに、返り値判定は、
変数がstring型だと XX = "False"
変数がVariant型だと XX = "False"

'GetOpen・・でフルパス取得後、ここで開く。ついでに変数にセット。
Set OPnWB = Workbooks.Open(開くファイルのフルパス)

'ブックとシートをはっきりと指定する。
OPnWB.Sheets("何とかシート").Range("B18:D28").Copy
Workbooks("集計シート.xls").Sheets("ぺけぺけシート").Range("B4").PasteSpecial

繰返しは、どう繰り返すのか不明ですのでなんとも言えないです。

【31519】Re:集計シートに別のExcelファイルからコ...
回答  Kein  - 05/11/24(木) 13:30 -

引用なし
パスワード
   開くブックのどのような名前のシートから値を引っ張るのか、
また、マクロ実行ブックの中のどのような名前のシートに値を入力
するのか分かりませんが・・

Sub MyLink()
  Dim MyObj As Oject
  Dim Pt As Long
  Dim MyDir As String, MyF As String, Lk As String

  Set MyObj = CreateObject("Shell.Application"). _
  BrowseForFolder(0, "フォルダを選択してください", 0)
  If MyObj Is Nothing Then Exit Sub
  MyDir = myObj.Items.Item.Path
  ChDit MyDir: Set MyObj = Nothing
  MyF = Application _
  .GetOpenFilename("エクセルブック(*.xls),*.xls")
  If MyF = "False" Then Exit Sub
  Pt = InStrRev(MyF, "\")
  Lk = "='" & Left$(MyF, Pt) & "[" & Dir(MyF) & "]Sheet1'!B18"
  With ThisWorkbook.Sheets("集計").Range("B4:D14")
   .Formula = Lk
   .Value = .Value
  End With
End Sub

概ね、こんな感じのコードになると思います。

【31541】Re:集計シートに別のExcelファイルからコ...
お礼  れい  - 05/11/24(木) 19:15 -

引用なし
パスワード
   かみちゃんさん、Jakaさん、Kein さんありがとうございます。

記載して頂いた内容を試してきます。
基礎が出来ていないので、質問の内容・意図が分かりづらく申し訳ありません。

また、一部用語(フルパス等)が分からないところありましたので(汗)、調べてきます。
それでも分からない点ありましたら、また質問させてください。

みなさん本当にありがとうございました。

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