[[20110301193551]] 『セル1個ごとに改行したテキスト保存』(たまみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『セル1個ごとに改行したテキスト保存』(たまみ)

 エクセル表のデータをhtmlに変換しようとしています。
 で、そのhtmlはclassやらいっぱい編集しなければならず
 また、私はたくさん改行しないとhtmlを理解出来ない人です。
 なので、セルのデータ1個ずつ改行したテキストファイルが欲しい。
 テキスト形式では表の1行で改行されます。
 何か良い方法があるものでしょうか?

 OS:XP EXCEL:2002

 単純に EXCEL を HTML 形式で保存ではまずいのですか?

 また、指定範囲を 一列にしたファイルが欲しければ、CSV で保存後に 「,」を
 改行に置換したものではダメなのでしょうか。
 (Mook)

 >「,」を 改行に置換
 それは思いついたことなのでチャレンジしてました。
 「,」が削除されました。
 「改行」って何を入力すれば良いんですか?
 こう質問すれば良かったのかな?
 でもそれじゃあエクセルじゃないような^^;

 Dim FSO As Object

 '選択セル範囲をTab区切りのテキストファイルとして書き出します。
 Sub test()
  Dim r As Range
  Dim newws As Worksheet
  Dim wsrng As Range
  Dim newwb As Workbook
  Dim txtpath As String
  Dim newtxtpath As String
  Dim txtstr As String
   'セルが選択されていなかったら何もしない
   If TypeName(Selection) <> "Range" Then Exit Sub
   'テキストファイル保存名指定
   txtpath = CreateObject("WScript.Shell").SpecialFolders("Desktop") _
    & "\" & Format(Now, "yymmdd_hhmmss") & "_1" & ".txt"
   '置換後のテキストファイル保存名指定
   newtxtpath = CreateObject("WScript.Shell").SpecialFolders("Desktop") _
    & "\" & Format(Now, "yymmdd_hhmmss") & "_2" & ".txt"
   Application.ScreenUpdating = False
   '選択セル範囲に対して処理
   Set r = Selection
   '作業用ブック
   Set newwb = Workbooks.Add
   '作業用シート
   Set newws = newwb.Worksheets(1)
   '作業用セル範囲
   Set wsrng = newws.Cells(1, 1).Resize(r.Rows.Count, r.Columns.Count)
   '選択セル範囲を作業用セルに転記
   wsrng.Value = r.Value
   'Tab区切りで保存
   newwb.SaveAs Filename:=txtpath, FileFormat:=xlText, CreateBackup:=False
   newwb.Saved = True
   '作業用ブックを閉じる
   newwb.Close
   Application.ScreenUpdating = True
   Set FSO = CreateObject("Scripting.FileSystemObject")
   '生成したテキストファイル内容読み込み
   txtstr = Txtinput(txtpath)
   '読込んだテキストファイルの内容置換(Tab→改行)
   txtstr = Replace(txtstr, vbTab, vbCrLf)
   'テキストファイル出力
   Call TxtOutput(newtxtpath, txtstr)
   '変数の開放
   Set FSO = Nothing
   Set wsrng = Nothing
   Set newws = Nothing
   Set newwb = Nothing
   Set r = Nothing
 End Sub

 'テキストファイル読み込みFunction
 Function Txtinput(ByVal txtpath As String) As String
  Dim f As Object
   If FSO.getfile(txtpath).Size = 0 Then
      Txtinput = ""
   Else
      Set f = FSO.OpenTextFile(txtpath)
      Txtinput = f.ReadAll
   End If
 End Function

 'テキストファイル書き出しFunction
 Function TxtOutput(ByVal newtxtpath As String, newtxtstr As String)
  Dim newf As Object
   Set newf = FSO.CreateTextFile(newtxtpath)
   newf.write newtxtstr
   newf.Close
   Set newf = Nothing
 End Function

 (カリーニン)

 Mookさんのレスが目に入っていませんでした。
 失礼しました。

 しかもコピペ時に貼り付け忘れが有りました。
 ↓

 を↑のレスの最初に入れるつもりでした。

 >最初のテキストファイル出力時にTabを改行に変更、あるいは
 >セルをループで文字列変数に改行を挟んで格納していくのが
 >いいのかもしれませんが、

 (カリーニン)

 EXCEL だけでやるなら VBA ですね。
 改行へ置換するには、改行をサポートしたエディタが必要だと思います。

 VBA で fso でやるのだったら、
 fso.CreateTextFile("data2.csv").Write _
    Replace( fso.OpenTextFile("data.csv").ReadAll(),",",vbNewLine )
 のような感じでできそうですが、なんて書いていたら、カリーニンさんが
 コードを提示されてましたね。
 (Mook)

 皆様、どうもありがとうございました。
 カリーニン様におかれましては
 私の質問を読んでから作成されたのでしょうか?
 チャチャッとこういうものを作成できるなんて素晴らしいです。
 申し訳ないことに私の能力を超えています。
 他の皆様の参考となれば幸いです。
 また、「改行」の変換は私の(CrescentEve)では出来ないと言うことなんですね。

 たまみ


 CrescentEve は HTML 編集には重宝ですが、Editor としては多機能より、軽快に
 重点を置いているようで、改行を検索・置換の対象とできないようです。

 キーマクロがあるエディタであれば、検索と改行でも代用できますが、その機能も
 ありませんので、他のエディタを使う必要があります。
 改行やキーマクロに対応しているものはいろいろあると思いますが、私の
 手持ちでは、notepad++, Apsaly,サクラエディタ, WZ Editor(有償)といったところでした。
 高機能で無償では Microsoft の Visual Web Developer の Express 版では
 もちろんできますし、HTML編集には非常に便利です。 

 脱線しました。
 カリーニンさんので解決したのであれば、そちらでよろしいのではないでしょうか。

 ところで EXCEL での HTML 保存がダメなのはファイルが大きすぎる等の理由ですか?
 体裁だけなら、EXCEL のように見えるので、不自由はないと思いますが。
 (Mook)

 >カリーニン様におかれましては
 >私の質問を読んでから作成されたのでしょうか?

 えっと・・・。

 種明かしをしますと、つい最近他のサイトですが、
 「リストボックスの内容を高速でテキストファイル保存するには?」
 というような内容の質問させていただきました。

 その質問時に提示させていただいたコードを少し改造したものが
 今回提示したコードです。

 コードは試行錯誤して作成しますので作成時にはやはり時間が掛かり
 ます。

 でも一度作成すると使いまわしができますので以降の作業の効率化
 になります。

 場合によってはマクロを使うより一般機能でやったほうが早いとき
 もありますので経済性を考える必要があります。

 (カリーニン)

 単純にこんなのでも出来そうですけど、どうですか?

  Sub test()
  Dim n As Long, r As Range, SavePath As String
  SavePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & "test.txt"
  n = FreeFile
  Open SavePath For Output As #n
    For Each r In Selection
      If r.Text <> "" Then Print #n, r.Text
    Next
  Close #n
  End Sub

 Alt+F11でVBEを出して、挿入⇒標準モジュールの所にコピペ
 範囲を選択してから実行でデスクトップにtest.txtが作成されます。
 (momo)

 Excelでのhtml保存が使えないのは、その記述が気に入らないからです^^;

 また、これに関連しますが

 今のソースにマージすると非常に理解しづらくなり、その整形に手間がかかります。

 タグのない(データのみ)のテキストが欲しくなる次第です。

 たまみ


 表が一部分だけってーなら、こっちのページが便利だけど。
 すごい大きい表だとダメかな?

 エクセルシートをHTMLテーブルに変換しちゃう君 (ββ)
 http://styleme.jp/tool/xls2html/
 (1111)

 前回は理解出来ず、力業で1行ずつテキストにしました。

 今日また同様の作業があり、momo様の提案に「こうかな?こうかな?」でチャレンジしてみました。

 うまくいきました!すばらしいっ!

 マクロ(VBA?)ってすごいですね!

 どうもありがとうございました。

 たまみ

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.