[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルデータをcsvに保存するマクロ』(みや)
エクセルデータの1シートをcsvデータにして保存したい。
データの範囲はA〜J列(10列)まで。
(A〜J列は空白でもデータ抽出する)
行は2行目からデータ入力のある行すべて。
色々調べてトライしましたがうまくいきません。
OS,Excelのバージョンは
OS)WindowsXP(Version2002) Excel2002
よろしくお願いします。
>色々調べてトライしましたがうまくいきません。
これを手作業で?それともマクロで? いずれにしても、手作業でやると以下。で、これをマクロ記録すると、基本のコードが生成されるけど、それはやったのかな?
1.CSVに落とし込みたいシートのK列から最終列までを選択してクリア 2.1行目を選択してクリア 3.シートタブを右クリック 4.移動またはコピー 5.移動先ブック名のコンボボックスから新規ブックを選択 6.コピーを作成するにティックをつけてOK。 7.このシートだけのブックが新規ブックとしてできあがるので 8.それを名前をつけて保存。ファイルの種類をCSVにする。
これで作業完了。
ぶらっと立ち寄り
有難うございます。
教えていただいた内容で「マクロの記録」をしたのですが、やはり1列目にデータ入力がないと作成されたCSVに1列目が削除されてしまいます。
1列目もデータ入力が無くても空白列として残したいです。
>1列目もデータ入力が無くても空白列として残したいです。 その前に、上の作業手順、3〜7は不要だった。シートが何枚あろうと、保存時のシートのみがCSV変換される。 で、そうですか。1行目を空白行として。 じゃ、1行目をクリアしたあと、以下のおまじないをいれてみて。 Range("A1").Value = vbTab 'おまじない
ぶらっと立ち寄り
>1列目もデータ入力が無くても空白列として残したいです。 データ範囲を罫線で囲ってみたら・・・・。 BJ
列と行をゴチャゴチャにして読んでいた。 要はA〜Jのみ、かつ空白列でも何でもコピー。 行は?2行目からということだけど、1行目も空白行としてコピー? それとも2行目を1行目として? 後者だとして、1行目をクリアした後、↑のおまじないにかえて
Dim c As Range For Each c In Range("A2:J2") c.Value = vbTab & c.Value Next
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2011/6/6 ユーザー名 :
'
'
Columns("K:IV").Select Selection.Delete Shift:=xlToLeft ActiveWindow.LargeScroll ToRight:=-1 ActiveWindow.SmallScroll Down:=-15 Rows("1:1").Select Selection.Delete Shift:=xlUp Sheets("買入アップロード").Select Sheets("買入アップロード").Copy ChDir "C:\Documents and Settings\mew\デスクトップ" ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\mew\デスクトップ\1.csv" _ , FileFormat:=xlCSV, CreateBackup:=False Windows("買入アップロード.xls").Activate End Sub
さっきのおまじない、ちょっと手抜きがあったのでその修正も加味して。 マクロ記録したコードを、ちょっとお化粧直し。
Sub Sample() Dim myPath As String Dim c As Range
Sheets("買入アップロード").Copy '目的にシートのみで新規ブック
'以下は、アクティブブックとなった新規ブックに対して処理
Columns("K:IV").ClearContents 'クリア Rows("1:1").Delete Shift:=xlUp myPath = "C:\Documents and Settings\mew\デスクトップ"
'おまじない
For Each c In Range("A1:J1") If c.Value = Empty Then c.Value = vbTab & c.Value Next
Application.DisplayAlerts = False 'うっとおしいメッセージをださない
ActiveWorkbook.SaveAs Filename:=myPath & "\1.csv" _ , FileFormat:=xlCSV, CreateBackup:=False
'ActiveWorkbook.Close savechanges:=False 'もし作成後閉じたければ Application.DisplayAlerts = True '以降メッセージはだしていいよとVBAに教える
End Sub
ぶらっと立ち寄り
最後に1つ質問ですが、現状のマクロだと空白の行もCSVに抽出した際に認識されている様です。
空白の列はCSV出力から除外したいのですが、可能でしょうか?
>空白の列はCSV出力から除外したいのですが、可能でしょうか?
空白の「行」かな?
で、列は空白列でもA〜JまでCSVに持っていくけど、元の2行目からの行の中で空白行は削除したいということ?
そうであれば、保存の前に、間の空白行を削除するということになるけど。 コードアップして、そうじゃないよといわれると疲れるので返事を待ってから。
ぶらっと立ち寄り
最終入力行の下からの空白行を出力しないようにしたいです。
データが10行まで入力されている場合11行目以降の空白のセルを出力しないという事です。
行数はその時々で変わります。
>データが10行まで入力されている場合11行目以降の空白のセルを出力しないという事です。
??????? ただでさえ理解力が乏しいのに昼一番でぼぉっとして、どうも言っていることの意味が?
データ最終行より先の行はCSVファイルには、書き込まれていないはず。 というか、書き込まれていると判断したのはなぜ?
メモ帳で、作られたCSVファイルを開いてみて。 書かれているかな?
もしかしたら、エクセルで開いたら、11行目以降(きっとXL2003なら65536行目まで)そこに 表示されているからってこと?
ぶらっと立ち寄り
そうだね。システムの人に調べてもらって。 コード見たらわかると思うけど、行については1行目を削除しているだけで、あとは何もしていない。 あるはずのない198行目、199行目、200行目。なんとなく、ここが空白ではなく、見えない なにか(それこそ、タブとか改行とかヌルとかとか)があるのかもね。
以下は、せめて、システムに相談する前に。 1.メモ帳で、開いて、198行目、199行目、200行目にあたるところに何か表示されてないか確認。 2.元ねたのシートを表示しておいて以下のマクロを実行。 表示されるアドレスが、データが存在すると認識している領域と同じかどうか確認。
もし、目に見えないゴミがシート上にあるとすれば、その種類にもよるけど、それらをCLEAN関数でクリアするというのも 一考の価値あるかなぁ・・・。
Sub Test() MsgBox ActiveSheet.UsedRange.Address End Sub
ぶらっと立ち寄り
一度システムの部署に聞いてみます。
システム側のスクリプトかなんかのエラー行数ではないでしょうか? (momo)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.