ExcelVBA変数でのファイルのOpen方法

このQ&Aのポイント
  • ExcelVBAで変数を使用してファイルを開く方法を教えてください。何年分かのファイルの特定の範囲の値をコピーして他のファイルに貼り付けたい場合、どのようにプロシージャを作成すればよいでしょうか。
  • ExcelVBAで変数を使用してファイルを開く方法を教えてください。特定のフォルダ内にある複数のファイルから特定の範囲の値をコピーし、他のファイルに貼り付けたい場合、具体的な手順を教えてください。
  • ExcelVBAで変数を使用してファイルを開く方法を教えてください。特定のフォルダ内の複数のファイルから特定の範囲の値を抽出し、他のファイルに貼り付けたい場合、どのようなコードを使用すればよいでしょうか。
回答を見る
  • ベストアンサー

ExcelVBA変数等でのファイルのOpen方法

ExcelVBAで、変数でのファイルのOpen方法を教えてください。 以下のフォルダ構造とします。 '////////////////////////////////////////////////////// マクロファイル.xls 1フォルダA  ∟1999ファイルA.xls  ∟2000ファイルA.xls  ∟2001ファイルA.xls  ∟2002ファイルA.xls  ∟2003ファイルA.xls  ∟2004ファイルA.xls ・・・ 2フォルダB  ∟1999ファイルB.xls  ∟2000ファイルB.xls  ∟2001ファイルB.xls  ∟2002ファイルB.xls  ∟2003ファイルB.xls  ∟2004ファイルB.xls ・・・ 3フォルダC  ∟結果ファイルC.xls '////////////////////////////////////////////////////// マクロファイル.xlsのシートにコンボボックスとボタンを配置します。 コンボボックスで【2001】を選択した場合は、 前後1年…合わせて合計3年分のファイルの「A5~A25」の値が、 「結果ファイルC.xls」にコピーされるようにしたいのです。 コピー内容や範囲が多く1つのプロシージャーに収まり切りませんでした。 そこで「結果ファイルC.xls」ファイルを1つめのプロシージャで開き、 2つめのプロシージャで残りの処理を実行しようとしたのですが、 変数、コンボボックスの値でのファイルを開く方法がわからず困っており、 どなたかお知恵をお貸し下さい。 以下のようなコードを書いてみましたがエラーとなりました。 '////////////////////////////////////////////////////// Dim vTgYear As Variant Dim myFLName1 As String, sWbkSubName1 As String Dim myFLName2 As String, sWbkSubName2 As String, SubName As String, vTgYear = ComboBox1.Value For i = -1 To 1 sWbkSubName1 = "3_フォルダC\結果ファイルC.xls" myFLName1 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName1 SubName = "vTgYear + i & _ファイルA.xls" sWbkSubName2 = "1_フォルダA & SubName" myFLName2 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName2 (実行コード中略) Next i '////////////////////////////////////////////////////// 今回はファイルの開き方だけなので、実行コードを省略させていただきました。 初歩的な質問かと思いますが、何卒お力をお貸しいただけますと幸いです。 よろしくお願い致します。

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

  • ベストアンサー
回答No.1

こんにちは。 http://www016.upp.so-net.ne.jp/cheetah/xlvba/Excel/Workbook/Workbook07.html 「ブックを連続的に開く(For文を使用)」 http://www016.upp.so-net.ne.jp/cheetah/xlvba/Excel/Worksheet/Worksheet04.html 「シートをコピーする」 を組み合わせてみるのはどうでしょうか。 http://www016.upp.so-net.ne.jp/cheetah/xlvba/Excel/Range/index.html にはセルに関する方法もあります。^.^

参考URL:
http://www016.upp.so-net.ne.jp/cheetah/xlvba/

その他の回答 (2)

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.3

minminwamidori さん 変数と定数が理解できていないような気がします。 例)SubName の値がおかしくなります。   SubName = "vTgYear + i & _ファイルA.xls"     → "vTgYear + i & _ファイルA.xls" がそのままSubName に設定されます。   SubName = vTgYear + i & "ファイルA.xls"     → "2001ファイルA.xls" がSubName に設定されます。 以下、プログラムを修正(命令数をコンパクトにしてあります)しました。  vTgYear = ComboBox1.Value  For I = -1 To 1   Workbooks.Open Filename:=ThisWorkbook & "\3フォルダC\結果ファイルC.xls"   SubName = vTgYear + I & "ファイルA.xls"   Workbooks.Open Filename:=ThisWorkbook.Path & "\1フォルダA\" & SubName       (実行コード中略)  Next I ご確認下さい。

