Excel VBA質問箱 IV

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

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


3554 / 13646 ツリー ←次へ | 前へ→

【61458】CSVファイルの整頓 TOMO 09/5/11(月) 0:35 質問[未読]
【61459】Re:CSVファイルの整頓 Yuki 09/5/11(月) 8:38 発言[未読]
【61460】Re:CSVファイルの整頓 kanabun 09/5/11(月) 9:07 発言[未読]
【61461】Re:CSVファイルの整頓 kanabun 09/5/11(月) 9:10 発言[未読]

【61458】CSVファイルの整頓
質問  TOMO  - 09/5/11(月) 0:35 -

引用なし
パスワード
   はじめまして。TOMOと言います。
CSVファイルを読み込んで転記、集計するマクロを作成したのですが、
元のソフトから払い出されるCSVが1列ずれる箇所がありまして困っています。

「対象データ」シートにCSVデータをA〜AC列まで読み込む(はみ出した行を手で修正
してますので、実際のマクロはA〜IV列で全データを取り込みます)ようにしてますが、
Q列の元データがソフトではAAA,BBBとあって読み込んだ際に2列に分かれていまい
一部のデータがA〜AD列に1列はみ出してしまいます。
(Q列に,がなければA〜AC列までで全データを読み込めます)

CSVデータをエクセルシートに読み込むので仕方ないことですが、
「対象データ」シートに読み込んだ後にA〜AC列の範囲に収まるように
整頓したいと考えてます。

イメージとしては、AD列を検索して該当する行があれば、
 1)Q列の先頭に'をつける。
 2)R列の先頭に,つけてQ列に統合する。
 3)S〜AD列を1列詰める。(R〜AC列へ切り取って貼り付け)
と考えていますがやり方が分かりません。

いつも1000行近くあるデータの内、200行近く手で修正してまして大変困っています。
自力でなんとかしようと頑張ってみましたが、まるで見当がつかずエラーの嵐が
起こってます。
どなたか解決方法をご存知でしたらご教授下さい。

【61459】Re:CSVファイルの整頓
発言  Yuki  - 09/5/11(月) 8:38 -

引用なし
パスワード
   ▼TOMO さん:
>してますので、実際のマクロはA〜IV列で全データを取り込みます)ようにしてますが、
>Q列の元データがソフトではAAA,BBBとあって読み込んだ際に2列に分かれていまい
>一部のデータがA〜AD列に1列はみ出してしまいます。
>(Q列に,がなければA〜AC列までで全データを読み込めます)

今の処理はどのようにされているのですか?
A〜IV列のデータをA〜AC列になるように編集されているのですよね。
そしてQ列の , とR列の , とはどうやって区別しているのですか。
例えば

aaa,bbb,ccc,dddd <- 本来のデータ

aaa,bbb,ccc,dddd,eee のとき,何処の列が1つの列かどうやって分かるのですか。
" で括ってあればわかるのでしょうけど、それもなさそうだし。

【61460】Re:CSVファイルの整頓
発言  kanabun  - 09/5/11(月) 9:07 -

引用なし
パスワード
   ▼TOMO さん:
おじゃまします。

>Q列の元データがソフトではAAA,BBBとあって読み込んだ際に2列に分かれていまい
>一部のデータがA〜AD列に1列はみ出してしまいます。
>(Q列に,がなければA〜AC列までで全データを読み込めます)

↑を 文字通り実行するとすると、↓こんな感じで行けませんか?

Sub 素朴に()
  'AD列を調べる
  Dim r As Range
  Dim RowMax As Long, i As Long
  Dim c As Range, c1 As Range, c2 As Range
  Set r = Range("Q1").CurrentRegion
  RowMax = r.Rows.Count
  'AD列 --- 最初のデータセル
  Set c1 = r.Item(1, "AD")
  If IsEmpty(c1.Value2) Then Set c1 = c1.End(xlDown)
  If c1.Row > RowMax Then Exit Sub
  'AD列 --- 最後のデータセル
  Set c2 = r.Item(RowMax + 1, "AD").End(xlUp)
  
  'AD列にデータがある行を修正
  For Each c In Range(c1, c2)
   If Not IsEmpty(c.Value2) Then
     i = c.Row
     With r.Item(i, "Q")
       .Value2 = "'" & .Value2 & "'" & .Offset(, 1).Value2
       .Offset(, 2).Resize(, 12).Cut .Offset(, 1)
     End With
   End If
  Next
  
End Sub

【61461】Re:CSVファイルの整頓
発言  kanabun  - 09/5/11(月) 9:10 -

引用なし
パスワード
   失礼。ちょっと修正します

> .Value2 = "'" & .Value2 & "'" & .Offset(, 1).Value2
               ↓
  .Value2 = "'" & .Value2 & "," & .Offset(, 1).Value2

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