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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

解決済

2回答

3431閲覧

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

satomori

総合スコア15

VBA

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

0グッド

0クリップ

投稿2019/03/04 00:37

編集2019/03/04 01:24

前提・実現したいこと

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

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

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

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

該当のソースコード

VBA

1Sub 指定フォルダーのExcelファイルを全て開いて処理() 2 3'フォルダ内のファイルを開く 4 5 Const DIR_PATH = "N:\リンク先" 6 Dim fl_name As String 7 8 fl_name = Dir(DIR_PATH & "*.xls") 9 10 Dim i As Long 11 Dim wb As Workbook 12 13 Do While fl_name <> "" 14 i = i + 1 '後程、最初のブックと最後のブックに処理を追加するためこの処理を入れています。 15   16 Set wb = Workbooks.Open(Filename:=DIR_PATH & "\" & fl_name) 17 18 19 'カンマ区切りの行を、セルに分割する 20 21 Set lastRow = wb.Worksheets(1).Range("A1").End(xlDown).Row 22 23  'マクロの記録で以下のコードを作成したので、良く理解出来ていない部分がございます。 24 Selection.TextToColumns Destination:=wb.Worksheets(1).Range("A1"), DataType:=xlDelimited, _ 25 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ 26 Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ 27 :=Array(Array(1, 1), Array(2, 2), Array(3, 1), Array(4, 1), Array(5, 1)), _ 28 TrailingMinusNumbers:=True 29 30  wb.Saved = True 31 wb.Close 32 33 fl_name = Dir() 34 35 Loop 36 37End Sub 38

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/04 00:53

「ダメでした」「うまくいきませんでした」 他人には何も伝わらない表現方法なので、具体的に起きた現象を書いてください。
satomori

2019/03/04 01:02

申し訳ございません。 ループはするのですが、何も処理されないまま閉じてしまいます。
m.ts10806

2019/03/04 01:04

あ、こちらはあくまで回答者から質問者への「質問への追記修正依頼」なので、 質問本文を編集して返してください。 こちらのコメント欄はデフォルト非表示のため、全ての人が見るとは限りませんので。
m.ts10806

2019/03/04 01:09

あと、できればそのExcelに記載されているサンプルデータもご提示いただけたら。
date

2019/03/04 01:12

"\*.xls" とありますが使っているのはexcel2003なのですか?シート名などはすべて同じですか?
satomori

2019/03/04 01:23

mts10806様 仕様を分かっておらず申し訳ございませんでした。 ご指摘くださりありがとうございました。 サンプルデータというのはCSV形式のファイルのことでしょうか。
m.ts10806

2019/03/04 01:25 編集

>A1~最終行までがCSV形式で1セル内に記載されている文章 ↑これです
satomori

2019/03/04 01:25

data様 最初にCSVファイルを「.xls」ファイルへ変換する処理を行っております。 シート名がそれぞれのファイルで異なっておりましたので修正いたしました。 ありがとうございます。
date

2019/03/04 02:52

何もエラーは出ていませんか? このプログラムを動かした場合 Set lastRow の部分で型が一致しませんと出ると思われます。
satomori

2019/03/04 04:56

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

2019/03/04 04:58

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

2019/03/04 04:58

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

回答2

0

ベストアンサー

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

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

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

VBA

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

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

投稿2019/03/04 01:19

編集2019/03/04 01:27
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satomori

2019/03/04 01:28

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

2019/03/04 04:59

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

0

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

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

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

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

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

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

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

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

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

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

投稿2019/03/04 01:53

編集2019/04/08 03:14
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satomori

2019/03/04 05:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問