EXCELマクロでxlsとxlsxを開く方法

このQ&Aのポイント
  • EXCELマクロを使用して、xlsとxlsxの両方を開く方法について教えてください。
  • 現在、複数の注文書をひとつのブックにまとめるマクロを使用しています。注文書は同一の書式で、セルの内容が一部異なります。最近、xlsとxlsxの形式が混在しており、順番に読み込む方法に工夫を加えたいです。
  • 000から順にファイルを開いていくマクロを使用していますが、混在しているxlsとxlsxでも順番通りに読み込む方法はありますか?
回答を見る
  • ベストアンサー

EXCELマクロでxlsとxlsxを開く方法

EXCEL マクロでxlsとxlsxを両方開く方法。 お世話になります。 エクセル マクロについてです。 複数の注文書をひとつのブックにまとめるマクロを使用しています。 注文書は同一の書式で部分的にセルの内容が違うだけです。 今まではxlsの形式で対応をしておりましたが、最近、xlsxの形式も増えてきて 手間がかかるようになってしまいました。 For i = 0 To 100 sName = Format(i, "000") On Error Resume Next Set wb = Nothing Set wb = Application.Workbooks.Open(sPath & sName & ".xls", UpdateLinks:=0) 現在は000から001、002、・・・・・・とファイルを順次開いていくのですが xlsとxlsxが混在しても順番に読み込みができるような工夫はできないものでしょうか。 よろしくお願いします。

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

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

こんにちは Dir(パス\ファイル名)を実行して、""が返ってきたらファイルが存在しません。 これをIFでsName.xls と sName.xlsx について調べて、存在する方 を開きます。 下記の例では、.xlsと .xlsxの両方のファイルがある場合には .xlsを 優先して開きます。 Sub Sample() Dim sPath As String Dim sName As String Dim i As Integer On Error Resume Next sPath = "C:\Sample\" For i = 0 To 100 sName = sPath & Format(i, "000") If Dir(sName & ".xls") <> "" Then Workbooks.Open sName & ".xls" ElseIf Dir(sName & ".xlsx") <> "" Then Workbooks.Open sName & ".xlsx" End If Next i End Sub

100303
質問者

お礼

ご回答いただきありがとうございます。 とても参考になりました。 既存のマクロに組み込むのに参考にさせていただきます。 >.xlsと .xlsxの両方のファイルがある場合には .xlsを >優先して開きます。 このことを考えてませんでした。 勉強させていただきました。 ありがとうございます。

その他の回答 (2)

回答No.2

xlsとxlsxのファイルを読み込んで、ファイル名でオープンしたらよいでしょう。

100303
質問者

お礼

ご回答いただきありがとうございました。 参考にさせていただきます。 ありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

xlsとxlsxの必ずどちらかしか無いのでしたら,ある方を調べて開けば良いですね。 sub macro1() dim i dim myPath, myFile dim myBook mypath = "c:\test\" for i = 0 to 100 myfile = mypath & format(i, "000") myfile = myfile & iif(dir(myfile & ".xls") = "",".xlsx", ".xls") set mybook = workbooks.open(filename:=myfile, updatelinks:=false) next i end sub

100303
質問者

お礼

ありがとうございます。 ご返答が遅くなりすみませんでした。 大変参考になりました。 既存のマクロに組み込むのには少し修正が必要なので 参考にさせていただきます。 ありがとうございました。

