アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前同じ質問をさせて頂いたのですが、説明不足であったため再投稿いたします。

【エクセル VBA】
VBAを使って複数のCSVを結合させたいのですが、コンマ区切りの値がデータ上に存在するため上手くまとまりません。

バッチ等でまとめる方法ではなく、どうしてもVBAでやらなければならないので、その方法をご教授下さい。

また、結合するCSVはエクセルを開いた時に選択できるようにしたいです。
(特定のファイル上を対象等では無く。)



現在使用しているVBAは以下のものになります。
-----------------------------------------------------

Sub CsvIn()
'CSVファイルの読み込み
Dim CsvFileName As Variant
Dim Li As String
Dim Bf() As String
Dim R As Long
Dim ShMain As Worksheet
Dim FlNo As Integer
Dim FFlNo As Integer

With ThisWorkbook 'シート&パスの設定
Set ShMain = .Worksheets("Sheet1")
ChDrive .Path
ChDir .Path
End With
'複数のファイルの選択を可に設定
CsvFileName = Application.GetOpenFilename _
(filefilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイル選択", MultiSelect:=True)
If VarType(CsvFileName) = vbBoolean Then Exit Sub 'キャンセル時の処置
R = 1 '行の初期値
For FlNo = 1 To UBound(CsvFileName) 'ファイル数分ループ
FFlNo = FreeFile '---使用可能なファイル番号取得
Open CsvFileName(FlNo) For Input As #FFlNo
Do Until EOF(FFlNo) '最終行までループ
Line Input #FFlNo, Li '一行読み込み
Bf = Split(Li, ",") 'カンマで分割し配列に代入
If UBound(Bf) >= 0 Then '空白行の処理を飛ばす
With ShMain '1行分のデータをセルに出力
.Range(.Cells(R, 1), Cells(R, UBound(Bf) + 1)).Value = Bf
End With
End If
R = R + 1
Loop
Close #FFlNo
Next FlNo
End Sub

-----------------------------------------------

参考になりそうなサイト
http://excel-ubara.com/excelvba5/EXCELVBA257.html



よろしくお願いします。

質問者からの補足コメント

  • 問題点:
    文字列にコンマが入っている場合がある(ここではあるセル上のバージョン情報が12,3,0,0のように表示されている)ため、CSVをエクセルに取り込んだ際に12、3、0、0と区切られてしまいます。
    これをVBAで文字列内のコンマを削除するという処理を追加できればと思っています。


    例を挙げると以下のサイトに似たことが書いてあります。
    http://pasonal.com/vba-partition/

      補足日時:2017/08/28 14:55
  • Copyコマンドを使用し、ただ単にCSVファイルを結合しておりました。

    CSVを結合した後に、決まった作業があるのですが、なるべく一つのファイル(Excel)で全ての作業を完結させたいと考えておりますので、どうしてもVBAでCSVの結合も行いたいと考えております。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/08/28 15:25
  • 私の説明不足&知識不足で困惑させてしまい申し訳ありません。


    イメージしている順序は

    1、VBAを含むエクセルを起動(現在作成しようとしているもの)
    2、結合したいCSVファイルを選択
    3、エクセルにCSVデータが取り込まれる
    4、普段行っている決まった作業を行う(ここもVBAでするつもりですが、ここに関しては何とかなりそうです)
    5、VBAで行えない作業を手動で行う
    6、保存

    になります。


    そのため、ファイル名は保存する際に自由に決められるようにします。

    よろしくお願いします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/08/28 16:42
  • 列によって場合分けをする感じではなく、
    基本的にデータ内(セル内)にコンマがある場合はすべて無視したいです。
    (エクセル側がコンマをセルの区切り目と捉えてしまうため)

    例えは、捕捉で張らせていただいたリンク先にあります。


    説明が下手で申し訳ありません。

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/08/28 17:47
  • うれしい

    ①で間違いありません。

    ---------------------
    ①「"」で囲まれた中にある物は文字列として扱い、その中にある「,」は区切り記号としてはつかわないが、それ以外の「,」は区切り記号として扱う。
    例 1-1:「123,45,"678,90"」→「123」「45」「"67890"」
    例 1-2:「123,45,"678,90"」→「123」「45」「67890」
    ----------------------

    わかりやすい質問ありがとうございます

    No.5の回答に寄せられた補足コメントです。 補足日時:2017/08/28 18:19
  • GooUserラックさん、Windfallerさん

    ご回答有り難うございました。大変感謝しております。
    特にラックさんは分かりやすい質問を何度も投げ掛けてくださり、助かりました。


    明日試し、結果を報告させていただきます。

      補足日時:2017/08/28 20:43
  • コンマ区切りの値も問題なく取り込むことができました。
    しかし、ファイルを結合した際に、一部のデータが消えてしまっているみたいです。
    大変申し訳なくは思うのですが、原因が私にはわからない状態です。

    ファイルを見せることができれば早いのですが、一部機密情報がふくまれているため、元データを変換して一部を張り付けさせて頂きます。 何か分かられれば幸いです。


    "マシン名","2017/08/02","~情報","K22","4/3/2014"
    "マシン名1","2017/08/02","~情報","SN Tr","Stop","C:\wi\Syst\snp.exe","ユーザ名"
    "マシン名2","2017/08/02","~情報","ehmsas.exe","C:\Wi\win\-win5.exe","Ms Cor","6,1,30,1","Ms Sys","2009/07/14"

    No.8の回答に寄せられた補足コメントです。 補足日時:2017/08/29 09:56
  • つらい・・・

    複数のファイルを読み込んだ際に、一部データが消えてしまっている(または取り込めていない)状態です。

    データの一部は、何かデータが取り込めていない理由に関連しているかと思い張り付けさせて頂きました。

    ご迷惑をおかけします..
    もし難しそうでしたら、元ファイルのカンマを置換する→取り込む
    手順も考えております。

    No.11の回答に寄せられた補足コメントです。 補足日時:2017/08/29 10:55
  • へこむわー

    返答が遅くなり申し訳ありませんでした。

    複数選択の方法は分かりますが、複数ファイルを取り込んだ際に、一部のデータが消えてしまっている(または取り込めていない)状態です。
    同じ列に似た値があると上書かれてしまうということはありませんでしょうか?

    また消えている部位の元データを見てみたのですが、特段ルールが異なるようなことはございませんでした。

    補足ですが、データ量は結構多くまとめた際に2万行程になります。

    No.13の回答に寄せられた補足コメントです。 補足日時:2017/08/29 16:23

A 回答 (15件中11~15件)

以下のどれでしょうか?


①「"」で囲まれた中にある物は文字列として扱い、その中にある「,」は区切り記号としてはつかわないが、それ以外の「,」は区切り記号として扱う。
例 1-1:「123,45,"678,90"」→「123」「45」「"67890"」
例 1-2:「123,45,"678,90"」→「123」「45」「67890」
②全ての「,」を区切り記号として扱わない。つまり列を分けない。
例 2-1:「123,45,"678,90"」→「123,45,"678,90"」
例 2-2:「123,45,"678,90"」→「123,45,67890」
この回答への補足あり
    • good
    • 0

ファイルをただ結合するだけならば、取り込まず追加してしまえばよいと思っていたので聞かなかったのですが、エクセルに取り込みたいのですね!


それでしたら、カンマ区切りして良い列とダメな列の違いを教えてください。
もしかしたら1行を全て1列で読み込めばよいのでしょうか?
この回答への補足あり
    • good
    • 0

ちなみに最終出力ファイルの名前は、一番最初に見つかったファイル名で良いのでしょうか?

この回答への補足あり
    • good
    • 0

補足コメントについて



DOSコマンドの時はどうしていたんですか?その問題点のためダメと判断したのでしょうか?
この回答への補足あり
    • good
    • 0

うまくいかないコードを提示されても、どんな風にダメなのかを具体的に提示していただかないと判りません。


コマンド(DOSコマンドだと思います?)で成功している物も提示していただければチャントした回答が得られるかと思います。
コマンドなので多分ただ結合されているだけのような気もしますけど…
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!