minminwamidori
質問者

お礼

私の書き方が悪かったです。申し訳ありません。その後自力で解決できました。ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

パス名は「フォルダ\フォルダ\…\ファイル名」ですよね。 >myFLName1 = ThisWorkbook.Path & sWbkSubName1 これだと、自ブックのフォルダの最後と、"3_フォルダC・・・"の 間に"\"が入りません。自ブックがルートディレクトリならOK ですが… >SubName = "vTgYear + i & _ファイルA.xls" 気持ちは分かりますが、"vTgYear"で始まるパスなんか無いでしょ? SubName = CStr(vTgYear + i) & "_ファイルA.xls" このように数値(計算結果)を文字列化(CStr)し、固定の文字列と 組み合わせなければいけません。""の内側は単なる文字列で 計算や関数の効果は期待できません。 >myFLName2 = ThisWorkbook.Path & sWbkSubName1 せっかくsWbkSubName2に年度のファイル名を作ったのに無視して sWbkSubName1を使うんですか? 以下はサンプルです。 Dim 親パス As String 親パス = ThisWorkbook.Path '★親パスの最後が必ず"\"になるようにする If Right(親パス, 1) <> "\" Then 親パス = 親パス & "\" '★以下はForループの前に行う vTgYear = ComboBox1.Value '★同上 結果ファイルC.xlsを3回も開かないこと sWbkSubName1 = "3_フォルダC\結果ファイルC.xls" '★\付ける myFLName1 = 親パス & sWbkSubName1 Workbooks.Open Filename:=myFLName1 For i = -1 To 1   '★計算結果と固定文字列を結合する   SubName = CStr(vTgYear + i) & "_ファイルA.xls"   sWbkSubName2 = "1_フォルダA\" & SubName" '★\付ける   '★sWbkSubName1ではなくsWbkSubName2を使う   myFLName2 = 親パス & sWbkSubName2   Workbooks.Open Filename:=myFLName2 尚、変数名に日本語が使えるので、コピペしても動きます。

minminwamidori
質問者

お礼

遅くなりまして申し訳ありません。その後自力で解決させることができました。ありがとうございました。

