Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1564 / 13644 ツリー ←次へ | 前へ→

【73443】CSV File作成について yokomichi 13/1/11(金) 15:16 質問[未読]
【73445】Re:CSV File作成について UO3 13/1/11(金) 15:47 発言[未読]
【73446】Re:CSV File作成について yokomichi 13/1/11(金) 16:06 お礼[未読]
【73447】Re:CSV File作成について kanabun 13/1/11(金) 17:04 発言[未読]
【73456】Re:CSV File作成について yokomichi 13/1/12(土) 11:15 質問[未読]
【73457】Re:CSV File作成について kanabun 13/1/12(土) 15:09 発言[未読]
【73497】Re:CSV File作成について yokomichi 13/1/16(水) 12:15 質問[未読]
【73498】Re:CSV File作成について UO3 13/1/16(水) 13:09 発言[未読]
【73500】Re:CSV File作成について yokomichi 13/1/16(水) 14:41 お礼[未読]
【73458】Re:CSV File作成について UO3 13/1/12(土) 15:31 発言[未読]
【73461】Re:CSV File作成について yokomichi 13/1/12(土) 21:38 お礼[未読]

【73443】CSV File作成について
質問  yokomichi  - 13/1/11(金) 15:16 -

引用なし
パスワード
   以下のようなデーターがあります
No 運送会社 納入先      住所                  TEL
1  堺運輸(株) 横浜工場 〒230-0045 横浜市鶴見区末広町2-4  03-333-2222    
これをCSV Fileにしました
〒230-0045の後に改行コードがはいっています

 結果
 No;"運送会社";"納入先";"住所";"TEL";
 1;"堺運輸(株)";"横浜工場";"〒230-0045
 横浜市鶴見区末広町2-4";"03-333-2222";

質問
1----最初のNoには””が書かれません
2----データーに改行コードがある場合その位置に
   <BR>の文字を挿入する
   ";"〒230-0045<BR>横浜市鶴見区末広町2-4";" 
以下のように書きました
よろしくお願いいたします

Sub CSVWrite()
Dim iRow As Integer 'セルの行位置
Dim iCol As Integer 'セルの列位置
Dim fFileNo As Integer 'ファイル番号
Dim fFileName As String '出力ファイル名
Dim cData As String '出力データ
Dim DQUAT As String 'ダブルクオーテーション
Dim j As Integer
Dim Dname(10) As String

fFileName = "D:\CSVMac\CSV.csv" '出力ファイル名
fFileNo = FreeFile(0) 'ファイル番号を取得
Open fFileName For Output Access Write Lock Read Write As #fFileNo 'ファイルオープン
DQUAT = Chr(34) 'ダブルクオーテーション
iRow = 1
iCol = 1
Workbooks("CSV.xls").Activate

For iRow = 1 To 50
 For j = 1 To 5
  If (Workbooks("CSV.xls").Worksheets("Sheet1").Cells(iRow, 1).Value = "") Then
   Exit For 'データが無ければ終了
  Else
   Dname(j) = Workbooks("CSV.xls").Worksheets("Sheet1").Cells(iRow, iCol)
   cData = cData & DQUAT & Dname(j) & DQUAT & ";"
  End If
  iCol = iCol + 1
 Next j
   Print #fFileNo, cData 'ファイル出力
   cData = ""
   iCol = 1
Next iRow
Close #fFileNo 'ファイルクローズ
End Sub

【73445】Re:CSV File作成について
発言  UO3  - 13/1/11(金) 15:47 -

引用なし
パスワード
   ▼yokomichi さん:

こにちは
CSVは詳しくないのですが、できあがったファイルをメモ帳で開いてみてください。
"NO" になっていませんか?

改行の変換も入れた一例です。
(セル乗の標準 vbLF をチェックしています。WIndows標準のVBCRLF であれば変更願います)

Sub CSVWrite()
  Dim fFileNo As Integer 'ファイル番号
  Dim fFileName As String '出力ファイル名
  Dim DQUAT As String 'ダブルクオーテーション
  
  Dim c As Range
  Dim w As Variant
  Dim j As Long
  
  fFileName = ThisWorkbook.Path & "\CSV.csv" '出力ファイル名
  fFileNo = FreeFile(0) 'ファイル番号を取得
  Open fFileName For Output Access Write Lock Read Write As #fFileNo 'ファイルオープン
  DQUAT = Chr(34) 'ダブルクオーテーション
  With Workbooks("CSV.xls").Worksheets("Sheet1")
    For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
      w = c.Resize(, 5).Value
      w = WorksheetFunction.Index(w, 1, 0)
      For j = LBound(w) To UBound(w)
        w(j) = DQUAT & Replace(w(j), vbLf, "<BR>") & DQUAT & ";"
      Next
      Print #fFileNo, Join(w, "") 'ファイル出力
    Next
  End With
  Close #fFileNo 'ファイルクローズ
End Sub

【73446】Re:CSV File作成について
お礼  yokomichi  - 13/1/11(金) 16:06 -

引用なし
パスワード
   UO3 さん 有難うございました
メモ帳には 正しく書かれていました

改行の変換もうまくいきました
助かりました

【73447】Re:CSV File作成について
発言  kanabun  - 13/1/11(金) 17:04 -

