
タイトルの通りとなりますが
現在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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でのファイルの読み込み方
-
VBAで新しい日付順にファイルを...
-
他のExcelファイルのVBAコード...
-
VBAでPowerPointからExcelにデ...
-
テキストファイルの重複
-
[ASP+File操作]長いファイル名...
-
ページレイアウトをHTMLファイ...
-
マクロでの処理結果をログファ...
-
VBScriptについて教えてください!
-
UTL_FILE_DIRについて
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
'msimg32.lib'は通常どこにある...
-
これってパソコンの最適化が完...
-
binファイルを解凍したいの...
-
win10の「フォト」で、「次へ」...
-
住所録の新旧統合の仕方?
-
iTunes データ移動に失敗しました
-
ファイルオープンの速度を速く...
-
コマンドプロンプトの「%1」と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ある文字列を含む行の抽出
-
特定フォルダ内のテキストファ...
-
VBAでPowerPointからExcelにデ...
-
VB6側からテキストファイルをク...
-
BCPユーティリティの使用法_...
-
Excel.VBA テキストファイルを...
-
unicode文字列(日本語)のファイ...
-
テキストファイルの行頭に文字...
-
access vbaでCSVファイルを文...
-
複数行の文字列を変数として使...
-
バッチでiniファイルの編集
-
excelにテキストファイルの指定...
-
RandomとBinaryモードの違い
-
時間短縮のために、テキストフ...
-
テキストファイルを直接置換す...
-
VB.NETでテキストファイルからH...
-
C#でのファイル編集と上書き保...
-
ExcelVBAで以下のマクロを作成...
-
VBSを用いてIPアドレスを取得し...
-
VBAで新しい日付順にファイルを...
おすすめ情報
CSVファイルをこの画像のように編集したいです。
方法は、マクロでもcommandからでも、一般的な方法ですと助かります。
ちなみにCSVはFirefoxでimacrosを使って出力しております。
ご指南ありがとうございました。
一部の問題は自己解決するようにしたいと思います。
とても参考になりました。
大変に有能な方々に出会えて感謝します!