人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelの特定のセルにある内容をCSVファイルに書き出す方法。

添付の図のようにExcleにて

A列にNo
B列に名前
C列に地域
D列に連絡
の情報が入っている場合で、5行のデータがあるとします。
1行づつをCSVファイルにするマクロを作りたいのですが、苦戦しています。
詳しい方にご指南いただきたく質問させていただきます。

CSVファイル 1.csv、2.CSV、3.CSV、4.CSV、5.CSV
のように1行1ファイルで
1.CSVであれば、1の行に記載されている 名前、地域、連絡がデータとして保存される。

です。
よろしくお願いいたします。



1320812779
●拡大する

●質問者: くまきち
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
ベストアンサー

以下は、Excel VBA ではなく、VBScript での例ですがよろしいでしょうか?


表形式のデータを扱う場合、ADO というライブラリを使用すると、

Excel データを SQL のようにアクセスでき、便利です。

' File : ExcelToCsv.vbs
' Usage : CScript //Nologo ExcelToCsv.vbs
Option Explicit

' Excelファイルを指定します
Const g_strExcelFile = "C:\home\edu\hatena\kumakumakumakuma\1320812779\book1.xls"
' 出力先のフォルダを指定します
Const g_strOutputPath = "C:\home\edu\hatena\kumakumakumakuma\1320812779\output"

Call Main()

Sub Main()
  ' Excel ファイルの内容を指定したフォルダに CSV 出力する
 Call ConvertExcelToCsvFile( g_strExcelFile, g_strOutputPath )
End Sub

' Excel ファイルの内容を指定したフォルダに CSV 出力する
Sub ConvertExcelToCsvFile( strFileName, strOutputPath )
 Dim cn
 Set cn = CreateObject("ADODB.Connection")
 
  ' Excel 97-2003 であれば、以下を有効化します。
  'cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileName & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
  ' Excel 2007/2010 の場合は、以下を有効化します。
 cn.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileName & ";Extended Properties=""Excel 12.0;HDR=Yes;"""
 
 Dim rs
  ' Excel のシート名が「Sheet1」でない場合、下記の名称を変更してください。
 Set rs = cn.Execute("SELECT * FROM [Sheet1$]")
 
 Dim strLine
 Dim strBaseName
 
 Dim strDelimiter
 strDelimiter = "," ' 出力ファイルの区切り文字として「,」を使用します。
 
  ' レコード件数分、順次取得します
 While Not rs.BOF And Not rs.EOF
  ' 「NO」列をファイル名として取得
 strBaseName = rs("NO")
  ' レコードセットにある 名前、地域、連絡を CSV データとして取得
 strLine = GetLineFromRecordset( rs, strDelimiter )
  ' CSV データをファイル出力
 Call WriteLineToFile( strBaseName, strLine, strOutputPath )
  ' 次のレコードに移動
 rs.MoveNext
 Wend

End Sub

' レコードセットの内容をデリミタ区切りの文字列として取得する
Function GetLineFromRecordset( rs, strDelimiter )
 Dim strResult
 
 Dim str
 Dim strValue
 
 Dim nFirst
 nFirst = 1 ' 2列目を取得開始位置とする
 
 Dim i
 For i = nFirst To rs.Fields.Count - 1
 strValue = rs(i)
 If i = nFirst Then
 strResult = Chr(34) & strValue & Chr(34)
 Else
 strResult = strResult & strDelimiter & Chr(34) & strValue & Chr(34)
 End If
 Next
 
 GetLineFromRecordset = strResult
End Function

' データをファイル出力する
Function WriteLineToFile( strBaseName, strLine, strOutputPath )
 Dim fso
 Set fso = CreateObject("Scripting.FileSystemObject")
 
 Dim strFileName
 strFileName = strOutputPath & "\" & strBaseName & ".csv"
 
 Dim file
 Set file = fso.OpenTextFile(strFileName, 8, True) ' 追加書き込みモード
 
  ' デバッグ用
 WScript.Echo "[" & strFileName & "]"
 WScript.Echo strLine
 WScript.Echo ""
 
 file.WriteLine strLine
 file.Close
End Function
C:\home\edu\hatena\kumakumakumakuma\1320812779>cscript ExcelToCsv.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

[C:\home\edu\hatena\kumakumakumakuma\1320812779\output\1.csv]
"田中","千代田区","ああああああ"

[C:\home\edu\hatena\kumakumakumakuma\1320812779\output\2.csv]
"佐藤","港区","いいいいい"

[C:\home\edu\hatena\kumakumakumakuma\1320812779\output\3.csv]
"鈴木","港区","ううううう"

[C:\home\edu\hatena\kumakumakumakuma\1320812779\output\4.csv]
"吉田","品川区","えええええ"

[C:\home\edu\hatena\kumakumakumakuma\1320812779\output\5.csv]
"高橋","足立区","おおおおお"

■ ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)

http://support.microsoft.com/kb/278973/ja


くまきちさんのコメント
ありがとうございました。 問題なく実行できそうです。 助かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