引用なし
パスワード
   ▼yokomichi さん:
こんにちは〜

セミコロン区切りですか

解決後ですが、参考です

Sub セミコロン区切り()
 Dim rr As Range, r As Range
 Dim io As Integer
 Dim Filename As String
 Dim v As Variant
 Dim ss As String
 
 Set rr = ActiveSheet.Range("A1").CurrentRegion '出力範囲
 
 Filename = "D:\CSVMac\CSV3.csv" '出力ファイル名
 io = FreeFile()
 Open Filename For Output As io
 For Each r In rr.Rows
   v = Application.Index(r.Value, 0#)
   ss = """" & Join(v, """;""") & """"
   Print #io, Replace(ss, vbLf, "<BR>")
 Next
 Close io

End Sub

なお、最後の項目のあとにも ; をつけるなら、
>   ss = """" & Join(v, """;""") & """"


    ss = """" & Join(v, """;""") & """;"

にしてください。

【73456】Re:CSV File作成について
質問  yokomichi  - 13/1/12(土) 11:15 -

引用なし
パスワード
   ▼kanabun さん:
有難うございます
教えていただいたものを読み解きをしているのですが
一点教えていただきたい箇所があります
WorksheetFunction.Index(w, 1, 0)で
(w, 1, 0)の内容です
 w---配列
 1---行
 0---列
 と思って読んでいました
 違うみたいなのでWorksheetFunction.Indexの使用方法を
 ご教示いただければ幸いです
 よろしくお願いします

【73457】Re:CSV File作成について
発言  kanabun  - 13/1/12(土) 15:09 -

引用なし
パスワード
   ▼yokomichi さん:こんにちは〜

>一点教えていただきたい箇所があります
>WorksheetFunction.Index(w, 1, 0)で
>(w, 1, 0)の内容です
> w---配列
> 1---行
> 0---列
> と思って読んでいました
> 違うみたいなのでWorksheetFunction.Indexの使用方法を
> ご教示いただければ幸いです

それを使っているのは UO3 さんなので、書いたご本人に聞かれるのが
ベストかと思いますが...

一行の配列だから、
> w---配列
> 1---行
> 0---列
(ここで、0 は 全列を表す)

という解釈であってるんじゃないですか?
ぼくのばあいも、

> For Each r In rr.Rows
>   v = Application.Index(r.Value, 0#)

と書いてまして、行を0#としてすべての行を指定してますが、
もともと r は 一行だけですから、問題ないですよね?

Loopを 範囲rr の中にもってきて

 For i = 1 To rr.Rows.Count
   v = Application.Index(rr.Value, i, 0)

のようにしても、同じことだと思うけど、こうすると処理スピードが
遅くなります。

【73458】Re:CSV File作成について
発言  UO3  - 13/1/12(土) 15:31 -

引用なし
パスワード
   ▼yokomichi さん:

こんにちは

>WorksheetFunction.Index(w, 1, 0)

目的は、行毎の A列〜E列の1行4列の2次元配列をJOIN関数で処理するために
1次元配列に加工したかったので、このコードを使っています。
ただ、ちょっと勘違いしたところがありました。
アップしたコードでは領域をいったん w に 2次元配列としておさめ
そこから取り出して作成しましたが、直接以下でもよかったです。

w = WorksheetFunction.Index(c.Resize(, 5).Value, 1, 0)

で、Index関数ですが、通常は INDEX(配列、行、列) として
配列の中の指定行、指定列の値を参照します。
で、この行または列に 0 を指定しますと、行すべてとか列すべてという指定になります。
なので 配列,1,0 と書くと 1行5列の配列から 1行目のすべての列を取り出すということに
なります。無駄なことをしているなと思われるかもしれませんが、この記述の結果が
2次元ではなく1次元で取得できるというところを狙って使っています。

【73461】Re:CSV File作成について
お礼  yokomichi  - 13/1/12(土) 21:38 -

引用なし
パスワード
   ▼UO3 さん;kanabunさん
ご両人の丁寧な説明有難うございました
INDEX(配列、行、列)の列=0がなにお意味しているのか
解らなかったのです
これで霧が晴れました

【73497】Re:CSV File作成について
質問  yokomichi  - 13/1/16(水) 12:15 -

引用なし
パスワード
   度々お手数をお掛けします
再度もう一点教えていただきたいのです
CSVファイルをSaveするときに
文字コードを「UTF-8」で Save したいのです
通常は「Shift-jis」でSaveされているようですが
また、使用している文字コードがなんであるか
検索はできるのでしょうか
よろしくお願いします

【73498】Re:CSV File作成について
発言  UO3  - 13/1/16(水) 13:09 -

引用なし
パスワード
   ▼yokomichi さん:

文字コードについては詳しくないので識者さんからの回答をお待ちいただきたいと思いますが

「VBA CSVファイルの保存 文字コードをUTF-8」あたりで検索しますと
参考になるページが見つかるかもしれません。

たとえば以下。

h tp://d.hatena.ne.jp/so_blue/20080617/1213670472

【73500】Re:CSV File作成について
お礼  yokomichi  - 13/1/16(水) 14:41 -

引用なし
パスワード
   ▼UO3 さん
ありがとうございます
検索して勉強してみます

1564 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free