タイトルの通りとなりますが
現在Rドライブ直下に
R:\
111a.csv, 222g.csv, 333y.csv・・・
と複数のCSVファイルがあります。
CSVファイルの中身は
1 460-0031
2 愛知県名古屋市
3 中区本丸1−1
4 名古屋城様
5 電話番号
6 営業時間
…
13行目までと続きます。
1.この複数ファイルすべて[1行目から4行目のみ残し、残りの行はすべて削除したい]
2.この複数ファイルすべての行と列を入れ替えたい[1→A 2→B 3→C 4→D]
こちらを一つずつ処理、または同時に処理できる方法はありますでしょうか。
お答えいただけましたら幸いです。
No.11ベストアンサー
- 回答日時:
確認を取らないまま、第三段目に入ります。
>Excelをお使いになるつもりなら、S-JISか、たぶん、Excel2013以上なら、UNICODEも範疇になるとは思います
と書いたにもかかわらず、Excelでは、UTF8のままで処理できるようです。
それで、以下は、UTF8 のままで出力を行っています。
呼び出しを、
ReproduceCSV2 → ReproduceCSV3
に変えてくださっても良いかと思います。
なお、iMacros は、正直なところ、少しいじってはみたものの、よくわかりません。
Class や ID 名前をTAG の後に入れてもきちんと取れません。
私の最近の過去ログのいくつか見ていただければ分かりますが、Excelの中ですべて処理しています。みんなさん、私の作ったものは、あまりお気に召さない召さないようですが……。
一例:関税表
https://oshiete.goo.ne.jp/qa/9690445.html
Sub ReproduceCSV3(fName As String)
'UTF8に変換して出力
Dim i As Long
Dim TL As String
Dim buf As String
Dim AdoStream As Object
Set AdoStream = CreateObject("ADODB.Stream")
With AdoStream
.Type = 2 ' AdTypeText
.Charset = "UTF-8"
.Open
.LoadFromFile fName
Do While Not (.EOS)
If i = 0 Then
buf = .ReadText(-2)
Else
buf = buf & "," & .ReadText(-2) 'adReadLine
End If
i = i + 1
If i >= 4 Then
.Position = 0
.SetEOS
.WriteText buf, 0 ' adWriteChar
Exit Do
End If
Loop
End With
AdoStream.SaveToFile fName, 2 'adSaveCreateOverWrite
AdoStream.Close
Set AdoStream = Nothing
End Sub
同様にこちらのマクロも走らせてみましたが、マクロが表示されない(?)状態になってしまいます。
すみません、マクロの知識がないものですから、自己解決できませんでした。
WindFallerさん、ご面倒をお掛けしてすみません。
No.10
- 回答日時:
こんにちは。
やっとすべて確認が取れました。
<UTF-8 BOM付き> をどう料理するのか、ということで、今、止まってしまいしました。
> ”CSVをエクセルで開く→保存する”
iMacros そのもので、列を行に変換するぐらいは、修正はできるようです。
Excelで吸い上げて変換する必要はまったくないものの、今、この周辺は日本では大混乱の状態のようですね。日本は、この文字コードで頭を抱えているというのは、海外の人には分からないことなのです。「文字化け mojibake」は、そのまま英語でも通用するようです。
以下のコードは、ぜんぜん不満足な内容なのですが、最終的なアプリが何かにも決まってきます。
Excelをお使いになるつもりなら、S-JISか、たぶん、Excel2013以上なら、UNICODEも範疇になるとは思います。今は、当面、S-JIS(現行のWindowsの設定?)の出力にしました。Excel自体では、文字化けはしないはずです。
ここらへんの技術は、私は、まだ開発途上なのです。もう一年ぐらいになります。
UTF-8には二種類ありますが、FireFox とiMacros の利用では、UTF-8 BOM付きで出て来るようです。(もちろん、サイトの設定によるものです)
以下の変更点は、ReproduceCSV ->ReproduceCSV2
ReproduceCSV2 は、Import をAdodb.Stream に替えました。
なお、こちらの読みが外れていたら、以下のコードでは、まったく解決にはなっておりませんので、あらかじめ、お詫びしておきます。
'//
Sub CSVConvert()
Const myFOLDER As String = "R:\"
Dim fName As String
Dim i As Long
Dim buf
fName = Dir(myFOLDER & "u*.csv", vbNormal) '拡張子
Do While fName <> ""
If fName <> "." And fName <> ".." Then
If (GetAttr(myFOLDER & fName) And vbNormal) = vbNormal Then
ReproduceCSV2 myFOLDER & fName '*
i = i + 1
End If
End If
fName = Dir
Loop
MsgBox "finish! " & i, vbInformation
End Sub
Sub ReproduceCSV2(fName As String) '*
'UTF8に変換して出力
Dim ExFno As Integer
Dim i As Long
Dim TL As String
Dim buf
Dim AdoStream As Object
Set AdoStream = CreateObject("ADODB.Stream")
With AdoStream
.Type = 2 ' AdTypeText
.Charset = "UTF-8"
.Open
.LoadFromFile fName
Do While Not (.EOS)
If i = 0 Then
buf = .ReadText(-2)
Else
buf = buf & "," & .ReadText(-2) 'adReadLine
End If
i = i + 1
If i >= 4 Then Exit Do
Loop
End With
ExFno = FreeFile()
Kill fName
Open fName For Output As #ExFno
Print #ExFno, buf
Close #ExFno
End Sub
こんばんは返信がおそくなり誠にすみません。
わたくしの環境は
Windows10pro, Firefox環境でのiMacros, Office2016です。
英語から日本語に変換する際はMojibakeがネックになるのですね。
博識さに感服致します。
さて、先程こちらのマクロを走らせてみました。
[finish 0]と別窓で表示されました。
・CSVの上書きはされておりませんでした
・行列の置換も行われておりませんでした。
恐らくはわたくしの各ソフトウェア間の仕様に対しての認識不足から失敗を招いていると思います。
ご面倒をおかけいたします。
No.9
- 回答日時:
それではこんな感じではいかがでしょうか?
---------------------------------------------------------------
Sub ファイル修正()
Const パス名 As String = "R:"
Dim ファイル名 As String
Dim データ As String
Dim 行数 As Long
Dim 文字列 As String
ファイル名 = Dir(パス名 & "\*.csv")
Do While ファイル名 <> ""
Application.DisplayAlerts = False
Workbooks.Open Filename:=ファイル名
ActiveWorkbook.Save
ActiveWindow.Close
Application.DisplayAlerts = True
行数 = 0
文字列 = ""
Open パス名 & "\" & ファイル名 For Input As #1
Do Until EOF(1)
Line Input #1, データ
行数 = 行数 + 1
文字列 = 文字列 & "," & データ
If 行数 >= 4 Then Exit Do
Loop
Close #1
If 行数 >= 4 Then
文字列 = Mid(文字列, 2)
Kill (パス名 & "\" & ファイル名)
Open パス名 & "\" & ファイル名 For Output As #1
Print #1, 文字列
Close #1
End If
ファイル名 = Dir()
Loop
MsgBox ("終了しました")
End Sub
早速ありがとうございます。
現在試してみましたが
・マクロは最後まで走ります
・文字化けが改善されません
・何故か2行目、3行目にも文字列(文字化け)が入力されております。
せっかくご思案頂いたのにすみません。
No.8
- 回答日時:
#5の回答者です。
>・文字化けしてしまう
>・行と列の置換が行われない
少なくとも、文字化けについては、アップロードする時に、ちらっと頭に浮かびました。なぜなら、この処理は、SJISで行っていたからです。
試しに、ANSIなら成功するかもしれません。
たぶん、文字認識していないから、そのようになるわけです。
ただ、CSV でこういうケースは、はじめてぐらいですね。
その元のファイルは、ExcelやOffice のアプリで生成されたものではありませんね。
もしかしたら、改行コードもCRLF ではないかもしれません。
ご面倒かもしれませんが、文字コードを調べてみていただけますか?
もしくは、どのような文字化けかみれば、だいたい想像付きます。
ただし、私が扱えるは、UTF-16(Unicode)までで、それ以上のものは、未知の世界です。
ご面倒おかけしております。
おっしゃる通り、CSV出力は外部ツールを使っておりました。
よって
CSVをエクセルで開く→保存する
の後に、WindFallerさんのマクロを動作させましたらしっかりと走りました!
作製頂いたマクロの前に、”CSVをエクセルで開く→保存する”ということは可能でしょうか。
厚かましいお願いですがもしも可能でしたらご教示ください。
No.7
- 回答日時:
念の為ですが、本当にRドライブ直下でしょうか?
もしかしたらネットワークドライブとかではないですよね?
Rドライブ直下です。
CSV出力は外部ツール(firefox & imacros)を使っております。
CSVをエクセルで開く→保存する
の後に、GooUserラックさんのマクロを動作させましたらしっかりと走りました!
作製頂いたマクロの前に、”CSVをエクセルで開く→保存する”ということは可能でしょうか。
厚かましいお願いですがもしも可能でしたらご教示ください。
No.5
- 回答日時:
ドライブを指定するだけでよいです。
#3さんのは見ずに作ったけれども、判を押したように同じになりました。
一応、何度か検証されています。
'// 標準モジュール
Sub CSVConvert()
Const myFolder As String = "R:\" 'ドライブ
Dim fName As String
Dim i As Long
Dim buf
fName = Dir(myFolder & "*.csv", vbNormal) '拡張子
Do While fName <> ""
If fName <> "." And fName <> ".." Then
If (GetAttr(myFolder & fName) And vbNormal) = vbNormal Then
ReproduceCSV myFolder & fName
i = i + 1
End If
End If
fName = Dir
Loop
MsgBox "finish! " & i, vbInformation
End Sub
Sub ReproduceCSV(fName As String)
Dim InFno As Integer
Dim ExFno As Integer
Dim i As Long
Dim TL As String
Dim buf
InFno = FreeFile()
ExFno = FreeFile()
Open fName For Input As #InFno
Do While Not EOF(InFno)
Line Input #InFno, TL
buf = buf & "," & Trim(TL)
i = i + 1
If i >= 4 Then Exit Do
Loop
buf = Mid(buf, 2)
Close #InFno
Kill fName
Open fName For Output As #ExFno
Print #ExFno, buf
Close #ExFno
End Sub
ご返信ありがとうございます。
わたしの環境がわるいのかもしれません。
ご記述いただきましたマクロで成功しませんでした。
Windows10pro 64bit Office2016です。
・文字化けしてしまう
・行と列の置換が行われない
のですがなにが問題だと思われますでしょうか。
お手ほどき頂けますと助かります。
No.4
- 回答日時:
No.3 の補足
Rドライブ直下の4行以上のCSVファイルに対してのみ作用します。
繰り返して実行しても、加工されたファイルは1行になっているので対象外になるので問題は有りません。
「Const パス名 As String = "R:"」の「R」の部分さえ変更すれば他のドライブやパスでも使えます。
No.3
- 回答日時:
とりあえずこんな感じではいかがでしょうか?
-------------------------------------------------------------------
Sub ファイル修正()
Const パス名 As String = "R:"
Dim ファイル名 As String
Dim ファイル番号 As Long
Dim データ As String
Dim 行数 As Long
Dim 文字列 As String
ファイル名 = Dir(パス名 & "\*.csv")
Do While ファイル名 <> ""
行数 = 0
文字列 = ""
Open パス名 & "\" & ファイル名 For Input As #1
Do Until EOF(1)
Line Input #1, データ
行数 = 行数 + 1
文字列 = 文字列 & "," & データ
If 行数 >= 4 Then Exit Do
Loop
Close #1
If 行数 >= 4 Then
文字列 = Mid(文字列, 2)
Kill (パス名 & "\" & ファイル名)
Open パス名 & "\" & ファイル名 For Output As #1
Print #1, 文字列
Close #1
End If
ファイル番号 = ファイル番号 + 1
ファイル名 = Dir()
Loop
MsgBox ("終了しました")
End Sub
-------------------------------------------------------------------
早速ありがとうございます。こんなに早くお手ほどき頂けるとは思いませんでした。
わたしの環境がわるいのかもしれませんが成功しませんでした。
Windows10pro 64bit Office2016です。
・文字化けしてしまう
・行と列の置換が行われない
のですがなにが問題だと思われますでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
大量のCSVデータを行列の変換をしてエクセルデータにまとめる方法について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチでiniファイルの編集
-
複数行の文字列を変数として使...
-
テキストファイルを直接置換す...
-
access vbaでCSVファイルを文...
-
VBAでPowerPointからExcelにデ...
-
iniファイルとの比較(iniファイ...
-
fortranでのcsvファイルを出力...
-
大量のフォルダからひとつのフ...
-
.txtではなく.logの方が良いの...
-
binファイルを解凍したいの...
-
コマンドプロンプトのエラーに...
-
バッチでテキストファイルから...
-
コマンドプロンプトの「%1」と...
-
バッチ処理でファイルの中身を...
-
win10の「フォト」で、「次へ」...
-
Latexで図番号だけを「図1.1」...
-
外部exeに対しての引数受け渡し
-
BATファイルについて
-
slk拡張子のエクセルファイルを...
-
特定フォルダ内のファイルを自...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定フォルダ内のテキストファ...
-
Excel.VBA テキストファイルを...
-
VBAでPowerPointからExcelにデ...
-
複数行の文字列を変数として使...
-
BCPユーティリティの使用法_...
-
access vbaでCSVファイルを文...
-
VB6側からテキストファイルをク...
-
ある文字列を含む行の抽出
-
VBAで新しい日付順にファイルを...
-
unicode文字列(日本語)のファイ...
-
テキストファイルの行頭に文字...
-
fortranでのcsvファイルを出力...
-
複数のCSVの指定行だけを残し、...
-
時間短縮のために、テキストフ...
-
テキストファイルを直接置換す...
-
バッチでiniファイルの編集
-
VBSを用いてIPアドレスを取得し...
-
excelにテキストファイルの指定...
-
A列をテキストファイル名に、B...
-
ExcelVBAで以下のマクロを作成...
おすすめ情報
CSVファイルをこの画像のように編集したいです。
方法は、マクロでもcommandからでも、一般的な方法ですと助かります。
ちなみにCSVはFirefoxでimacrosを使って出力しております。
ご指南ありがとうございました。
一部の問題は自己解決するようにしたいと思います。
とても参考になりました。
大変に有能な方々に出会えて感謝します!