質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • VBA

    2386questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1968questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

マクロで別ブックに対し、カンマ区切りの処理を行う方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 325

satomori

score 3

前提・実現したいこと

指定フォルダ内の全てのブックに対し、A1~最終行までがCSV形式で1セル内に記載されている文章を
「カンマ区切り」で列ごとにセル分割する処理
(Excelマクロ)

上手くいかないのですが、どこが悪いのかご指摘いただけますと幸いです。
ループはするのですが、何も処理されないまま閉じてしまいます。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

該当のソースコード

Sub 指定フォルダーのExcelファイルを全て開いて処理()

'フォルダ内のファイルを開く

  Const DIR_PATH = "N:\リンク先"
  Dim fl_name As String

  fl_name = Dir(DIR_PATH & "\*.xls")

  Dim i As Long
  Dim wb As Workbook

    Do While fl_name <> ""
        i = i + 1 '後程、最初のブックと最後のブックに処理を追加するためこの処理を入れています。
  
  Set wb = Workbooks.Open(Filename:=DIR_PATH & "\" & fl_name)


   'カンマ区切りの行を、セルに分割する

   Set lastRow = wb.Worksheets(1).Range("A1").End(xlDown).Row

  'マクロの記録で以下のコードを作成したので、良く理解出来ていない部分がございます。
    Selection.TextToColumns Destination:=wb.Worksheets(1).Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1)), _
        TrailingMinusNumbers:=True

  wb.Saved = True
    wb.Close

  fl_name = Dir()

    Loop

End Sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • satomori

    2019/03/04 13:56

    mts10806様
    回答者様のおかげで何とか出来そうなので後は頑張ってみます。
    ありがとうございました。

    キャンセル

  • mts10806

    2019/03/04 13:58

    なるほど。具体的なデータもあればコード調整も可能かと思いましたが、
    ヒントで解決できそうならそれも良しですね。がんばってください。

    キャンセル

  • satomori

    2019/03/04 13:58

    date様
    おっしゃる通りそのエラーが出ておりましたが、
    setを消すとエラーが消えたので大丈夫そうです。
    ありがとうございます。

    キャンセル

回答 2

checkベストアンサー

+3

とりあえず3点指摘します。

  1. lastRowを求めているがどこでも使っていない。
  2. Selectionを使っているが、何も選択していない。
  3. Savedを使っているが、これは保存する関数ではない。状態を表すプロパティです。

単純にカンマ区切りの値を分解するなら下記で実行できます。
(A列1~100行までの場合)

Range("A1:A100").TextToColumns DataType:=xlDelimited, Comma:=True


指摘1と2をこれに置き換え、あとは保存(Save)すればいいと思います。
その他、細かい調整はお願いします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/04 10:28

    lastRowの使用場所が分からずそのままになっておりました。
    ご指摘いただいた箇所を再度調べなおしてみます。
    ご回答くださりありがとうございました。

    キャンセル

  • 2019/03/04 13:59

    コードを追記していただき本当にありがとうございます。
    おかげさまで分解出来ました。

    キャンセル

+1

それぞれのコードの意味をまずは調べましょう。

例えば、マクロの記録で出てきた、TextToColumns がよく分からなかったら
「Excel VBA TextToColumns」をキーワードにWEB検索してみてください。
すると例えば下記のページがヒットしますので、それを読んで理解しましょう。

セルのデータを区切り文字で複数のセルに分割する(TextToColumns メソッド) | ExcelWork.info

あと、ファイルを上書き保存するにはどうしたらいいかも「Excel VBA 上書き保存」でWEB検索すると下記がヒットします。

Office TANAKA - ファイルの操作[ブックを保存する]

さらに、マクロの記録をするとやたらとSelectしますが、下記を参考にSelectを使わない方法に書き換えると高速化しますし、バグの発生しにくい安全なコードになります。

Office TANAKA - VBA高速化テクニック[Selectしない]

あと対象のセル範囲の取得に関しては、下記が参考になるかと。

Office TANAKA - セルの操作[セル範囲の取得]

ある程度はできているので、コードを一つずつ理解しながら、分からないところは調べながらやっていけば、自力で完成するでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/04 14:01

    ご丁寧にリンクを添付していただきありがとうございます。
    添付していただいたURLを参考にコード作成してみます。
    今後は不明点は質問前に徹底的調べるよう留意いたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    2386questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1968questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。