for /f "tokens=1-5 delims=," %%A in (TEST_DATA.csv) do ( MsgBox MyFol & "を処理します。"
今日はちょっと短いですが、Windowsバッチについて。, 業務でPGを書いているとよくあるのがCSVファイルの取り込み。 その行を除いて別のファイルへコピーするという方法が一般的ですね。
最初のファイルのみ1行目を出力.
Set MyObj = CreateObject("Shell.Application") _
こんな感じです。, ※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。 'ThisWorkbookにシートを追加して処理
茨城,男 '次のファイルへ
お世話になります。m(__)m
出身県,性別
txtから特定の行のみをとりだし、変数に入れたいです。 どうも見つかりません。ご存知の方がいればお教え願いたいと思います。, batファイルを作成していて、 Dim MyFnm As String
Range("A65536").End(xlUp).Offset(1, 0).Select
Workbooks(buf).Activate
このファイルをEXCEL形式で開くと、1行目にフィールド名(A~Z列で固定)、2行目以降にデータが入っています。行数はファイルにより1~100行程度で変動します。
Set MyObj = Nothing
OutTmp = FileName & "," & LineNum & "," & ReadCsv.ReadLine()
というフリーのテキストエディタをインストールすると、YokkaGrepというソフトがセットでインストールされます。
今、複数のCSVファイルがあり全てを結合させるのにコマンドプロンプトを利用し、
.TextFilePlatform = xlWindows
このCSVデータをすべてひとつのファイルに結合したいのですが、
x = CSVQRY(ws, fd & fn, ws.Cells(n, 2), s)
実は、これだと元が何というファイルのCSVだったかが結合後ではわからなくなります。
do until myfile = "" (Input_1.txt)
n = IIf(n = 0, 1, n + n1)
.Refresh False
'ファイル名をA列にセット
Set obj = Nothing
Next
If MyObj Is Nothi...続きを読む, batファイルを作成していて、 .Delete
close #2 1.Bという空のファイルを生成する。
Set files = Application.FileSearch 111 buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Dim n As Long
If MyObj Is Nothing Then Exit Sub
Dim i As Long
エクセル2010に変更した後、マクロが使えなくなりました。 dim myPath as string Dim n As Long
.BrowseForFolder(0, "SelectFolder", 0)
-----------------------------------------
cBook.ActiveSheet.UsedRange.Copy for /F "tokens=3,5 delims=," %%i IN (TEST_DATA.csv) DO @(if %%j==987 set %%i=654 echo %i %j ) 現在考えていることは、 Err.Clear
1.for文を使用して指定のカラムを抜く(3カラム目と5カラム目を抜く)) -------------------
Private Sub try()
(Merge.txt) Function mySearch(files As FileSearch, myDir As String) As Integer を参照してみてください。同じ質問があったので気がつきました。, すみません。質問を勘違いしていました。
まあ、適当に改変して、上記の問題を解決してください。, csvファイル数は700~1000個程度でひとつのフォルダに格納されています。
Dim j
123,456,789,321,987
mypath = thisworkbook.path & "\" Private Sub try()
Sub CSVまとめsample()
(12)と書かれた文字列がある行だけを抜きだしたり
やはり既出回答でも指摘されているように、勿論マクロ有効で開いてマクロをキチンと実行する必要があります。, こちらのような質問相談掲示板でも非常に良く寄せられるご質問の一種ですが、あなたが発見したマクロでやってるようにCSVファイルをエクセルで開いて操作すると、しばしばデータが変わってしまいます。今まで全く問題が無かったのでそこは絶対心配無いという事なら、勿論構いませんが。
End Function, しばらく前に書いた事があるコードです。
Dim ret As String
All Rights Reserved. お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。, WindowsでPythonで外部コマンドを動作させる時はどうしているのでしょうか?, http://www.microsoft.com/japan/msdn/library/ja/j …, http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop. 行いたい動作は、 お願いします。, 書き換えるというよりは、
Dim MyObj As Object
'行数overしてもエラーかからないため取り込み直し
End Sub
Dim x As Long
open mypath & myfile for input as #2 以下のコードをテキストファイルにコピーし、適当な名前.vbsで保存します。
Windowsのコマンドプロンプトはデフォルトで文字コードがSJISであるため、chcp 65001で文字コードを設定し直しています。 Destination:=rs)
Dim n As Long
・結合後の1行目には項目名を残したい。
cBook.Close '----ここからコード
If objRE.Test(Ucase(FileName)) Then
Set ws = Sheets.Add
検索結果をテキストファイルやcsvファイルに出力することや、検索文字列を含む行を削除などの機能もあります。
sub macro1() …. Destination:=.Range("B" & n))
Workbooks(buf).Close SaveChanges:=False
If Len(fd) = 0& Then Exit Sub
------------------- 列の項目は定形で、10~200行のデータが書かれたCSVファイルが1つのフォルダに多数あります。 特定の文字列が書かれた行だけを
Else
Dim MyFnm As String
'---------------------------------------------------------------------
3.CCC
既出回答にあるようにエクセルとか使わずにバッチで処理してしまう方が私も簡単とは思いますが、そこはまぁご質問なので、とりあえずベタなマクロでやらせてみると… MyFnm = Dir()
Application.CutCopyMode = False
x = CSVQRY(ws, fd & fn, ws.Cells(n, 2), 1&)
今まで私の周りにはあまりバッチファイルを作ろうとする人がいませんでしたが、単純な処理であればササッと作れてしまうので、広めていきたいです。, SI企業の上流SEがトノサマ商売を脱却するために技術を学ぶためのブログ 行いたい動作は、 '外部データ取り込み
こんにちは。 … Do Until ReadCsv.AtEndOfStream = True
Sheets("Sheet1").Range("A1:J1000").Copy
出身県,性別 Dim MyStr As String
ByRef rs As Range, _
Dim ret As String
Dim n As Long
神奈川,男 ここで、(できればですが)EXCELにマージするにあたり、1行目のみフィールドの値、2行目以降にそれぞれのcsvの2行目以降データの値を入れていくようにしたいです。つまり、フィールド名の行が何行も出てくるのを避けたいです。
For Each FileName In Folder.Files
findstr /n /r "." もっと他の条件があれば、さらに複雑な処理になります。, txtファイルで
Dim objRE
End If 詳しくご説明されているようなのでチャレンジしてみたいと思います。, 「バッチファイル 書き方」に関するQ&A: DOSのバッチで、テキストファイル中の文字を置換したい, 「目 書き方」に関するQ&A: 民事では控訴しても一審の判決を変えないのが一般的?, 「Python Windows」に関するQ&A: コマンドプロンプトからファイル実行について, ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!, バッチにて複数のcsvファイルを結合するときに、対象のファイルを日付で範囲指定したい, 今仕事で、CSVファイルが400ファイル程あり、これを一つの
456
type Input*.txt > Merge.txt
ブログを報告する, アイドルに裏切られたとか言ってるけどお前らそれAV女優が結婚しても同じこと言えんの?. If obj Is Nothing Then Exit Function
そんなときにこのバッチファイルを使うと便利ですね。, 非常に単純で、バッチファイルが存在しているフォルダ配下にある.csvファイルを、1行目を無視してmerge.csvファイルにマージするものです。個別に処理の内容を見てみます。, 今回のバッチファイルでは、取り込み対象のCSVファイルの文字コードがUTF-8であることを想定しています。 buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Set Folder = fso.GetFolder(strScriptPath)
If i > 1 Then .Filename = "*.csv" loop ByVal sr As Long) As Long
LineNum = LineNum + 1
With Sheets.Add
ret = obj.Items.Item.Path & "\"
on error resume next Dim fn As String
1.AAA
3.テキストファイルの2行目を変数Textに入れる(set Text=222) .Parent.Names(.Name).Delete
ActiveSheet.Paste
上の階層から渡ってきたファイル名(%%a)の中身に対し、1行目をスキップして処理を実施しています。 Dim j
MyFol = MyObj.self.Path & "\"
3.654に変更した変数を3カラム目の値として入れる saburo-----B.csv-----123. errHndler:
------------------- .Cells(.Range("A65536").End(xlUp).Row, 1). ReadCsv.Close()
栃木,女 End With
Workbooks(buf).Activate
errChk:
神奈川,男 ・
x = 1
Dim x As Long
.BrowseForFolder(0, "SelectFolder", 0)
私は more を思い付かなかったまでで... ret = i & "files.done"
どなたか修正して頂けないでしょうか? バッチの概要 まずはバッチファイルの中身です。 @echo off chcp 65001 for /f %%a in ('dir /s /b /a-d *.c… SI業界で脱トノサマSE 上流SI企業のSEがトノサマ商売を脱却するために技術を学ぶためのブログ. Range("A65536").End(xlUp).Offset(1, 0).Select
全レコードに挿入されているのが理想です。
111,222,333,444,555 'ファイル名をA列にセット
結果はout.csvというファイルに書き出しています。 Application.ScreenUpdating = True
On Error GoTo errHndler
CSVQRY = -1
Sub CSVまとめsample()
'スクリプト名を含まないフルパスを編集する
Do While buf <> ""
do until eof(2) Dim ReadCsv
バッチファイルを使用して、csvファイルの読み込み~編集を行いたいと思っております '---------------------------------------------------------------------
そろってヘッダが付いてる場合など 複数のcsv … dim myFile a...続きを読む, バッチでファイルの編集をしたい 結合.txtの中身は
Loop
'フォルダを選択する
上記のcsvファイルを読み込み、
栃木,女 loop '選択なければ処理を抜ける
・それぞれのファイルの1行目にある項目データを削除したい。
3.CCC
Set MyObj = CreateObject("Shell.Application") _
Dim i As Long
End Sub テキストファイルの内容は以下の通りです。 2.BBB
_
主にプログラミングやサーバ構築、Apple関連について書きます。たまに別のことも, chika0321さんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog Dim n1 As Long
上記のcsvファイルを読み込み、 ※今手元にWindowsの環境がないので、イメージで書きます。, Excelやテキストエディタを使ってももちろん良いのですが、繰り返し実行したりする可能性がある場合は手軽に実行できるようにしたいですね。世の中にはバッチ芸人なる職人技を持った人もいるみたいです(類義語:シェル職人)。 参考になるようだったら応用してみてください。
どのような手があるか教えて下さい。, 「Python Windows」に関するQ&A: WindowsでPythonで外部コマンドを動作させる時はどうしているのでしょうか?, 「Python 環境」に関するQ&A: python 環境変数を設定したい, G_Aminoさん、早速のご回答と詳しいご説明ありがとうございます。
_
End If
Code Page Identifiers (Windows), カレントパスより下に存在する.csvファイルごとに処理を実施しています。dir /s /b /a-d *.csvの処理結果を%%aで受取り、for文を回しています。 MyStr = "検索条件を満たすファイルはありません。"
どのようにすれば良いか教えて下さい。, No.4です。 という処理を実行させたいのですが、 fd = ThisWorkbook.Path & "\"
Dim buf As String, i As Long
特にマスタ登録する際にはよく使われると思います。 '新規に作成するファイル
close #1 となる。結局 for 文を使いまわす事になります。 set fso = Nothing
Next i myfile = dir() 200のファイルが同じフォルダにあること前提で書いてます。
ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか? Dim MyFol As String
Dim i As Long
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。 Dim MyObj As Object
Dim fso
myfile = dir(mypath & "*.csv") 4.変数Textを使用し色々処理をする ret = Err.Number & vbTab & Err.Description
Dim ws As Worksheet
とすると、2つめのタイトルが付与されてしまいます。
地道にコピペするのは時間がかかるのでマクロで処理を行いたいと思います。
>新しいブックで一つのシートにまとめなくてはいけません
'Dir関数を使って指定フォルダ内csvファイルを順次処理
大量にあるcsvファイルを1つのcsvて列方向にまとめたいです。 現在使用しているコードは下記であり、行方向に結合することはできました。これを行方向ではなく、列方向にまとめる方法はございますでしょうか。ご回答の程、よろしくお願いいたします。 -----ソースコード-----Option Sub Sample1()
Copyright (C) 2001 - 2020 hatena. ・
OutTxt.WriteLine(OutTmp)
Application.ScreenUpdating = False
Dim s As Long
1つのブックで外部データの取り込みでCSVを次々に選択して
strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")
Dim strScriptPath
内容: 昔書いた事があるサンプルです。
元ファイル:TEST_DATA.csv End Sub
よろしくお願いします。, すみません。質問を勘違いしていました。
'ActiveWorkbookにシートを追加して処理
MyFnm = Dir(MyFol & "*.csv")
set Folder = Nothing
例えば
現在考えていることは、 参考になるようだったら応用してみてください。
End Function, 過去の質問の中から、素晴らしい結合のマクロを見つけましたが、パソコンをwindows7にエクセルを End Function
データの持ち方として
千葉,女 ○CSVファイル2
222 Application.CutCop...続きを読む, CSVファイルの特定行を削除するということは可能なのでしょうか?
どなたか修正して頂けないでしょうか?
If i > 0 Then