• ベストアンサー

CSVファイルをEXCELで編集する場合について

こんにちは。カテゴリ違いかもしれませんが、教えてください。EXCELのマクロやVBAについては全くの初心者なのですが、不特定の名称のCSVファイルをEXCELで表示・編集した場合、マクロ・VBAを自動で起動させて入力規制や入力チェックは行えるものでしょうか?あるセルの内容をチェックする場合、VBAだとシート名を指定しなくてはならない印象を受けましたが、この指定が不特定であることは可能でしょうか?現状ではVBAの扱い方からのスタートになっている段階なので、このような質問になってしまっています。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

なんか質問を読んで、もやもやしてよく主旨が採れないですが参考になれば。 >不特定の名称のCSVファイルをEXCELで表示・編集した場合 あるブックのブックのオープンイベントに Private Sub Workbook_Open() Workbooks.Open "c:\My documents\aaa.xls" MsgBox Worksheets("sheet1").Range("a1") MsgBox "bb" End Sub を入れると、上例ではc:\My documents\aaa.xlsを自動的に開きます。「不特定の」言ってますが、このブック名の指定部分を、ダイアログボックスを表示して、ユーザーにファイル指定させることもできます。最低InputBoxで聞くのも出来る。 >表示・編集した場合・・ それより前にCSVファイルをエクセルに読みこまないといけませんが、上記のファイル名を実在のXXX.CSVにすれば良い。表示はその結果シートに表示されます。 データ-外部データの取りこみをマクロ記録したものも あります。 テキストファイルを1レコードずつよみ、Split関数で 分離し、自分でセルにセットも出来ます。 編集に付いては、この質問では編集はオペレーターがやるようですね。 >編集した場合、マクロ・VBAを自動で起動させて 編集した場合はマクロが編集するのではないでしょうが、 人間が編集した(セルの値を変えた)時などに即座にチェックしエラー指摘するのはイベント・プロセジュアしかなく、VBAではあまり十分な機能ではないが出来ます。 むしろ、入力が全て終わった時にチェックをやる手もある。 しかし操作(本来の使い方)での、「入力規則」なども 相当強力なので、プログラムに頼らなくても済む面は大きいと思う。 >あるセルの内容をチェックする場合、VBAだとシート名を指定しなくてはならない印象を受けましたが これはその通りですが、だからと言ってシート名を取得することも出来るし、Activesheetという表現で、一般化することも出来る。CSVファイルを読みこむとCSVファイル名のシート(だけ1つ)が出来ると思いますが。 上例でMsgBox "bb"は詰まらんものですが、ここにモジュール名を書くと、そのモジュールを実行します。VBAが判れば 自在にエクセル処理が出来る可能性があります。 ブック内のモジュールとかPersonal.xls内とかの制約の色々な勉強が必要ですが。 ●取り越し苦労せず、入り口(CSVファイルのエクセルへの読みこみ)から始めて、一歩一歩疑問点を詰めて、質問してはどうでしょう。 まあしかし回りにVBAを知っている方がいないと、短期間では無理かも知れない。しかしお若い方は理解の早い方はいるし、他言語をやっておられる様ですから大丈夫かも知れない。

natural_aspirate
質問者

お礼

imogasiさん、ご回答ありがとうございます。今自分の質問の文を読み返すと、確かに目的が曖昧でした・・・それにも関わらず噛み砕いてお返事いただき、感謝いたします。 おっしゃっていただいた文のお返事になるか分かりませんが、現状でできていることを申し上げますと、 (1)あるBookをExcelで開いた時、内部で記述されたVBAによりCSVを開くためのダイアログを表示する (2)ダイアログで開かれたCSVをSplit関数で各セルに格納する (3)シートを閉じる際、各セルの入力チェックを行う です。やりたいことに近づいているとは思いますが、現状の問題点として 1>一度CSVを閉じてしまうと、もう一度CSVを開く際(1)のマクロは起動できないため、マクロ起動のためのコマンドボタンなどのオブジェクト配置が必要 2>(2)・(3)の機能は(1)で開いた場合のみ有効(Splitのロジックを通れないため) 3>VBAが不特定の名称のCSVに対して汎用的に処理できない という感じです。上記から、コマンドボタンなどのトリガーを設けておけば、ある程度簡易なルーチンワークにすることが可能と思われますが、現状でBook自体にユーザーインターフェースを備えたアプリケーション的なものにすることを避けているため、 1)VBAを実装したExcelブックは開きぱなしでよいが、上から CSVを開いた際、いつでもCSVの内容の編集・入力チェックが行えるようにしたい 2)編集作業者はExcelアプリケーションそのものに対しては"開く""保存する""閉じる"以外の動作は行えないようにしたい >取り越し苦労せず・・・ 耳が痛いです・・・最近こちらのサイトに頼りっぱなしな面もありますので、おっしゃる通り自分で調べることを省略してしまっていることは否めません・・・ 恐れ入りました。

