複数のシートのデータをひとつにまとめてCSVデータにするマクロ
Sub CSV() Application.DisplayAlerts = False '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'データが入ったワークブックを先ず開く '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' フルパス = Application.GetOpenFilename("*.xls,*.xls*") '※2 If フルパス = "False" Then Exit Sub '[キャンセル]ボタンがクリックされた場合 Workbooks.Open Filename:=フルパス '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '先頭にシートをひとつ追加して、 '2枚目以下のシートのデータをまとめる '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '先頭に追加するシートの名前 ShN = "data" & Format(Now, "yymmddhhnnss") ActiveWorkbook.Worksheets.Add(Before:=Worksheets(1)).Name = ShN Dim sWS As Worksheet 'データシート(コピー元) Dim dWS As Worksheet '集約用シート(コピー先) Set dWS = Worksheets(1) '集約用シートの2行目以降を削除 dWS.UsedRange.Offset(1, 0).Clear '各シートの2行目以降のデータを、集約用シートの末尾にコピー For Each sWS In Worksheets If sWS.Name <> dWS.Name Then With sWS.UsedRange 'コピー元シートにデータが1件以上ある場合 If .Rows.Count > 1 Then .Offset(1, 0).Resize(.Rows.Count - 1).Copy _ Destination:=dWS.Cells(Rows.Count, 1). _ End(xlUp).Offset(1, 0) End If End With End If Next sWS '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'こまかい修正 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '練習会回数データを値化 Columns("B:B").Select Selection.Copy Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False '余計なデータを削除 Range("1:1").Delete Range("H:L").Delete Range("A:A").Delete '集計用シートをA列で並べ替え dWS.UsedRange.Sort Key1:=Range("F1"), Header:=xlYes '余計な行は削除 e = Worksheets(1).Range("F1").End(xlDown).Row + 1 Rows(e & ":" & e + 300).EntireRow.Delete 'セル内改行データがあったら削除 Cells.Select Cells.Replace What:=vbLf, Replacement:="" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'ファイル保存 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'csvデータとして保存 Range(Cells(1, 1), Cells(e, 6)).Select Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False '保存するファイル名 FlN = "data-" & Format(Now, "yymmddhhnnss") '保存する場所を指定(ここでは C:UsersadminDesktop と指定) 'ActiveWorkbook.SaveAs Filename:="C:UsersadminDesktop" & FlN & ".csv", _ ' FileFormat:=xlCSV, CreateBackup:=False ファイル名 = "data" ファイルの種類 = 6 '※ csv Application.Dialogs(xlDialogSaveAs).Show arg1:=ファイル名, arg2:=ファイルの種類 ActiveWindow.Close Range("A1").Select End Sub
window.onload = function() {
dp.SyntaxHighlighter.ClipboardSwf = ‘http://tmh.main.jp/lib/js/dp.SyntaxHighlighter/Scripts/clipboard.swf’;
dp.SyntaxHighlighter.HighlightAll(‘code’);
};
※CSVデータをDBに投入する際、改行コードを1レコードの区切りとするため、元データにセル内改行が含まれていると当該箇所で区切りとなるため、上のマクロにも改行削除をいれておく(行70)。
ちなみに、Googleスプレッドシートのデータを取得するためには、元のスプレッドシートのデータから必要な部分だけを他のスプレッドシートで読み込み、それをCGIでfile_get_contentsすればいい(file_get_contentsするためには、当該スプレッドシートが公開設定になっている必要があるが、単なる「12」等他からみたら全く無意味なデータのみであれば全くOKだろう。& 他のスプレッドシートをひとつ非公開シートとして経由させれば、より万全)。
他のスプレッドシートのデータをコピーするスクリプト(Google Apps Script)は以下のとおり。
function copyValues2() { var ss_copyFrom = SpreadsheetApp.openById('スプレッドシートのID'); var ss_copyTo = SpreadsheetApp.getActiveSpreadsheet(); var sheet_copyFrom = ss_copyFrom.getSheetByName('view'); var sheet_copyTo = ss_copyTo.getSheetByName('view'); var copyValue = sheet_copyFrom.getRange('A1:B1').getValues(); sheet_copyTo.getRange('A1:B1').setValues(copyValue); }
→これを、30分の時間トリガー設定して、定期的にデータを取得させる。