関連するQ&A

  • エクセルのxls形式からxlsx形式の一括変換

    エクセルのxls形式からxlsx形式の一括変換、その逆もできますか?  いつもお世話になっております。  職場でのパソコンがOffice2003、2007、2010と混在しており、保存されているファイルも拡張子が「*.xls」と「*.xlsx」が混在しています。  ファイルを開いて、「*.xls」形式を「*.xlsx」形式に形式を選択し、保存しなおししたり、その逆もすることが多いのですが、多くの手間がかかります。(例えば、20個程度のファイルなら20回)  複数のファイルを一括して変換することはできませんか。

  • エクセル マクロ 値の貼り付け

    以下のエクセルのマクロで値のみを貼り付けたいのですが、.valueを指定しても上手くできません。 どのように修正すればいいか教えてください。 Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\ファイルA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("E4:AR4").Copy wb.Sheets("BBB").Range("E4:AR4") Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True

  • エクセル マクロ 簡素化

    マクロ初心者です。 下記のデータのコピペする、マクロを使用しています。 下記にはAAAとBBBの2つのエクセルへのコピペのみしか記述していませんが、 その下に50ファイル分のファイル名、コピー元、コピー先だけが違うマクロが並んでいます。 メンテナンスや更新に手作業で行っているので、非常に時間がかかります。 例えば、別のシートにファイル名、コピー元、コピー先の一覧を作成し、 そのシートでファイル名、コピー元、コピー先を修正し、コピペができるようになるなど、 どうにかして簡素化したいのですが、どのように実現すればいいか、教えてくださると助かります。 ---------------------------------------------------------------------- Private Sub CommandButton1_Click()   Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A1:B1").Copy wb.Sheets("CCC").Range("A1:B1").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\BBB.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A2:B2").Copy wb.Sheets("CCC").Range("A2:B2").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True 'アイテム名、コピー元、コピー先、だけがちがう、同じようなマクロが50ファイル分ある。 End Sub

  • xlsで事足りる内容のファイルは、xlsxとxlsのどちらで保存した方が良いのでしょうか

    最近Office2007を導入したので、 それまでExcel2003で使っていたxls形式のファイルを 互換モードで開いて使っていますが、 内容的にExcel2007の新要素を含んでおらず、2007の新形式の xlsx形式で保存し直す必要性がないので、 Excel97-2003と互換性のあるxls形式のまま、上書き保存しています。 しかし、このファイルは今後Excel2003以前のExcelで開くことは ないので(Excel2007が入っている自分のPCでしか使わないので)、 この互換性は特に必要ないのです。 このようなファイルは、xlsとxlsx、どちらで保存、運用するのが 良いのでしょうか? 見方によって一概にどちらがよいとは言えないかもしれませんが、 この2つの形式でのファイル動作のパフォーマンス (開いたり、保存したりするときの動作の軽快さ) と、ファイルサイズは特に気になります。 他の観点からでも「こういう理由でxlsの方が良いよ」 「別の理由でxlsxの方が良いよ」というのがあったら 教えていただきたいと思います。

  • マクロのワイルドカードの使い方&ループ記述について

    マクロ初心者です! 下記の動作を実現したいのですが、 「(下記★の)フォルダが見つかりません。移動や削除が行われた可能性があります。」とエラーが出ます。 初心者のためエラーの理由がわからず、そもそも記述が間違っているのかも不明な状況です。 知識をお持ちの方がいらっしゃれば、下記動きを実現するために、どこを修正する必要があるのか、 ご教示いただけますと幸いです。。。 実現したい動きとしては以下です。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ ファイル名に「あいう」を含むファイルを開く →F25:F42の値をコピー …(1) ファイル名に「えお」を含むファイルを開く →F25:F42の値をコピー …(2) (1)と(2)を加算して、貼り付け先ファイルのF25:F42に貼り付け →以上の動きをF列~AC列まで1列おきに行う。 ※以上のすべてのファイルは同じフォルダ内に格納されています。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ そして、書いてみたマクロは以下です。 Sub マクロ() Dim i As Integer For i = 5 To 28 Step 2 Dim xAdr As Range Set xAdr = Range(Cells(25, i), Cells(42, i)) Dim ex As New Excel.Application Dim wb As Workbook Dim wbA As Workbook Dim sPath Dim sPathA Dim r As Range Dim sht As Worksheet With Workbooks("貼り付け先ファイル.xlsm").Worksheets("指定sheet") sPath = "C:\Users\指定フォルダ\*あいう*.xlsm" ★ Set wb = ex.Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) wb.Worksheets("指定シート").Range(xAdr).Copy .Range(xAdr).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd Call wb.Close sPathA = "C:\Users\指定フォルダ\*えお*.xlsm" Set wbA = ex.Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) wbA.Worksheets("指定シート").Range(xAdr).Copy .Range(xAdr).PasteSpecial Paste:=xlPasteValues Call wbA.Close End With End Sub どうぞよろしくお願いいたします。。

  • エクセルのXLSX形式で容量が大きくなります

    エクセル2007です。 XLS形式で保存したら容量が262KBなのに、XLSX形式にして 保存すると1.75MBと、かなり大きくなります。 普通、XLSX形式のほうが容量が小さくなりますよね? なぜでしょうか? 考えられる原因について教えて頂けると助かります。 よろしくお願い致します。

  • 個人用マクロブックの有無

    エクセルVBAで現在ユーザーが使っているパソコンに個人用マクロブックが存在するかどうかを取得する方法を考えました。 まず、開いているBOOKを総当りして、エクセル2003までなら PERSONAL.XLS、2007からは"PERSONAL.XLSM がひらいているかどうかを調べる方法。 Sub test1() Dim wb As Workbook For Each wb In Workbooks If wb.Name Like "PERSONAL.XLS*" Then MsgBox "個人用マクロブックがあります。" Exit Sub End If Next MsgBox "個人用マクロブックはありません。" End Sub 最初から個人用マクロブックがあるものとして変数に入れ、エラーになったら無いと判断する方法。 Sub test2() Dim wb As Workbook Dim v As String v = IIf(Val(Application.Version) > 11, "PERSONAL.XLSM", "PERSONAL.XLS") On Error Resume Next Set wb = Workbooks(v) On Error GoTo 0 MsgBox "個人用マクロブックが" & IIf(wb Is Nothing, "ありません。", "あります。") End Sub でも、自分の端末はまだ2000で、しかも個人用マクロブックがあるので、ちゃんと判定できているのかどうか自信がありません。 これで正しいのでしょうか? また、test1とtest2ではどちらをつかえばいいのでしょうか? あるいは、もっと簡単なやりかたはないのでしょうか?

  • xlsをxlsxに変換しても行が増えません

    以前よりExcel2003で使用していたxlsファイルがあり、 会社のExcelが2010になっても特に問題がなかったのでそのまま使っていたのですが、 最近65536行を超えそうになったためExcel2010のファイルタブの変換をつかい、 xlsxに変換を行いました。 ですが1つだけ行が65536行のまま増えないファイルがあります。 拡張子もファイル形式もxlsxになってしまっているのでもう変換もできません。 他のファイルは104万行まで増えたのですが。。。 何か同じ症状になった方、解決策をご存知の方はいらっしゃらないでしょうか。 よろしくお願いいたします。

  • windows live メールでxlsxの形式のメールがなぜかxls

    windows live メールでxlsxの形式のメールがなぜかxlsとして認識されてしまいます。 それだと使っている古いバージョンのエクセルでは変換してくれません。 xlsxのまま受け取る方法はないのでしょうか? 一度パソコンにダウンロードして、拡張子を書き換えてあげると変換はしてくれるのですが・・・。

  • EXCELマクロ シートのありなし

    EXCELのマクロでシートの存在を返す関数を作っています。 一応動くのですが、ブックをいちいちアクティブにしているのが 気に入りません。スマートな手法を教えて頂けませんか。 よろしくお願いします。 例)  A.xls、B.xls、C.xls、D.xlsのように複数のブックが開かれています。  マクロは、マクロ.xlsというファイルに記述しているとします。  例えば、A.xlsというファイルにsheet4という名前のシートが存在するか調べたい。 Function isExistingSheetName2(Bookname As String, sheetname As String) As Boolean Dim wb As Workbook Dim ws As Worksheet Dim flag As Boolean Dim wbown As Workbook Dim wsown As Worksheet '現在を記憶 Set wbown = ThisWorkbook Set wsown = ActiveSheet '判定 Set wb = Workbooks(Bookname) wb.Activate                  ’←特に気に食わない   For Each ws In Worksheets If ws.Name = sheetname Then flag = True Next ws '元に戻る wbown.Activate                ’←気に食わない    wsown.Select                 ’←若干気に食わない   '戻り値 If flag = True Then isExistingSheetName2 = True Else isExistingSheetName2 = False End If End Function ’excel 2002 SP3 ’windowsXP Pro SP3

専門家に質問してみよう