シート名を取得して保存するVBA
業務フローをEXCELを描くことがよくありますが、そのとき
モジュール側
ご丁寧にもシート名に業務を書いてくださっている方がいらっしゃいます。
んで、業務一覧をまとめたいときに一々転記するのもかったるいんで
VBAでシート名を取得して一覧にするやつを組みました。
ファイルを読み込んで、保存するだけのいたってシンプルなものです。
例のごとくエラー制御は甘いままです。(いいかげん鍛えないと・・・)
例のごとくエラー制御は甘いままです。(いいかげん鍛えないと・・・)
フォーム側(ボタンを1個作る)
-----------------------------------------------------------
Private Sub btn_getSheetName_Click() 'refer ' http://officetanaka.net/excel/vba/tips/tips154.htm ' http://www.moug.net/tech/exvba/0060013.html ' http://vbaexcel.seesaa.net/article/148313379.html ' http://officetanaka.net/excel/vba/file/file02.htm ' http://excelvba.pc-users.net/func/func4.html ' ' EXCELブックからシート名を取得して別のEXCELに出力する ' Dim getFile As Variant Dim setFile As Variant Dim retVal As String '処理時間計測用 Dim startTime As Date Dim endTime As Date startTime = Now ChDir CurDir 'カレントディレクトリ '抽出対象と保存対象を読出 getFile = Application.GetOpenFilename("EXCELファイル(*.xls),*.xls, EXCELファイル(*.xlsx),*.xlsx") setFile = Application.GetOpenFilename("EXCELファイル(*.xls),*.xls, EXCELファイル(*.xlsx),*.xlsx") If VarType(getFile) <> vbBoolean And VarType(setFile) <> vbBoolean Then retVal = Module1.getSheetName(getFile, setFile) End If endTime = Now 'Debug.Print DateDiff("s", startTime, endTime) End Sub
モジュール側
------------------------------------------------------------
'refer ' http://plaza.rakuten.co.jp/motyan2005/diary/201010200000/ ' http://officetanaka.net/excel/vba/variable/12.htm ' http://oshiete.goo.ne.jp/qa/4418255.html Option Explicit ' ' 対象のEXCELからシート名を取得する ' Function getSheetName(inFile As Variant, outFile As Variant) Dim readBook As Object Dim readSheet As Object Dim saveBook As Object Dim saveSheet As Object Dim sheetsName As String Dim i As Long '行カウンター Const FIRST = 1 Const ROWA = "A" 'A列 Const ROWB = "B" 'B列 Set readBook = GetObject(inFile) Set saveBook = Workbooks.Open(outFile) Application.DisplayAlerts = False Application.Visible = False 'シート名設定用 sheetsName = Left(readBook.Name, InStrRev(readBook.Name, ".", -1, vbTextCompare) - 1) saveBook.Worksheets(FIRST).Name = sheetsName i = 1 For Each readSheet In readBook.Sheets saveBook.Worksheets(FIRST).Range(ROWA & i) = i saveBook.Worksheets(FIRST).Range(ROWB & i) = readSheet.Name i = i + 1 Next saveBook.Worksheets(FIRST).Range(ROWA & ":" & ROWB).EntireColumn.AutoFit 'ファイルを閉じる readBook.Close Set readBook = Nothing saveBook.Close Savechanges:=True Set saveBook = Nothing ActiveWorkbook.Close False Application.Visible = True Application.DisplayAlerts = True End Function
コメント