[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルの値と同じブックを開き編集する』(初心者向け)
よろしくお願いします。
やりたいことは
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
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
(もこな2) 2022/07/15(金) 07:44
返事が遅くなり申し訳ありません。
γさん
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.