[[20220707154355]] 『セルの値と同じブックを開き編集する』(初心者向け) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの値と同じブックを開き編集する』(初心者向け)

よろしくお願いします。

やりたいことは
1 Book999.csvをBook999(yyyy-mm-dd-hh-mm-ss).xlsmとして保存
2 Book1.xlsmのsheet2をBook999(yyyy-mm-dd-hh-mm-ss).xlsmに追加

現在デスクトップに
Book999.csv
Book1.xlsm
というファイルがあります

Book1.xlsmのA1セルにBook999と入力するとBook999.csvが開くようになりましたが、それ以上のことをするにはどうしたらよいかわかりません。

book999.csvの内容(シートは1つしかありません)
  A    B   C
1 製品A  10
2 製品B  10
3 製品C  10

Book1.xlsmの内容(シート1、シート2があります)

シート1 
A2に「↑対象のCSVの名前を入力してください」と入力されているのと
C3付近に下記VBAを実行するためのボタンがあります

  A   B   C
1    
2↑対象のCSVの名前を入力してください
3       【ボタン】

シート2(このシートをBook999(yyyy-mm-dd-hh-mm-ss).xlsmに追加したい)

  A     B     C
1 製品A   部品1   部品4
2 製品B   部品3   部品2
3 製品C   部品1   部品3

Sub TEST()

Dim CELL As String

CELL = Range("A1").Value & ".csv"

Workbooks.Open Filename:="C:\Users\SUWA1029\Desktop\" & CELL

よろしくお願いします

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 コメントがつきませんね。

 1. 対象のCSVファイルを開く(これはすでに出来ている)
 2. シートをコピーする(マクロ記録を取れば、コードがわかります)
 3. s = Format(Now(), "yyyy-mm-dd-hh-mm-ss")を計算しておく。
 4. ファイルを保存する( 3.のs を織り込む)
 ということかと思います。トライしてみてください。

(γ) 2022/07/08(金) 07:59


Sub TEST()

Dim CELL As String
Dim LastRow As Long

CELL = Range("A1").Value & ".csv"

Workbooks.Open Filename:="C:\Users\USER\Desktop\" & CELL

ActiveWorkbook.SaveAs "C:\Users\USER\Desktop\" & "AAA" & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
ThisWorkbook.Worksheets("Sheet2").Copy after:=Workbooks("AAA.xlsm").Worksheets(1)

Dim r As Long

r = Workbooks("AAA.xlsm").Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row

'別ブックの最終行を参照する
Workbooks("AAA.xlsm").Worksheets(1).Range("H1:H" & r) = "=VLOOKUP(D1,Sheet2!A:B,2,FALSE)"

Dim sheet1 As Worksheet

Set sheet1 = Worksheets(1)
sheet1.Activate

'Workbooks("AAA.xlsm").Worksheets(1).Range("A1").Select

End Sub

美しくはないですが、やりたいことができました。

γさんありがとうございました
(初心者向け) 2022/07/12(火) 15:42


 お疲れ様。
 yyyy-mm-dd-hh-mm-ssというのがなくなりましたが...。

 こんな書き方もできると思います。参考にしてください。
 Sub test()
     Const folder As String = "C:\Users\USER\Desktop\"
     Dim filename As String
     Dim thisSheet As Workscheet
     Dim wb As Workbook
     Dim ws As Worksheet
     Dim lastRow As Long

     Set thisSheet = ThisWorkbook.Worksheets("Sheet1")
     filename = thisSheet.Range("A1").Value & ".csv"

     Set wb = Workbooks.Open(filename:=folder & filename)
     wb.SaveAs folder & "AAA" & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

     Set ws = wb.Worksheets(1)
     ThisWorkbook.Worksheets("Sheet2").Copy after:=ws
     lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
     ws.Range("H1:H" & lastRow).Formula = "=VLOOKUP(D1,Sheet2!A:B,2,FALSE)"
     ws.Activate

     ''wb.Save
     ''wb.Close
 End Sub

(γ) 2022/07/12(火) 21:00


既にγさんから、アドバイスがあるところですが、ちょっとほかに気になるところもあるので何点か。

■1
VBAの世界では、ブックやシートなど(オブジェクトといいます)は、きちんと指定すればいちいちアクティブにしたり選択したりする必要はありません。
また、「標準モジュール」でシートの指定を省略するとActiveSheetを指定したとみなされるルールです。
したがって、可能であれば対象のオブジェクトをきちんと指定するとよいとおもいます。

■2
デスクトップのようなフォルダは【特殊フォルダ】と呼ばれ、取得する方法が存在します。
もちろんコード中に、フォルダパスを直接書いても問題はありませんが、覚えておいて損はないテクニックだとおもいますので、興味があれば↓を読んでみてください。

 【参考】
http://officetanaka.net/excel/vba/tips/tips107.htm

■3
ブックを保存するときに拡張子まで指定していますが、実は拡張子を指定しない場合「FileFormat」にあわせてエクセル君が適切なものを付けてくれます。
保存時に拡張子まで指定することが正しくないとは言いませんが、まちがった拡張子を指定してしまうリスクを考えると、エクセル君に任せてしまうのも一考の価値があるとおもいます。
さらに、今回はブックとして開いたCSVと同じ場所に保存するということなので、ブックのPathプロパティを使えば保存するフォルダのパスは得られます。

■4
ということを踏まえると↓のように書いてもOKかと思います。

    Sub 別案2()
        Dim フォルダパス As String
        フォルダパス = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"

        Stop 'ブレークポイントの代わり

        With Workbooks.Open(Filename:=フォルダパス & ActiveSheet.Range("A1").Value & ".csv")
            .SaveAs Filename:=.Path & "\AAA", FileFormat:=xlOpenXMLWorkbookMacroEnabled

            ThisWorkbook.Worksheets("Sheet2").Copy after:=.Worksheets(1)

            .Worksheets(1).Range("H1", .Worksheets(1).Cells(.Worksheets(1).Rows.Count, "A").End(xlUp).Offset(, 7)).Formula = _
            "=VLOOKUP(D1,Sheet2!A:B,2,FALSE)"

            Application.Goto .Worksheets(1).Range("A1")
        End With
    End Sub

 ※ActiveSheet.Range("A1").Value にしているところも明示的に指定できるならば、そちらを推奨。

(もこな2 ) 2022/07/13(水) 19:50


余談ですが、Sheet2のシートモジュールに何か記述があるのでしょうか?
上記のコードは別のブックにあるはずですし、提示の処理内容であればマクロ付きブックとして保存する必要はないですよね。

(もこな2) 2022/07/15(金) 07:44


γさん
もこな2さん

返事が遅くなり申し訳ありません。

γさん
yyyy-mm-dd-hh-mm-ssは無くてもいいのではないかと、妥協してしまいました。
マクロとても参考になります。
ありがとうございます。

もこな2さん
すべてのtipsが参考になります。
マクロありがとうございます。
sheet2には送付先の住所録が付いています。
マクロで作成したブックなのでマクロ有効形式にしないと保存できないものだと思っていました。

(初心者向け) 2022/07/28(木) 15:15


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.