はじめてのVBA
・はじめてのVBA
・本開発までの暫定対応
↓
品質
・改修想定なし
・問題なく動く(想定通りに使った場合に限る)
構成
シート1:説明書シート。コピペボタン・CSV出力ボタンをつける
シート2:CSV出力元シート(シート3の入力値をコピペする)。セルの書式を設定する。
シート3:ユーザが入力するシート。プルダウンを作る。
■Excel
仕様上、月日は0埋め。
月日が1桁の時も日付の先頭を揃えたい
(ググったワード:"excel 日付 0埋め")
セルを右クリック > 「セルの書式設定」を選択
「表示形式」タブ > 「分類」から「ユーザー定義」を選択
パターン1
「種類」yyyy/mm/dd > 「OK」をクリック
例)セルの入力値→"2017/7/1"
表示 →"2017/07/01"
パターン2
「種類」yyyymmdd > 「OK」をクリック
例)セルの入力値→"2017/7/1"
表示 →"20170701"
複数の候補から選択する項目。
項目によって、数字が全角だったり半角だったり…。
入力よりも、選ばせた方がよさそう。
そうだ、プルダウンを作ろう。
3ステップ!Excelでプルダウンリストを作成する方法|エクセルハック
(ググったワード:"excel プルダウン")
「データ」タブ > 「データの入力規則」をクリック > 「データの入力規則」を選択
「設定」タブ > 「リスト」を選択 > 「ドロップダウン リストから選択する」にチェックを入れる > 「元の値」に候補を","区切りで入力 > 「OK」をクリック
EXCELからCSVファイルの出力方法について - Excel(エクセル) 締切済 | 教えて!goo
(ググったワード:"エクセル csv 出力 ボタン")
回答No.5のコードを参考にさせていただく。
マクロ実行でCSVが出力されることは確認できた。
これをベースにどんどん仕様を盛り込んでいく。
次に、ファイル名に設定する今日の日付の取得。
VBAで今日の日付をyyyymmdd形式で取得する-Date・Format関数:エクセルマクロ・Excel VBAの使い方-VBA関数 http://www.relief.jp/itnote/archives/excel-vba-today-yyyymmdd.php
(ググったワード:"エクセル マクロ 日付取得")
最後に、シートの入力値のコピペ。
エクセルVBA 別シートの複数のセルの値をコピーする方法 - Excel(エクセル) 解決済 | 教えて!goo
(ググったワード:"エクセル マクロ シート コピー 範囲 指定")
入力されたセルだけをコピペ範囲にしたい。
No.8 ワークシートの最終行、最終列を取得する
(ググったワード:"マクロ 最大行")
マクロ実行用のボタンをつける。
Excel マクロ実行ボタンを作ろう~やさしいマクロ講座
(ググったワード:"マクロ ボタン")
操作の説明を書いて、Excel完成。
ところが、処理にやたら時間がかかる。
処理速度の改善へ。
Office TANAKA - Excel VBA高速化テクニック[無駄な表示を止める]
Office TANAKA - Excel VBA高速化テクニック[名前で呼ぶな]
Office TANAKA - Excel VBA高速化テクニック[セルの指定方法]
Office TANAKA - Excel VBA高速化テクニック[セルを配列に入れる]
(ググったワード:"マクロ 処理 高速化")
…で、最終的にできたマクロがこんな感じ、だったような。
Sub copyInputValue() Dim sh2 As Worksheet Dim sh3 As Worksheet Dim tmp As Variant Application.ScreenUpdating = False Set sh2 = Worksheets(2) Set sh3 = Worksheets(3) maxRow = sh3.Cells(Rows.Count, 1).End(xlUp).Row maxCol = sh3.Cells(1, Columns.Count).End(xlToLeft).Column tmp = sh3.Range(sh3.Cells(2, 1), sh3.Cells(maxRow, maxCol)) sh2.Range(sh2.Cells(2, 1), sh2.Cells(maxRow, maxCol)) = tmp Application.ScreenUpdating = True End Sub Sub outputCsv() Application.DisplayAlerts = False Application.ScreenUpdating = False main_f = ActiveWindow.Caption out_pass = ActiveWorkbook.Path & "\" Sheets(2).Select Sheets(2).Copy ActiveWorkbook.SaveAs Filename:= _ out_pass & Format(Date, "yyyymmdd") & ".csv", _ FileFormat:= xlCSV, CreateBackup:= False ActiveWindow.Close Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
もうひとつマクロ作ってたような気がするけど、忘れた。