シートを個別ファイルに出力するマクロ

1つのブックに請求書シートをたくさん作っていた方から、ファイルが重くなり使いづらいから1つずつのブックに分けたいという相談を受けました。

1つずつ手作業だと大変なのでマクロを作ることにしました。

今回はシート名を会社名にしているファイルを想定しています。

Sub sheets_save()
 For Each sheet_book In Worksheets
 If sheet_book.Name <> "macro" Then
  sheet_book.Copy
  ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sheet_book.Name
  ActiveWorkbook.Close
 End If
 Next sheet_book
End Sub

上の場合はシート名=会社名にしていてもファイルの中身を見ないといつのものかわからないので請求書内の日付をファイル名に追加することにしました。

Sub sheets_save()
 For Each sheet_book In Worksheets
 If sheet_book.Name <> "macro" Then
  sheet_book.Copy
  year_str = Mid(sheet_book.Range("a2"), 1, 4)
  month_str = Mid(sheet_book.Range("a2"), 6, 2)
  day_str = Mid(sheet_book.Range("a2"), 9, 2)
  date_str = year_str & month_str & day_str & "-"
  

  ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & date_str & sheet_book.Name
  ActiveWorkbook.Close
 End If
 Next sheet_book
End Sub

これでファイル名が「yyyymmdd-シート名」になりました。

エクセルのA2に日付が入っていたのですが、はじめにこれをそのまま

ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sheet_book.Range("a2") & sheet_book.Name

とすると、「/」が入っている関係だと思うんですが、エラーが発生しました。

もしかすると日付を「/」ではなく「-」に変換してくれるformatがあるかもしれませんが、単純にmid()で文字数でとることにしました。

year_str = Mid(sheet_book.Range("a2"), 1, 4)
month_str = Mid(sheet_book.Range("a2"), 6, 2)
day_str = Mid(sheet_book.Range("a2"), 9, 2)

「/」がはいらないように取りたい文字の開始位置に注意しましょう。

これで手作業だとかなり手間な作業をマクロで数秒で出力することが出来ました。

illustratorの変数機能

illustratorで同じデザインで文言違いを効率よく作る方法。

名刺データなどの一部のテキストが変わるだけのデザインを大量に作るときに1つずつ作ると効率が悪い。。。

なので、CSVとillustratorの変数機能を使って作ってみる。

エクセルのデータの用意

エクセルでデータを作りCSV形式で保存します。

illustratorでデータの器を用意

こんな感じで作ったCSVに合わせてデータを流し込む器を作ります。

次に変数ウィンドウで先ほどつくったCSVを読み込みます。

読み込むとこんな感じになります。

次にアートボード上の役職と変数パネルの役職をクリックします。

変数パネルのハンバーガーメニューを押して「テキストを動的に設定」を押します。

すると、アートボード上のテキストとCSVのデータが紐づきます。

ほかの要素も同じようにして紐づけます。

画像の赤丸部分をデータセット1に変更すると

このようにCSVのデータに置き換わります。

あとは矢印を押すとCSV通りにデータが置き換わります。

(win10の機能にあるゲームキャプチャ機能を使って録画してみましたが、illustratorの変数ウィンドウが消えて録画されてしまいました。不思議。。。)

これでCSVでつくったデータをillustratorに読み込ませることが出来ました。

これがとても便利!!

皆さんもぜひ使ってみてください。

winscpで楽天ゴールド内のフォルダを複数削除する

楽天に商品を出品する際には楽天ゴールド内にその商品でつかう画像などの素材をいれて管理しています。

一点ものの商品の場合、一度売れてしまうともう2度と出品しないものもあり、その場合、ゴールド内のフォルダーを消し忘れてしまうとゴールド内がごちゃごちゃしてしまいあとから消すのが大変になることがあります。

その時にいろいろと調べて作ったものがこちらです。

"C:\Program Files (x86)\WinSCP\WinSCP.com" /script=./send.src

dir 2>&1> error.txt
open ftp://●●:パスワード@ftp.rakuten.ne.jp:ポート番号/
option batch on

rmdir /image/フォルダー1
rmdir /image/フォルダー2
rmdir /image/フォルダー3
rmdir /image/フォルダー4
rmdir /image/フォルダー10

こんな感じでrmdir(ディレクトリーの削除)のコマンドを送ると消してくれます。

プログラミングの正解?

プログラミングの勉強をしていて一番困ることは、仕様通りに動くけどこの書き方であっているのかということだと思います。

もっとこう書いたほうがいいとか、この書き方はだめだとかを教えてくれる人がいたらいいのになぁと思います。その辺は独学が故の悩みなんだと思います。

ディスコードとかでそういう一緒に作業してくれるような人いないかなぁ。。