タイトルの通りとなりますが
現在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も見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
【お題】 ・こんなおせち料理は嫌だ
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
大量のCSVデータを行列の変換をしてエクセルデータにまとめる方法について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数行の文字列を変数として使...
-
大量のフォルダからひとつのフ...
-
これってパソコンの最適化が完...
-
コマンドプロンプトの「%1」と...
-
Latexで図番号だけを「図1.1」...
-
binファイルを解凍したいの...
-
バッチ処理でファイルの中身を...
-
コマンドプロンプトのエラーに...
-
同名のフォルダを検索・削除したい
-
Microsoft MonthView Controlに...
-
バッチファイルが不正終了して...
-
VBAでワークシートを引数として...
-
win10の「フォト」で、「次へ」...
-
exeファイルを実行するとコマン...
-
MP3の曲名のリストを作り、印刷...
-
autorun のコマンドのなかの -f...
-
大至急お願いします。Pythonの...
-
バッチでテキストファイルから...
-
texのcite関連のエラー
-
【VBA】テキストファイルから特...
マンスリーランキングこのカテゴリの人気マンスリー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を使って出力しております。
ご指南ありがとうございました。
一部の問題は自己解決するようにしたいと思います。
とても参考になりました。
大変に有能な方々に出会えて感謝します!