目的
excel2007からpcomで送信可能なcsvを出力する
no error trap とりあえず文字に""で囲まれて数字はそのままカンマで区切られ
pcomの csv-->asの転送もエラーなく終わりました
'parm2 outfile name
'parm3 judge string? 判定のstring
'parm4 start row ’範囲の先頭行がタイトルだった場合2行のデータ行から読む
'先頭からデータの場合は1行目から読む
'vbaに組み込んで使うのを想定するので転送元ファイル名は指定しない
Sub MAKE_CSV_FILE( outfilecsv, strsws,startrow)
Dim frm(255)
Dim objHANI As Range
name1 = ActiveWorkbook.Name
'転送元範囲セット
'例 Set objHani = Range(Cells(5, 1), Cells(Cells(5, 1).End(xlDown).Row, 30))
Set objHANI = Range(rng)
'定義情報を配列に展開する
GoSub fdf
'ファイルをオープンする
Dim FNO As Integer 'ファイル番号
FNO = FreeFile '空いてるファイル番号を取出す
Open outfilecsv For Output As #FNO 'テキストファイルを新規作成
'行、列でループを作る
Dim y As Integer
Dim x As Integer
For y = startrow To objHANI.Rows.Count '行のループ
'1列目
If frm(1) = "1" Then
Print #FNO, Chr(&H22) & objHANI.Cells(y, 1).Value & Chr(&H22); '先頭項目の出力
Else
Print #FNO, objHANI.Cells(y, 1).Value; '先頭項目の出力
End If
'2列目以降
For x = 2 To objHANI.Columns.Count '列のループ
Print #FNO, ",";
If frm(x) = "1" Then '文字
Print #FNO, Chr(&H22) & objHANI.Cells(y, x).Value & Chr(&H22); '先頭項目の出力
Else '数字
Item1 = objHANI.Cells(y, x).Value
If Item1 = "" Then Item1 = "0"
Print #FNO, Item1; '先頭項目の出力
End If
Next x
Print #FNO, "" '改行のみ出力
Next y
'ファイルをクローズする
Close #FNO
Exit Sub
fdf:
For i = 1 To Len(strsws)
'ReDim frm(1)
frm(i) = Mid(strsws, i, 1)
Next
Return
End Sub
参考
VB テクニック編12 - CSV テキストファイル形式仕様、ハンドリングサンプル
freewareでexcelからcsvに出力するものがたくさんあるがどれもカンマ区切りのみだったり
すべてダブルコーテーションで囲んだりで、その項目を文字数字で判断し列として一貫性がなかったり、pcomの送信につかえないものばかり
可変長にこだわるのはexcelが文字数の制限をしなければ、固定長で転送した場合容易に
転送エラーになるから。文字数制限すればいいじゃんともいえるが、ひとつづつ設定するのが面倒
もともと列にどんだけでも入るんだからこけずに転送させてくれよと
桁はみだしたときは、はみ出したよってメッセージだけで通してねと
つうかどなたかexcel2007のpcでexcel4.0に保存するソフト作ってくれないかな。。。
こんなスクリプト?でも恥ずかしげもなく出せるのがブログのよさ?( ´∀` )
業務で運用しつつエラーが無いだったらどっかの会議室に書き込もうと思います
2007年11月21日水曜日
登録:
コメントの投稿 (Atom)
#n/aなどのエラー値があるとこける
返信削除セルにエラー値があるような範囲には
if(iserror(のような関数で制御が必要になる