こんにちは。カテゴリ違いかもしれませんが、教えてください。EXCELのマクロやVBAについては全くの初心者なのですが、不特定の名称のCSVファイルをEXCELで表示・編集した場合、マクロ・VBAを自動で起動させて入力規制や入力チェックは行えるものでしょうか?あるセルの内容をチェックする場合、VBAだとシート名を指定しなくてはならない印象を受けましたが、この指定が不特定であることは可能でしょうか?現状ではVBAの扱い方からのスタートになっている段階なので、このような質問になってしまっています。よろしくお願いします。
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を知っている方がいないと、短期間では無理かも知れない。しかしお若い方は理解の早い方はいるし、他言語をやっておられる様ですから大丈夫かも知れない。
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アプリケーションそのものに対しては"開く""保存する""閉じる"以外の動作は行えないようにしたい
>取り越し苦労せず・・・
耳が痛いです・・・最近こちらのサイトに頼りっぱなしな面もありますので、おっしゃる通り自分で調べることを省略してしまっていることは否めません・・・
恐れ入りました。
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を読み込むときは数値と文字列の区別など注意が必要ですよ(内容が変わってしまう)。
piyo2000さん、朝早くからご回答ありがとうございます。
100個ほどファイルがあると申し上げましたが、1作業では1ファイルのみの編集になりますので、一度に複数のCSVファイルを開いていることが前提ではありません。しかしCSVファイルを"開く""閉じる"という動作を繰り返し行う可能性はあります。
>VBからExcelを制御できますけど(^^;・・・
言葉が足りませんでした。Officeアプリケーション(Accessは除く)で編集する制約、の方が正確な意味になります。Excelマクロを使用する理由は、有形のアプリケーションを作成せずにCSV編集作業の簡易化を図るためです。
>あとExcelでCSVを読み込むときは数値と文字列の区別など注意が必要ですよ(内容が変わってしまう)。
この区別もVBAがVBと似た関数を持っているならば、判別・変換は可能ですよね?その点はあまり心配はしてませんが・・・
No.1
- 回答日時:
> 自動で起動させて入力規制や入力チェックは行えるものでしょうか?
CSVファイルはEXCELアプリケーションに関連付けされているからEXCELで開かれますが、実体はただのテキストファイルです。
従って、マクロを記述できません。
> VBAだとシート名を指定しなくてはならない印象を受けましたが
CSVファイルを開くとファイル名=シート名で、単一のシートです。
結局、「指定されたCSVファイルを開くマクロを記述したEXCELブックを作成する」が良いと思います。
キーワード「EXCEL CSV 開く」で過去の回答を参照ください。
bin-chanさん、ご回答感謝です。
やっぱり無理ですかぁ・・・残念です・・・
>CSVファイルを開くとファイル名=シート名で、単一のシートです。
ThisWorkBooks("?????.csv")←VBチックにこんな記述は不可能でしょうか?
>結局、「指定されたCSVファイルを開くマクロを記述したEXCELブックを作成する」が良いと思います。
実は編集したいCSVファイル数は100近くあります・・・"1CSVファイル:1マクロ用ファイル"は現実的ではないですが・・・
一番楽なのはVBでアプリケーションを作ってしまうことなのですが、Excelで編集するという制約がありまして・・・
>キーワード「EXCEL CSV 開く」で過去の回答を参照ください。
ヒント頂き感謝します!しかしヒット数が多いですね・・・地道にキッカケを探してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) Excel ファイルを指定し、指定されたファイル内にシートを統合するVBA 8 2023/07/10 10:09
- Visual Basic(VBA) tatsumaru77様 昨日回答して頂いたものです。 すみませんが、昨日の質問で1つ補足があります 1 2022/05/15 15:06
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAが途中で止まります
-
VBA シートをコピーする際に Co...
-
ワイルドカード「*」を使うとう...
-
VBAで別ブックのシートを指定し...
-
【困っています2】VBA 追加処...
-
【VBA】全シートの計算式を全て...
-
コードを直していただきたいで...
-
マクロVBA 1シートをまとめ...
-
エクセルマクロで任意のファイ...
-
VBA 複数のエクセルから一つの...
-
VBA 実行時エラー 2147024893
-
(マクロ)データをAブックからB...
-
VBA シート名が一致した場合の...
-
【ご教示ください】VBAの記述方...
-
VBA 別ブックからコピペしたい...
-
EXCEL VBAで作った ユーザーフ...
-
複数ブックから一つのシートに...
-
VBAの参照先のファイル名をセル...
-
【ExcelVBA】zip圧縮されたCSV...
-
シートをコピーする下記記述で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBS Bookを閉じるコード
-
【ExcelVBA】インデックスが有...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
vbaでvbaProjectのパスワード解...
-
VBAで別ブックのシートを指定し...
-
ExcelのVBAです。フォルダ内の...
-
vbaで他のブックに転記したい。...
-
フォルダ内の全てのファイルに...
-
VBAで複数のブックを開かずに処...
-
VBSでExcelのオープン確認
-
VBA 実行時エラー 2147024893
-
【Excel VBA】書き込み先ブック...
-
VBA シート名が一致した場合の...
おすすめ情報