その他の回答 (2)

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.3

まだ見てますかね?(^^; #1さんの回答どおり、CSVではマクロを記述できません。 >ThisWorkBooks("?????.csv")←VBチックにこんな記述は不可能でしょうか? 100近くあるCSVファイルを開くには、やはりファイル名を列挙した上でWorkBooks.Openに投げるしかないですね。 最悪、エクスプローラでCSVを全て選択して「開く」をやればいいんですけどね(^^; >VBAだとシート名を指定しなくてはならない印象を受けましたが、 >この指定が不特定であることは可能でしょうか? が、「全てのシート(名前が分からない)に対して同じ処理をしたい」 という意図であるなら、それは簡単です(^^; For Eachを使って列挙すればいいのです。 Dim oSheet As Worksheet For Each oSheet In ThisWorkbook.Worksheets MsgBox oSheet.Name Next oSheet ここではmsgboxでシート名を出してみたわけですが ここにシートに共通して行う処理を書けばいいですね。 >一番楽なのはVBでアプリケーションを作ってしまうことなのですが、 >Excelで編集するという制約がありまして・・・ VBからExcelを制御できますけど(^^; つまり、制御するのがExcelブックなのかVBアプリかだけの違いです。 あとExcelでCSVを読み込むときは数値と文字列の区別など注意が必要ですよ(内容が変わってしまう)。

natural_aspirate
質問者

お礼

piyo2000さん、朝早くからご回答ありがとうございます。 100個ほどファイルがあると申し上げましたが、1作業では1ファイルのみの編集になりますので、一度に複数のCSVファイルを開いていることが前提ではありません。しかしCSVファイルを"開く""閉じる"という動作を繰り返し行う可能性はあります。 >VBからExcelを制御できますけど(^^;・・・ 言葉が足りませんでした。Officeアプリケーション(Accessは除く)で編集する制約、の方が正確な意味になります。Excelマクロを使用する理由は、有形のアプリケーションを作成せずにCSV編集作業の簡易化を図るためです。 >あとExcelでCSVを読み込むときは数値と文字列の区別など注意が必要ですよ(内容が変わってしまう)。 この区別もVBAがVBと似た関数を持っているならば、判別・変換は可能ですよね?その点はあまり心配はしてませんが・・・

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 自動で起動させて入力規制や入力チェックは行えるものでしょうか? CSVファイルはEXCELアプリケーションに関連付けされているからEXCELで開かれますが、実体はただのテキストファイルです。 従って、マクロを記述できません。 > VBAだとシート名を指定しなくてはならない印象を受けましたが CSVファイルを開くとファイル名=シート名で、単一のシートです。 結局、「指定されたCSVファイルを開くマクロを記述したEXCELブックを作成する」が良いと思います。 キーワード「EXCEL CSV 開く」で過去の回答を参照ください。

natural_aspirate
質問者

お礼

bin-chanさん、ご回答感謝です。 やっぱり無理ですかぁ・・・残念です・・・ >CSVファイルを開くとファイル名=シート名で、単一のシートです。 ThisWorkBooks("?????.csv")←VBチックにこんな記述は不可能でしょうか? >結局、「指定されたCSVファイルを開くマクロを記述したEXCELブックを作成する」が良いと思います。 実は編集したいCSVファイル数は100近くあります・・・"1CSVファイル:1マクロ用ファイル"は現実的ではないですが・・・ 一番楽なのはVBでアプリケーションを作ってしまうことなのですが、Excelで編集するという制約がありまして・・・ >キーワード「EXCEL CSV 開く」で過去の回答を参照ください。 ヒント頂き感謝します!しかしヒット数が多いですね・・・地道にキッカケを探してみます。

関連するQ&A

  • EXCELでCSVファイルの読込み

    VBA超初心者でとても困っています。 仕事でEXCELのVBAを使って 現在開いているシートの中に 1つのCSVファイルからデータを読み込むのですが CSVデータの2行目をEXCELのC2へ。 4~10行目までを、EXCELのB5~B14へ マクロを使い、ボタン一つで自動入力させたいのです・・・。 Line Input も、やり方が悪いのかうまくいきません。 ヒントとなるやり方があればぜひ教えてください。

  • エクセルVBAで CSVファイルからのデーター参照

    エクセル2000を使用しています。 CSVで社員リストを作成して、エクセル上の指定のセルに 氏名を入力すると、年齢、性別、入社日等が他のセル表示出来るように 指定のですが、VBAでやるとすれば、どの様なコードになるのでしょうか??  現在は、OPENイベントを使用して、エクセルの別のシートにCSVファイルの全ての内容を読み込んでいます。そしてMAINのシートではLOOKUPを使用しているのですが、ファイル起動時に時間が掛かり、困っています。 エクセルとCSVの間で直接、データーのやり取りをしたいのですが・・・。

  • エクセルのCSVファイルについて。

    こんにちは。 エクセルのCSVファイルの扱いで質問です。 数値を入力した際、 通常の.xlsファイルだと、セルから大きくはみ出した数字は、セルの幅を調節すれば、入力した通りに出力されますよね? 現在、CSVファイルを扱っているのですが、 入力値が「44444444444444400000」のように大きくはみ出した場合、 セルの中には「4.44444E+19」と出力されてしまいます。 あらかじめセルの幅を広くしても、結局、桁の多い数値を入力すると同じような結果になります。 どうすれば、入力した通りの数値を出力させることができるのでしょうか? よろしくお願い致します。

  • エクセル2007で既に開かれているCSVファイル

    のセルA1に特定の文字が入力されているファイルに対してマクロを実行したいのです。 会社のイントラネットから各種データを開くと(ダウンロードではありません。)以下のファイル名になります。 list.csv , list(1).csv , list(2).csv , list(4).csv , … , list(n).csv ←list(3).csvは不要だったので閉じられている例です。 マクロ実行前に、例えば list.csv と list(4) のセルA1に特定の文字が入力されている場合は、どちらかを選択するか、処理を中止する。(希望は前者ですが。。。) 対象のCSVファイルが無ければ(CSVファイルが開かれていない、または、A1が不一致)メッセージを出力する。 Sub Sample() Dim myChkBook As Workbook Dim i As Integer On Error GoTo Err0 Set myChkBook = Workbooks("List.csv") 'この時にセルA1の文字を比較したいです。 Call 処理 Exit Sub Err0: For i = 1 To 5 '←5は少なくとも list(n).csv のnまで処理したい。 On Error Resume Next Set myChkBook = Workbooks("List(" & i & ").csv") '←現状では、開かれていないファイルが On Error GoTo 0                      'あるとエラーになってしまいます。 Call 処理 Exit Sub Next i Exit Sub Err1: MsgBox "対象のCSVファイルが見つかりませんでした。" End Sub 出だしで躓いてしまい、悩んでおります。 良い方法をご教示いただければと思い、質問致します。 宜しくお願い致します。

  • Excelマクロで同じブックにCSVを読み込むには

    Excelの指定したシートにCSVファイルを読み込ませたいのですが 以下のVBAマクロを実行すると新しいブックが起動して 新しいブックの方にCSVファイルが読み込まれてしまうのですが これをVBAマクロを実行しているブックの指定のシート(例えばSheet3など)に 読み込ませたいのですがどのように記述すればよいのでしょうか。 よろしくお願いします(Excel2010) Sub Macro1()  ChDir "C:\test"  Workbooks.Open Filename:= "test1.csv" End Sub

  • VBAマクロでCSV出力

    はじめまして、よろしくお願いします。 ExcelのVBAマクロで 特定のセルの範囲を「シート名.csv」で出力するようなプログラムを書きたいです。 例)シート名「TEST」内にあるマクロボタンを押すと  A1:A10のセルの内容が「TEST.csv」(アスキー形式ならなんでも)  に出力される。 どういうやり方があるか、お勧めのサイト等、 ご教授いただけないでしょうか? 以上、よろしくお願いいたします。

  • CSVファイルの指定列だけを読み込んでEXCELに表示したい

    EXCELのVBAの .ActiveSheet.QueryTables.Add メソッドを利用する方法で、 (不可能ならば別な方法でもお願いします。) CSVファイルを読み取って、シートに書き込みたいと思ったのですが、 その際、CSVファイル全体ではなくて、特定番目の列だけを読み取って、書き込むことは出来ないでしょうか。 その特定の列の指定を複数にすることも出来ますでしょうか。 もし複数でも可能でしたら、EXCELに書き込むときに、 一列目、二列目、と詰めて書くのではなく、間に空列をはさんだりして、 バラバラに好きな位置の列に、読み取ったそれぞれの列を、書き込むことは出来るでしょうか。

  • CSVファイルをACCESSで読み込んで、編集してEXCELに貼り付けたいのですが

    みなさま、こんにちは。 ACCESSのFORMにボタンを作って、イベントのビルドでCSVファイルを読み込んで、編集して指定したEXCELシートに貼り付けようとVBAを組んでいるのですが、困ってしまいました。 データを一気に読み込んだあと、2次元の配列にして aRecord(r, a)にレコードと項目ごとに値をセットしています。 データを編集後、 ES(b).Cells(posR, posC) = aRecord(r, a) でエクセルのセルに値を入れているのですが、この方法だとEXCELを更新することが できなくて困っています。 ACCESS/EXCEL連携で、ACCESSからEXCELシートを更新できるコマンドがあると聞いたことがあるのですが、具体的にどのようなコマンドを どのように使えばよいのか、ご存知ないでしょうか? もしおわかりになる方がいらっしゃいましたら、是非ご教授下さいますよう よろしくお願いいたします。

  • CSVファイルのエクセル取込(VBA)で小数三位が消える!?

    エクセルにCSVファイルから読み取りをするVBAで下記のように記述しています。 Sub CSV読取り Dim FName As Variant FName = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv") Open FName For Input As #1 For i = 1 To 400 Input #1, Columni ThisWorkbook.Sheets("CSV取得").Cells(i, "E").Value = Columni Next i Close #1 End Sub これでほとんどのデータ(数値や文字列の400件)をうまく読み取るのですが、どういう訳かデータが小数点以下第三位まである数値の場合、エクセルに取り込まれた段階で小数点以下第二位までに四捨五入されてしまうようです。 そのうえ、エクセルのセルの表示形式がそこだけ通貨(¥マーク付き)になっています。 なぜでしょうか? またどうしたら正しく小数3位まで読み取れるのでしょうか? CSVファイルをエクセル単純にエクセルで開けばちゃんと小数三位まであるのですが、データが横一列にカンマ区切り400件あるので256列しかないエクセルではすべてとりこめません。(だから上記のマクロで縦に変換してとりこんでいるのですが) 非常に困っています。

  • エクセル97で作成したファイルをcsvファイルに変換すると?

    エクセル97で作成したファイルをcsvファイルに変換すると住所の地番を入力したセルが、日付に変換されてしまいます。どのように設定をすればいいのでしょうか。 一つのセルに 1-3-5 と入力をして、csvファイルに変換すると 2001/3/5 となってしまいます。もちろんエクセルでのセルの書式設定は、文字列に設定しております。 1-3-5と変換されるためには、あとどのように設定すればいいのでしょうか?よろしくお願いいたします。