人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問です

別添マクロを参考にtxtに保存するときにjun1970とjun1996がうまくできません
うまくできるマクロはありますか

c:\test\のホルダーに複数のCSVファイルがあります
その中のデータのA列2行目から下記データがあります
CSVデータ
jun1970
jun1996
09055556666

結果TXTデータ
1970/06/01
1996/06/01
09055556666
以上の場合
jun1970
jun1996
がうまくできません

何か新しいやり方のマクロでできますか?
参考マクロは別添にあります
よろしくお願いします

1364288720
●拡大する

●質問者: inosisi
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● きゃづみぃ
●100ポイント ベストアンサー
Sub main()
Dim p As String
'対象フォルダを指定してください。
'このフォルダに この実行用のブックは 入れないでください。

p = "C:\test\"

'処理対象となる拡張子を指定して 呼び出します。
Call jikkou(p, "csv")

End Sub


Sub jikkou(p As String, s As String)

Dim bk() As String
Application.DisplayAlerts = False
 
Dim fdb() As String
 
a = 1
f = Dir(p & "*." & s, vbNormal)
Do While f <> ""
 ReDim Preserve fdb(a)
 fdb(a - 1) = f
 a = a + 1
 f = Dir
Loop



For aaa = 0 To a - 2
 k = 0
 ReDim bk(k)
 f = fdb(aaa)
 f1 = Left(f, Len(f) - 4)
 
 ch1 = FreeFile
 Open p & f For Input As #ch1
 
 Do While Not EOF(ch1)  'ファイルの終端かどうかを確認します
 Line Input #ch1, textline  'データ行を読み込みます
 ReDim Preserve bk(k)
 bk(k) = textline
 k = k + 1
 Loop
 Close #ch1
 
 ch2 = FreeFile
 Open p & f1 + "_softbank.txt" For Output As #ch2
 For i = 0 To k - 1

 textline = bk(i)
 flg = 0
 hai = 0
 moji = ""
 outf = 0
 For c = 1 To Len(textline)
 z = 0
 If Mid(textline, c, 1) = """" Then
 If flg = 0 Then
 flg = 1
 Else
 flg = 0
 End If
 z = 1
 End If
 If flg = 0 Then
 If Mid(textline, c, 1) = "," Then
 hai = hai + 1
 If hai = 6 Then
 If Trim(moji) <> "" Then
 If IsNumeric(moji) Then
 If CLng(moji) >= 1 And CLng(moji) <= 12 Then
 outf = 1
 End If
 End If
 End If
 Exit For
 End If
 z = 1
 moji = ""
 End If
 End If
 
 If z = 0 Then
 moji = moji & Mid(textline, c, 1)
 End If
 Next c
 
 If outf = 1 Then
 Print #ch2, textline  'データの書き込みをします
 End If
 Next i
 Close #ch2
 
Next aaa

Application.DisplayAlerts = True

End Sub

これだけでいいです。


inosisiさんのコメント
ありがとうございます うまくいったんですがカンマ区切りでした タブ区切りに変更していただくと助かります よろしくお願いします

きゃづみぃさんのコメント
If Mid(textline, c, 1) = "," Then ↓ If Mid(textline, c, 1) = vbTab Then

inosisiさんのコメント
ありがとうございます やってみましたが 「ファイルにこれ以上データがありません」のメッセージがでて止まります カンマ区切りの時はうまくいきました スピードも断然速いです 変更箇所は1ケ所ですよね よろしくお願いします

きゃづみぃさんのコメント
修正箇所は、一か所だけです。 ちなに どの行で 止まりましたでしょうか?

きゃづみぃさんのコメント
こちらでは、タブ区切りでも ちゃんと出力されていました。

inosisiさんのコメント
TXTファイルは出来ていて中身が空の状態です 3つのうち全部空で1個目のファイルに$$$マークがついた状態です

きゃづみぃさんのコメント
中身が空というのは、タブ区切りが判断されなかった恐れがあります。 >|| 秀丸は使用していますでしょうか? 使用していたら 区切りになっている文字(1文字)を選択して \t に置換してみてください。 なお 正規表現にもチェックを入れてください。 そのファイルは 取り込めると思います。 その場合、区切りとなっている文字が タブでは ないということになります。 ||<

きゃづみぃさんのコメント
考えられるのは 区切り文字の違いだけかと思われますので・・・。 If Mid(textline, c, 1) = "," Then の ","ですが、そちらで使用されている区切り文字を 入れてみてください。 つまり "区切り文字" といった感じにすればいいのです。

きゃづみぃさんのコメント
vbTabは タブコードのことです。 区切り文字と言ってるのは CSV(厳密には違うみたいですが)のファイルで使用している文字です。 ちなみに CSVとは カンマ区切りの略らしいです。 タブ区切りの場合は TSVと呼びます。

きゃづみぃさんのコメント
これでOKなんですが、これでダメな場合は、タブ区切りじゃないと 判断されます。

きゃづみぃさんのコメント
セルとセルの区切りをどの文字で判断しているか ということです。 vbTabでダメな場合は、テキストファイルから コピーしてもらうしかないです。 区切りになっている文字をコピーして If Mid(textline, c, 1) = "" Then の "と"の間に 貼りつけてもらうしかないですね。

きゃづみぃさんのコメント
あと 項目の中に改行が 含まれている場合は ありますか?

きゃづみぃさんのコメント
>空白のタブを""でかこってやってみましたがだめでした 区切りで使用している文字をコピーして 貼りつけてもダメですか?

きゃづみぃさんのコメント
いろいろやってもダメだと 最悪、どこかに そのcsvファイルを アップロードしてもらわないと 確認ができませんね。

きゃづみぃさんのコメント
項目1 項目2・・・ となっているところの 項目1と項目2の間の空白をコピーして If Mid(textline, c, 1) = "" Then の "と"の間に 貼りつけるということです。

きゃづみぃさんのコメント
うーん、プログラムも カンマの区切りから タブの区切りに変えるだけですからねぇ。 そのcsvを 圧縮して どこかにアップロードしてもらうしかないですね。

きゃづみぃさんのコメント
ただうまくいかない原因は わからないですよ。

きゃづみぃさんのコメント
こちらでは タブ区切りでも ちゃんと処理ができてました。 謎だらけですね。

inosisiさんのコメント
End If If flg = 0 Then If Mid(textline, c, 1) = vbTab Then の = vbTab Then で良いわけですね

きゃづみぃさんのコメント
vbTab は タブコードなので これでよいです。 マクロは 今回のだけでいいです。

きゃづみぃさんのコメント
https://sites.google.com/site/freestorageosusumehikaku/ 無料のストレージサービスを利用して アップしてもらえればいいです。 CSVファイルは zip等で圧縮してもらったらいいですね。

きゃづみぃさんのコメント
ポイント送信で 送ってもらったほうが いいかな。

きゃづみぃさんのコメント
https://www.hatena.ne.jp/shop/point/sendpoint ここからできます。 1ポイントで メッセージを個別に 送付することができます。

きゃづみぃさんのコメント
IDは そうです。 まだ 届いてないですね。

きゃづみぃさんのコメント
はてな側が 確認するみたいなので 少しは かかると思われます。

きゃづみぃさんのコメント
届きました。 開いてみてみましたが カンマ区切りになっていますが、 これが 処理できないということでしょうか?

きゃづみぃさんのコメント
1行目の見出しは チェックにひっかかって出力されなかったけど ほかの行は 出力されました。

きゃづみぃさんのコメント
ファイルの内容が カンマ区切りでしたので "," で ないと 出力されませんでした。 タブ区切りではないので vbTabにしたらダメです。

きゃづみぃさんのコメント
ActiveWorkbook.Saveは 不要です。 If Mid(textline, c, 1) = "," Then ↓ If Mid(textline, c, 1) = "," or Mid(textline, c, 1) = vbTab Then で カンマとタブを区切りとして扱います。

きゃづみぃさんのコメント
読み込んだファイルをチェックして、読み込んだまま出力しているので カンマ区切りだと カンマ区切りのまま出力されますし タブ区切りだと タブ区切りのまま出力されます。

きゃづみぃさんのコメント
読み込んだデータのカンマをタブに置換して出力するには 若干の修正が必要となります。 Replace(Cells(i, 1), "土屋", "田中") の前に textline = Replace(textline,",",vbTab)を入れて textline = Replace(textline,",",vbTab) Print #ch2, textline 'データの書き込みをします となれば すべてのカンマが タブになります。

きゃづみぃさんのコメント
ああ これは 間違いです。 Print #ch2, textline 'データの書き込みをします の前にです。

きゃづみぃさんのコメント
項目の削除と最終列のタブは 関係ないです。 最終列にタブが必要ならば タブを付与するだけです。 textline = Replace(textline,",",vbTab) ↓ textline = Replace(textline,",",vbTab) & vbTab

きゃづみぃさんのコメント
コメント欄は 長くなっちゃうと 見づらくなっちゃうので 内容が変わるなら 別の質問にしてもらったほうがいいと思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