関連するQ&A

  • ExcelVBAコードの編集方法を教えてください

    「ExcelVBA別フォルダにあるブックのコピー方法」 http://okwave.jp/qa/q8488933.html 上記質問でコードを教えていただきました。 自分で編集しようと思ったのですが、どうにもうまくいきません。 編集したい内容としては、 出力する「ファイルC」に複数のシートがあるので、 それぞれのシートを指定して値をコピーしたいのです。 でも、別のシート名の指定がうまくいきません。 シートはフォーマットが決まったものが配置されているのですが、 1つのシートごとに数が異なります。 '////////////////////////////////////////////////////// Private Sub CommandButton1_Click() Dim vTgYear As Variant Dim sht結果 As Worksheet, sht上小 As Worksheet Dim sht保存 As Worksheet Dim sht元データ As Worksheet Dim sMyDir As String Dim sWbkFullName As String Dim sWbkName2 As String Dim sShtName As String Dim sMsg As String Dim i As Long Dim seru As Range vTgYear = ComboBox1.Value '  ● If Not vTgYear Like "####" Then MsgBox "年次を指定してからやり直し", vbExclamation Exit Sub End If Select Case vTgYear Case 1999 To 2012 '  ● Case Else MsgBox "1999~2012の間で年次を指定してからやり直し", vbExclamation '  ● Exit Sub End Select sMyDir = ThisWorkbook.Path & "\" With Application .ScreenUpdating = False '    .DisplayAlerts = False .Calculation = xlCalculationManual End With ' ' ファイルC_結果.xls を開く sWbkFullName = sMyDir & "3_フォルダC\ファイルC_結果.xls" '● sShtName = "地域A" '● On Error Resume Next Set sht結果 = Workbooks.Open(sWbkFullName).Sheets(sShtName) On Error GoTo 0 If sht結果 Is Nothing Then MsgBox sWbkFullName & vbLf & sShtName & vbLf & "開くことが出来ませんでした", vbExclamation Exit Sub End If ' ' 出力先のセル範囲を値消去 sht結果.Range("D7:F44,H7:J44,L7:L44,N7:Q44").ClearContents ' ' 前年~翌年、ループ For i = -1 To 1 ' ' 1_フォルダA sWbkFullName = sMyDir & "1_フォルダA\" & vTgYear + i & "_ファイルA.xls" sShtName = "Sheet1" On Error Resume Next Set sht元データ = Workbooks.Open(sWbkFullName).Sheets(sShtName) On Error GoTo 0 If sht元データ Is Nothing Then sMsg = sMsg & vbLf & "●" & sWbkFullName & vbLf & sShtName Else sht結果.Range("E7:E25").Offset(, i).Value = sht元データ.Range("C5:C23").Value sht結果.Range("E26:E44").Offset(, i).Value = sht元データ.Range("D5:D23").Value sht元データ.Parent.Close SaveChanges:=False Set sht元データ = Nothing End If ' ' 2_フォルダB sWbkFullName = sMyDir & "2_フォルダB\" & vTgYear + i & "_ファイルB.xls" '● sShtName = "Sheet1" '● On Error Resume Next Set sht元データ = Workbooks.Open(sWbkFullName).Sheets(sShtName) On Error GoTo 0 If sht元データ Is Nothing Then sMsg = sMsg & vbLf & "●" & sWbkFullName & vbLf & sShtName Else sht結果.Range("I7:I25").Offset(, i).Value = sht元データ.Range("C5:C23").Value sht結果.Range("I26:I44").Offset(, i).Value = sht元データ.Range("C25:C43").Value sht元データ.Parent.Close SaveChanges:=False Set sht元データ = Nothing End If Next i ' ' "ファイルC_2006~2008年結果.xls"形式の名前を付け保存して閉じる Application.DisplayAlerts = False sht結果.SaveAs Filename:=sMyDir & "3_フォルダC\" & ComboBox1.Value & "_ファイルC.xls" '  ● Application.DisplayAlerts = True With Application .ScreenUpdating = True '    .DisplayAlerts = True .Calculation = xlCalculationAutomatic End With Set sht結果 = Nothing If sMsg = "" Then MsgBox Label1.Caption & vbLf & "処理完了", vbInformation Else MsgBox sMsg & vbLf & "開くことが出来ませんでした", vbExclamation End If End Sub '////////////////////////////////////////////////////// 文字数制限のため全てのコードを書けなかったのですが、 (1)フォルダは複数ある (2)データ元のコピー方法は3種類   (1)コンボボックスで選択した前後2年のファイルの値をコピーする   (2)コンボボックスで選択した年次のみのファイルの値をコピーする   (3)範囲がどの結果の範囲に対しても同一の場合がある (1)(2)は教えていただいたコードでクリアしているのですが、 前の質問の時に結果のファイルにシートが複数あるのをお伝えするのを忘れてしまいました。 結果ファイルの複数のシートにコピーするにはどのように編集したらよいのか教えていただけますと幸いです。 締め切りが近くとても焦っています。 自分でどうにかできないのがお恥ずかしいのですが、どうかよろしくお願い致します。

  • A1セル入力値をファイル名先頭に追加したい。

    マクロ初心者で色々な事例を組み合わせて次のマクロを 作成しました。 A.xlsを開いて一部加工したファイルをB.xlsで保存し さらに一部を消去しC.xlsで保存するマクロです。 今回、B.xlsおよびC.xlsの先頭にA.xlsのA1セルに入力 された6桁の数字を付加して保存したいのですが・・・。 例えばA1セルが123456の時は 123456B.xls 123456C.xls どなたか教えてください。 現在のマクロ Sub Macro2() Dim strFilePath As String Dim strFileName As String Dim flg As Boolean '◆保存するパスの設定 strFilePath = ThisWorkbook.Path & "\" '◆保存するファイル名の指定 strFileName = "B" On Error Resume Next Workbooks(strFileName).Activate ThisWorkbook.SaveAs strFilePath & strFileName '◆個人情報消去 Range("D42:E49").Select Selection.ClearContents Range("d1").Select strFileName = "C" ThisWorkbook.SaveAs strFilePath & strFileName Application.Quit End Sub

  • ExcelVBA別フォルダにあるブックのコピー方法

    ExcelVBAでデータを条件に応じてコピーしたいと思っています。 同一階層に「VBAファイル.xls」「1_フォルダA」「2_フォルダB」「3_フォルダC」があります。 「1_フォルダA」と「2_フォルダB」には年代別に分かれたファイルがあります。 ファイルとフォルダの構造は以下の通りです。 VBAファイル.xls 1_フォルダA  ∟1999_ファイルA.xls  ∟2000_ファイルA.xls  ∟2001_ファイルA.xls  ∟2002_ファイルA.xls  ∟2003_ファイルA.xls  ∟2004_ファイルA.xls  ∟2005_ファイルA.xls  ∟2006_ファイルA.xls  ∟2007_ファイルA.xls  ∟2008_ファイルA.xls  ∟2009_ファイルA.xls  ∟2010_ファイルA.xls  ∟2011_ファイルA.xls  ∟2012_ファイルA.xls 2_フォルダB  ∟1999_ファイルB.xls  ∟2000_ファイルB.xls  ∟2001_ファイルB.xls  ∟2002_ファイルB.xls  ∟2003_ファイルB.xls  ∟2004_ファイルB.xls  ∟2005_ファイルB.xls  ∟2006_ファイルB.xls  ∟2007_ファイルB.xls  ∟2008_ファイルB.xls  ∟2009_ファイルB.xls  ∟2010_ファイルB.xls  ∟2011_ファイルB.xls  ∟2012_ファイルB.xls 3_フォルダC  ∟ファイルC_結果.xls 「VBAファイル.xls」では添付の画像のような「ActiveXコントロール」を設定しました。 コンボボックスで西暦を選択すると、選択した年を中心年として、 前後1年を合わせて合計3年がラベルに表示されます。 その年のファイルのデータが「ファイルC_結果.xls」にコピーされるようにしたいです。 例えば画像のように「2007」を選択した場合、 ・「2006_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のD7~D25にコピー ・「2007_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のE7~E25にコピー ・「2008_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のF7~F25にコピー ・「2006_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のH7~H25にコピー ・「2007_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のI7~I25にコピー ・「2008_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のJ7~J25にコピー というようにしたいです。 「ファイルC_結果.xls」のD/E/F列はファイルAのデータで、 D列は前年、E列は当年、F列は翌年 H/I/J列はファイルBのデータで、 H列は前年、I列は当年、J列は翌年の値をコピーして貼り付けたいです。 また、可能であれば「ファイルC_結果.xls」は原本なので、 値をコピーする際にファイル名が変更できればよりよいです。 いろいろ書いてしまい、うまく伝わっているか不安なのですが 処理するデータが多くとても困っています。 お知恵のある方、どなたか助けていただけますと幸いです。 よろしくお願いいたします。

  • ブックのopenについて

    デスクトップにファイル名「A.xls」と「B.xls」が有ります。「B.xls」はファイル名が変わるため「A.xls」のsheet1のセルA1に「B.xls」のファイル名を記載して「A.xls」と「B.xls」を共に開き「A.xls」にマクロを記述して処理をしています。この処理をする際に最初から「B.xls」を開かずにマクロでセルA1に記載したファイル名を使って「B.xls」ファイルを開くための記述を教えてください。現在のマクロの最初の部分は以下のようになっています。よろしくお願いします。 Sub Macro1() Dim nextyearbookname As String nextyearbookname = Range("A1") & ".xls"   ThisWorkbook.Activate Worksheets("sheet1").Range("B20:B21").Select Selection.Copy  Windows(nextyearbookname).Activate

  • すべてのファイルにデータを取得方法

    VBAで一覧作成を作っているですけど、ちょっと力不足のせいで、わからないところがあって、ぜひご教示ください。 フォルダにあるすべてのファイルを読み込んで、中の値を取得したいです。いろいろ方法を試して見たのですが、うまく行かないです。 こんな感じです。(一覧作成見たいもの) xlsファイル1   A  B   C     D 1 氏名 NO オーダー名  時間 に 指定されたフォルダ中のすべてファイル A   B     C (一つのファイル) 1 氏名   山田  2 No オーダー名  時間 3 01    A 1 4 02  B 1 5 03  B  1 氏名   佐藤  (二つのファイル) No オーダー名  時間 03  C 1 04  D 1 05    E 1 ・ ・ ・ の最後のファイルまでを 読み込んだら xlsファイル1を  A  B   C     D 氏名 NO オーダー名  時間 山田 01 A 1 山田 02 B 2 佐藤 03 C 1 佐藤 04 D 1 佐藤 05   E      1 ・ ・ ・ こんな感じ Dim BookName As String Dim PathName As String Dim WS1 As Worksheet Dim WS2 As Worksheet Dim no2_count As Long ’xlsファイル1 Set WS1 = Worksheets("個人一覧作成") no2_count = WS1.Cells(Rows.count, 1).End(xlUp).Row Dim i As Integer For i = 2 To no2_count Step 1 PathName = "C:\test\" BookName = Dir(PathName & "*.xls", vbNormal) Do Until BookName = "" Workbooks.Open PathName & BookName Set WS2 = Worksheets(2)   ’氏名の値を取得 WS1.Range("A" & i).Value = WS2.Cells("B,C", 2).Value Workbooks(BookName).Close    BookName = Dir() Loop Next i 初心者なので今の段階では氏名の値すら取得できないですけど、 簡単でも結構ですので、どなたは方法をご教示ください。

  • 同じフォルダ内のブックを開きコピーする方法

    いろいろチャレンジしてみたのですが どうにも行き詰っております。 ご教示頂ければ幸いです。 1つのフォルダに3つ(数は固定)のシートがあります。 フォルダ名は毎回変わります。 C:\デスクトップ\作成 ├4328457 神戸 ├作成元データ(名前は固定)←Aとします。  ├1314 電源工事(名前は毎回変わります)←Bとします。 └見積.xls(名前は固定)←今回は使いません 毎回名前の変わるBを先に開き、下記の「FileOpen」マクロで Aを開きます。 Bにあるシート(数は変動)を全て、Aにあるシート(3枚固定)の前に コピーし、Bは閉じてしまい、Aにて作業をしたいと思います。 Sub FileOpen()   Dim Wb As Workbook   Dim Fname As String     Dim PathName As String    Set Wb = ActiveWorkbook   Fname = "作成元データ.xls" PathName = Wb.Path   If Right(PathName,1)="\" then   Workbooks.Open Filename:=PathName & Fname   Else     Workbooks.Open Filename:=PathName & "\" & Fname     ThisWorkbook.Active    End If End Sub 「ThisWorkbook.Active」にてBに戻しているつもりなのですが Aがアクティブのままであり、Bのシートをコピー選択できなくなってしまっています。 Sub BookOpen() Workbooks.Open Filename:=ThisWorkbook.Path & "\作成元データ.xls" End Sub こちらのように簡単な構図も試してみたのですが PESONAL.xlsbのあるフォルダ?を見に行くようでうまく「作成元データ」を開けませんでした。 お詳しい方には基本的な事かもしれませんが どうぞ宜しくお願い致します。   

  • ExcelVBA複数のシートへのコピーの方法

    以下の質問の補足質問です。よろしくお願い致します。 「ExcelVBAコードの編集方法を教えてください」 http://okwave.jp/qa/q8503466.html 「ExcelVBA別フォルダにあるブックのコピー方法」 http://okwave.jp/qa/q8488933.html で教えていただいたコードを元に自分なりに編集したのですがうまくいきません。 結果先のシートは複数なのですが、複数のシートにコピーする編集方法がうまくいきません。 '////////////////////////////////////////////////////// yyyy = 1999~2012 yyyy2 = 2000~2012 Sheet名:A広域、B広域 1_フォルダA  ∟yyyy_ファイルA.xls 2_フォルダB  ∟yyyy_ファイルB.xls 3_フォルダC  ∟yyyy2_ファイルC.xls 4_フォルダD  ∟yyyy_ファイルD.xls 5_フォルダE  ∟ファイルE_結果.xls 例えばコンボボックスで「2007」を選択した場合、 '地域A男性 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)F7~F25にコピー '地域A女性 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)F26~F44にコピー '地域B男性 「2006_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)D51~D69にコピー 「2007_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)E51~E69にコピー 「2008_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)F51~F69にコピー '地域B女性 「2006_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)D70~D88にコピー 「2007_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)E70~E88にコピー 「2008_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)F70~F88にコピー '地域C男性 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)F7~F25にコピー '地域C女性 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)F26~F44にコピー '地域A男性 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)J7~J25にコピー '地域A女性 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)J26~J44にコピー '地域B男性 「2006_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)H51~H69にコピー 「2007_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)I51~I69にコピー 「2008_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)J51~J69にコピー '地域B女性 「2006_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)H70~H88にコピー 「2007_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)I70~I88にコピー 「2008_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)J70~J88にコピー '地域C男性 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)J7~J25にコピー '地域C女性 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)J26~J44にコピー '地域A男性 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(A広域)L7~L25にコピー '地域A女性 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(A広域)L26~L44にコピー '地域B男性 「2007_ファイルC.xls」のD4~D22を「ファイルE_結果.xls」の(A広域)L51~L69にコピー '地域B女性 「2007_ファイルC.xls」のD24~D42を「ファイルE_結果.xls」の(A広域)L70~L88にコピー '地域C男性 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(B広域)L7~L25にコピー '地域C女性 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(B広域)L26~L44にコピー '地域A男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N7~N25にコピー '地域A女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N26~N44にコピー '地域B男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N51~N69にコピー '地域B女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N70~N88にコピー '地域C男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N7~N25にコピー '地域C女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N26~N44にコピー '////////////////////////////////////////////////////// コピー先は複数あるのですが、文字数の関係で割愛させていただきます。 この内容で伝わると良いのですが。 何卒よろしくお願いします。

  • 指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています

    エクセルで、指定フォルダ内のファイルオープン→別フォルダに同じファイル名のcsvとして保存 のマクロを作ろうとしています。 現在下記のようなマクロを途中まで作成したのですが、保存の良い方法が分からず困っております。 (ファイルオープンまでは出来ているようですが、その後エラーが出てしまいます) どなたかお知恵を拝借願えませんでしょうか。 どうぞ宜しくお願い致します。 Sub Book_Open() Dim BookName As String Dim PathName As String PathName = "C:\test_htmltocsv\test\" BookName = Dir(PathName & "*.html") Do Until BookName = "" Workbooks.Open PathName & BookName BookName = Dir() ActiveWorkbook.SaveAs "Sample.xls" ←← Loop End Sub

  • ファイル名を変数として取り扱いたい

    ファイル名が変更されても正常に動作するようにしたい <処理概要> A.XLS、B.XLS、C.XLSというファイルがあります。 A.XLSにB.XLS、C.XLSのシートを取り込む処理をしています。 マクロはA.XLSで起動、処理しています。 A.XLSのファイル名を変更されても動くようにできるのでしょうか。 ご指導のほど、よろしくお願いいたします。 <ファイルの取り込み処理> For Each fName In FSO.GetFolder(MyFolder).Files If FSO.GetExtensionName(fName) = \\\"xls\\\" And _ FSO.GetBaseName(fName) <> \"A\" Then Set wBook = Workbooks.Open(fName, 0, True) For 番号 = 1 To Worksheets.Count wBook.Worksheets(番号).Copy _ after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) Next 番号 wBook.Close False End If

  • 結合した文字列をファイル名に使えない

    Excel上に入力されているパス名とファイル名のデータを組み合わせて、 様々なファイルを開いたりコピーしたりするVBAのコードを作ろうとしています。 仮にシート上のA1セルに、C:\Documents and Settings\デスクトップ というパス名 A2セルに URIAGE.xls というファイル名が入力されていたとして、 A1の文字列データとB1の文字列データを結合する場合、 Sub FileSousa()  Dim a As String  Dim b As String  Dim c As String  a = Cells(1, "A").Value  b = Cells(2, "A").Value  c = Chr(34) & a & "\" & b & Chr(34)  Range("A3") = c としてみると、確かにA3セルには、"C:\Documents and Settings\デスクトップ\URIAGE.xls" と出力され、文字列が結合されたことがわかるのですが、その変数cのデータを使って  Workbooks.Open Filename:=c として、そのファイルを開こうとすると、ファイル名が見つからないとしてエラーになります。 ファイルはデスクトップ上の確かにその名前で存在しており、直接 Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\URIAGE.xls" とすると開きます。 " を Chr(34)によって入力したのがいけないのでしょうか、 Workbooks.Open Filename:=××× には、変数を置いてはいけないのでしょうか。 そもそも文字列の結合は、"あ" & "い" → "あい" となるのが基本だと思うのですが、 a="あ"、b="い"、c=a&b → c="あい"として結合した変数cについては、ファイル操作上のファイル名の設定項目として使えないのでしょうか。

専門家に質問してみよう