教えて!しごとの先生
教えて!しごとの先生
  • 解決済み

excelデータをCSVファイル(全社員のデータ)に飛ばし給与ソフトに読み込みをしたいです。 【出勤簿データファイ…

excelデータをCSVファイル(全社員のデータ)に飛ばし給与ソフトに読み込みをしたいです。 【出勤簿データファイル】 ★個人(1名)で1つのシートを使っています。➀A1に氏名が記載されています ②A2に出勤日数 ③A3に有給日数 ④A4に規定内出勤時間 ⑤A5に残業時間 ⑥A6に深夜時間 ↑上記内容が入力されています 【CSVファイル】 ➀B列が氏名 ②C列が出勤日数 ③D列が有給日数 ④E列が規定内出勤時間 ⑤F列が残業時間 ⑥G列が深夜時間 このような場合、どのような計算式を入れればCSVファイルに簡単に読み込む事ができますか?氏名はexcelファイルとCSVファイルの氏名は一致するようにしています。

続きを読む

97閲覧

知恵袋ユーザーさん

回答(2件)

  • ベストアンサー

    【出勤簿データファイル】が一人1シートで構成されている? そのシート名が、その人の名でなければ、 あらたなシートのA列2行目以下に、シート名を記述し、B列に =INDIRECT($A2&"!a"&COLUMN()) 横方向に必要なだけコピー貼り付け 横1行コピー下方向に人数分貼り付け さらに新たなシートを作り A1セルに =あらたなシート名!B2 とし、必要なだけ、横方向、縦方向コピー貼り付け 時刻などが、シリアル表示なら、表示形式で時刻を選択指定してください。 これでCSVデータ構造にマッチしているなら、 いったんexcelファイル形式で上書き保存、つづいて ファイル>名前をつけて保存 保存するファイルタイプを Excelブック(*.xlsx) ▼ のプルダウンメニューを開き CSV(コンマ区切り)(*.csv) を選択し、適当なファイル名をつけ、保存すればCSV形式となり、 そのシートだけの情報が保存されます。 何回か「はいOK」をクリックされてください。

  • 「VBScript」による回答ですので、「Windows限定」です。 一度、試して頂けないでしょうか? このプログラムは、これから読み込ませるエクセルのブックを開いておき(★★★他のブックは絶対に開いてはいけません)、「csv」ファイルを1つだけプログラムファイルにドラッグ&ドロップすると、たとえば、「abc.csv」というファイルをドラッグ&ドロップすると、「abc(Result).csv」という結果ファイルを作成します。 ただし、最後の方の3行(頭に「'」がついている3行)の頭の「'」を削除すると、いったん、「~(Result).csv」を作成した後、元の「csv」ファイルを削除、「~(Result).csv」ファイルを元のファイルと同じ名前にします。 結果的に、ドラッグ&ドロップしたファイルと同じ名前のファイルだけが残ります。 「~(Result).csv」の内容をご確認頂き、問題がなければ、最後の方の3行の「'」を取り除いてください。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。 これから読み込ませたいエクセルのブックを1つだけ開いておき、できたプログラムファイル(「~.vbs」ファイル)に、「csv」ファイルを1つだけ、ドラッグ&ドロップしてください。 ★★★注意事項★★★ 今は、「csv」ファイルの1行目は「項目行」で、2行目から実際のデータがある、という想定です。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim a, bk, cr, cv, ex, f, g, m(6), n, i, sh, so, wa, x Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If f = so.GetParentFolderName(wa(0)) n = so.GetBaseName(wa(0)) Set ex = GetObject(, "Excel.Application") Set bk = ex.Workbooks(1) Set cv = so.OpenTextFile(wa(0), 1) Set cr = so.OpenTextFile(f & "\" & n & "(Result).csv", 2, True) x = cv.ReadLine cr.WriteLine x Do Until cv.AtEndOfStream a = Split(cv.ReadLine, ",") m(0) = a(0) Set sh = bk.Worksheets(a(1)) For i = 1 to 6 m(i) = sh.Cells(i, "A").Value Next cr.WriteLine Join(m, ",") Loop cv.Close cr.Close Set cv = Nothing Set cr = Nothing 'so.DeleteFile wa(0) 'Set g = so.GetFile(f & "\" & n & "(Result).csv") 'g.Name = so.GetFileName(wa(0)) Set wa = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set so = CreateObject("Scripting.FileSystemObject") 「Windows」のファイルやフォルダ、テキストファイルを扱う機能を読み込んでいます。 Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされると、その数や拡張子を調べ、想定外なら、メッセージを表示して、プログラムそのものを終了してしまいます。 f = so.GetParentFolderName(wa(0)) ドラッグ&ドロップされたファイルが存在するフォルダを調べています。 n = so.GetBaseName(wa(0)) ドラッグ&ドロップされたファイルのベースネーム(「abc.csv」→「abc」)を調べています。 Set ex = GetObject(, "Excel.Application") 開いているエクセルブックを取得するのに必要です。 Set bk = ex.Workbooks(1) 開いているエクセルブックを取得しています。 Set cv = so.OpenTextFile(wa(0), 1) ドラッグ&ドロップされたファイルを「読み込み専用」で開いています。 Set cr = so.OpenTextFile(f & "\" & n & "(Result).csv", 2, True) ドラッグ&ドロップされたファイルと同じフォルダ内に「abc.csv」→「abc(Result).csv」ファイルを「書き込み専用」で、新規作成しています。 x = cv.ReadLine 先頭の1行を読み込んでいます。 cr.WriteLine x そのまま「~(Result).csv」に書き出しています。 Do Until cv.AtEndOfStream ドラッグ&ドロップされたファイルの終端まで繰り返します。 a = Split(cv.ReadLine, ",") たとえば、読み込んだ1行が、「a,b,c」の場合、「a(0) = "a"」、「a(1) = "b"」、「a(2) = "c"」となります。 m(0) = a(0) 列「A」の値をそのまま配列変数に格納しています。 Set sh = bk.Worksheets(a(1)) 列「B」の値がシート名なので、列「B」の値を使って、ブックのシートを指定しています。 For i = 1 to 6 1行目から6行目まで処理。 m(i) = sh.Cells(i, "A").Value 各セルの値を配列変数に格納しています。 cr.WriteLine Join(m, ",") 格納した値を「~(Result).csv」に書き出しています。 Loop を、ファイルの終端まで繰り返しています。 cv.Close cr.Close Set cv = Nothing Set cr = Nothing 両ファイルを閉じています。 'so.DeleteFile wa(0) 'Set g = so.GetFile(f & "\" & n & "(Result).csv") 'g.Name = so.GetFileName(wa(0)) (頭に「'」が付いていると、実行されません。) 元「csv」ファイルを削除し、「~(Result).csv」を取得し、名前を元ファイルと同じにしています。 Set wa = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。

    続きを読む

< 質問に関する求人 >

有給(東京都)

この条件の求人をもっと見る

< 質問に関する求人 >

残業(東京都)

求人の検索結果を見る

もっと見る

この質問と関連する質問

    < いつもと違うしごとも見てみませんか? >

    覆面調査に関する求人(東京都)

    この条件の求人をもっと見る

    Q&A閲覧数ランキング

    カテゴリ: 労働条件、給与、残業

    転職エージェント求人数ランキング

    • 1

      続きを見る

    • 2

      続きを見る

    • 3

      続きを見る

    あわせて読みたい
    スタンバイプラスロゴ

    他の質問を探す

    答えが見つからない場合は、質問してみよう!

    Yahoo!知恵袋で質問をする

    ※Yahoo! JAPAN IDが必要です

    スタンバイ アプリでカンタン あなたにあった仕事見つかる