• ベストアンサー

EXCELのVBAについて教えて下さい。

VBA初心者です。 EXCEL操作は今まで何度もやっていて大体のことは分るのですが、この度、仕事の関係でマクロ、VBAを初めて使わなくてはいけなくなりました。早速はじめからつまずいています。どうか私にご教授くださればと思います。 やりたいことというのが、 (1)毎日の仕事として、まず、サーバーにあるデータを集計しcsvファイルとして保存します。 (2)そのcsvファイル(ファイル名:今日落としたファイルなら○○050620.csv)を××.xlsというファイルのワークシートにコピーします。 (3)その集計した表をピボットテーブルでさらに分りやすく分別。 (4)そのピボットテーブルからでてきた数字を××.xlsのSheet1の表のあてはまるところに数字をコピーし貼り付けていきます。 それによってグラフができます。 この操作の流れのうち(2)(3)(4)の部分をマクロニ組んでしまいたいのです。なかなかうまくいかないので良い方法を教えてください。ちなみにcsvファイルは毎日の作業なので年月部分のファイル名が毎日の日付が入ります。

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

  • ベストアンサー
  • exepieco
  • ベストアンサー率27% (25/91)
回答No.5

#1です。 >(2)の操作、(3)の操作、(4)の操作を別々にマクロで アプローチとして正解だと思います。 (VBAといえど、条件分岐と処理を組み合わせる以上、プログラムですから、本来全くの初めてならフローチャートから行くべきですが・・・) #3さんの言われる方法でファイル名は取得できます。 該当日付のファイルが無い場合、など、エラー処理なども考えたいところですが、それはさしあたり後回しにして、これをどうやって組み込むのかがわからない場合は、変数とか代入などについての基礎知識が必要で、残念ながら近道はありません。勉強するしかないですね。 余談ですが、昔、私も似たようなきっかけでVBAを始め、ほぼ独学でいろいろ業務ツールを作り、いまはSEなどやってます。動き始めると面白いものです、がんばってください。

kirarabb
質問者

補足

皆さんからいろいろとご解答いただきありがたく思います。まだ、毎日空いた時間を見ながらやっている最中できちんとしたご解答が出来ません。できれば皆さんがお勧めいただけるような初心者向けの書籍はありませんか? とりあえず会社帰りに「ExcelVBAマクロ組み方講座」「できるExcel2000マクロ&VBA編」「はじめてのExcelVBA」という本を図書館から借りて帰りました。 これらを見て思ったのですが、できればあれらの命令文等がわかりやすく説明してくれているものがあるといいのですが・・・。いろんな関数があると思うのですが初めてだと何がなんだか・・・って感じなのです。あと、皆様がはじめてVBAをさわっていたとき、どうやって自分のものにしていったのかなど教えていただけるとうれしいです。

その他の回答 (5)

  • seiya707
  • ベストアンサー率0% (0/1)
回答No.6

INPUTBOXや#3さんの方法でも良いですがこんな方法もあります。 MyPath = "C:\My documents\testA\*.csv" ' パスを設定 MyName = Dir(MyPath) ' 最初に見つかったファイル名を返す 但しフォルダにcsvファイルが1つだけの場合が条件です。 ですから使用するcsvが入ってるフォルダと使用したcsvを保存するフォルダを分けてもらえれば良いと思います。 例文ではcsvが入ってるフォルダ(testA) 使用したcsvを保存するフォルダ(testB) マクロを走らせた後一々移動させるのも面倒くさいのでマクロの最後で (MyNameの値を保持するかもう1度ファイル名の取得をして) Dim SourceFile, DestinationFile SourceFile = "C:\My documents\testA\" & MyName ' コピー元のファイル名を指定 DestinationFile = "C:\My documents\testB\" & MyName ' コピー先のファイル名を指定。 FileCopy SourceFile, DestinationFile ' ファイルをコピーします。 Kill "C:\My documents\testA\" & MyName ’ファイルの削除 これで移動させて元ファイルのほうは削除になります。 使用したcsvを保存しなくてもよければ最後のKill~一行ですみます。 私も数年前から本無し独学ExcelのHelpのみで勉強してます。 (その頃はこんな便利なサイトは無かった) 本があるにこしたことは無いですが、 少しずつでもやればどろくさくてもまわりくどくてもそれなりに動くものが出来ます。 頑張ってください。

kirarabb
質問者

お礼

大変御礼が遅くなり申し訳ございませんでした。こちらの欄にてご回答いただきました皆様にお礼をさせていただきます。 皆様からいろいろ詳しくご説明いただきありがとうございました。このあと、皆様からのアドバイスといろんな本を見たりしてなんとかできました。お礼を早く言いたかったのですが、仕事も忙しく、しかも自宅のHDが壊れてしまい、修理に出し、なかなか休日も時間がゆっくり取れなかったりしたのでこんなに遅くなってのお返事なりました。もっと早くお礼をさせていただきたかったのですが、私事の関係で遅くなりすみませんでした。

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

>毎日変わるCSVのファイル名はどうやって対応すればよいでしょうか INPUTBOX関数を使うとよいでしょう。 ここは人間が入れます。 昨日の日付のファイルを必ず今日やるにしても、土日祝が入ったりして、初心者には無理です。 >質問には、コピーが頻出するのですが 初心者には、値だけを問題にしますが、できるだけ代入でやることをお勧めします。 >マクロの記録も始めてということらしいが VBAの本も1冊も持っていないのでは。 WEB照会になれるか、VBAの本をある程度は買って読まないと進みませんよ。VBAといえども、持続的興味を持ってやる必要のあるものです。

kirarabb
質問者

お礼

きびしいご返答ありがとうございます。本はとりあえず給料日前なので図書館で借りてきてみました。あとはwebサイトも参考にしています。あと、会社にも買い置きが2冊ぐらいありました。それで、いろいろ本をめくったりwebサイトで調べたりしながらつくっています。でもまだいまいち動かないです。。。 今は例題のとおりのマクロを作ってみてそれを動かしてみて「へえ~っ」っと感心しながら覚えようとしています。 inputbox関数を教えていただきありがとうございます。ちょっと調べてみます。

  • dokinhime
  • ベストアンサー率30% (4/13)
回答No.3

どういった回答がほしいのかいまいちよくわからないのですが、日付のついたファイル名をとるには "○○" & Format(Date, "yymmdd") でいけると思いますが。

kirarabb
質問者

お礼

ご返答、ありがとうございます。こちらのやり方でためしに作ってみたマクロが動きました。もうひとつ聞いてもよろしいですか?実は会社に行ったときによくよくファイル名を確認しましたところ、実際のファイル名は”yy年mm月第x週(yymmdd).csv”でした。もちろんyyは今年の年、mmは月、xは1週から5週までの数字が入ります。今日の日付で言うと、”05年06月第4週(050623).csv”というとても几帳面な方が落としているファイル名なのですが、第4週の4という数字の部分はどのように指定してあげればいいでしょうか?

回答No.2

#1さんのおっしゃるとおり、マクロの記録でこの件はほとんど対応できます。 VBAとマクロの違いは、条件分岐により処理が異なる場合はVBA、そうではなく一本道の処理が続く場合はマクロというように考えればいいと思います。 (2)のcsvファイルを読み込むとシート名が○○050620と名前が付きますので、同じ処理をさせるには、このシートを、マクロの組み込んである別のエクセルブックのシートにデータのみコピペして、そこでマクロを動かせばいいと思います。

kirarabb
質問者

お礼

#1のexepiecoさんにもお答えしたのですが、毎日変わるファイル名に関してはどうやって処理すればよいでしょうか?そこでつまずいているんです(;_;) 上司に突然任されて四苦八苦です・・・。 簡単にボタンひとつでぱぱぱっと処理ができるんじゃないの?って言われてます。 とりあえず、初心者なのでいっぺんにこの操作をひとつのボタンでできるようにするには大変そうなので、練習もかねて(2)の操作、(3)の操作、(4)の操作を別々にマクロで動かしてみようとやっているところです。

  • exepieco
  • ベストアンサー率27% (25/91)
回答No.1

どこが「なかなかうまくいかない」んでしょう? まずは、ツール→マクロ→新しいマクロの記録 を行なって、生成されたマクロを読んで見るところからはじめてはいかがでしょうか? 不要な部分、変数として当てはめると出来る部分などを見つけて変更、ステップ実行(F8)で確認してみると、大抵のことは出来るようになりますよ。

kirarabb
質問者

お礼

早速のご返答ありがとうございます。”新しいマクロの記録”で通常の作業を記録してみました。それはうまく動きました。私も初めてでマクロの記録で動いてくれたのはうれしかったのですが、毎日変わるCSVのファイル名はどうやって対応すればよいでしょうか?会社の上司にはできれば、誰が触っても使えるように上記で手順で最終的に作成されうグラフのあたりに、ボタンを押せば簡単に毎日グラフ更新ができないだろうか?と言われています。 私がとりあえずやってみたのはあらかじめわかっているcsvファイルでコピーしたところまで。ピボットテーブルに関してはマクロを動かしてみるとうまく表を作成できずに途中で止まってしまいました。がんばってみてはいるのですが悪戦苦闘中です・・・。

関連するQ&A

  • VBA どのように記述すれば良いか教えてください。

    はじめて、質問させていただきます。 まだExcel VBAの勉強を始めたばかりの者です。 下記のようなツールを作ることになったのですが、非常に困っています。どなたかわかる方がみえましたら、どうか教えて下さい。(Excel2003を利用) <すべてAという同じフォルダ内> book1.xls book2.xls ・  ・ book*.xls →ファイル数は変動します。集計.xls以外のファイルはすべて同じシート名で構成されて         います。すべてのファイルのシート名 ”結果”が対象です。 集計.xls →このファイルにマクロを作りたいです。        シート名が1、2、3・・と116まで用意されています。 __________________________________________________________________________________________________________________________________ Aフォルダ内の複数ファイルの同じシート名(”結果”)というシートのみコピーをし、同じフォルダ内のファイル「集計.xls」のシートへ値貼り付けをしたいのですが、 一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け、2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け。。3番目にコピーしたシートは「集計.xls」の3という名のシートへ値貼り付け。。というのを、シート数分繰り返す。。という記述を教えて頂きたいのです。 ループ??ですが、【一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け】 次に【2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け】というのを一連の流れにしてループ処理したいのです。 こんなこと出来るのでしょうか??  初心者とはいえ丸投げは駄目だと、1週間ほどネットやいろいろなテキストで自分で何とかできないかと頑張ってみたのですが、部分部分しか記述できず時間だけが過ぎていき。。すっかり行き詰ってきてしまいました。 どうかお力を貸してください。宜しくお願い致しますm(uu)m

  • ピボットテーブルの集計値をVBAでカンマ区切りにしたい

    ・excelのシートにあるピボットテーブルの集計値の書式をカンマ区切りにするVBAを作成したいのです。どうすればよいでしょうか。 ・汎用的なVBAにしたいので、ピボットテーブル名やフィールド名もVBAで取得するようにしたいです。 ・VBAを実行する前に、その集計値の1つを選択しておきます。 よろしくお願いいたします。

  • Excel マクロ アクティブシートの指定について

    こんにちは。Excelでマクロを作成しています。あるファイルを開きマクロを実行すると、日々エクスポートしているExcelファイルのシートが開き、自動的にそのシートにピボットテーブルを実行し集計するマクロを作成しています。ファイルの指定はファイル名が毎日日付のファイル名(例:02-12等)になるので、[ファイルを開く]ダイアログを表示させ、そこから指定することにしました。ただ、シート名もファイル名と同じなのですが、どうしてもそのシート名でしか作成できません。現在アクティブなシートにピボットを実行するようにするには、どうすればいいでしょうか。 下記に作成したVBを記載しておきます。 Fname = Application.GetOpenFilename(FileFilter:="Excel ファイル (*.xls), *.xls") ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'02-12'!R1C1:R91C23").CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル3", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル3").AddFields RowFields:=Array("所属名", _ "受付担当者") ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("状況").Orientation = _ xlDataField ・・・ 上記の02-12の部分がシート名になるのですが、このシート名は毎日変化していきます(次の日は、02-13 など)。どのように作成すればいいでしょうか。 よろしくお願いします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • EXCEL VBAで指定したブックの保存場所を検索したい。(EXCEL2003)

     こんにちは、チェーン店型の店舗で働いている者です。  私が作ったVBA付のエクセルファイルを複数の店舗で使ってもらおうと考えてます。しかし、そのワークシートの中に他のブック(ここでは『売上集計表.xls』)のセルの値を参照しているセルが含まれており、参照する『売上集計表.xls』の保存場所が店舗によって違うので困っています。 『売上集計表.xls』は会社で作成されたものですので、どの店舗でも同じファイル名、レイアウトのうえ、『売上集計表.xls』という名のEXCELファイルはパソコンの中にひとつしか存在しません。 エクセルを起動したときに、参照するファイルが見つからないとリンクの編集をたずねてくるので、それでも大丈夫なのですが、パソコンに疎い人も多いので出来ればVBAで自動的にリンクを設定できるような仕組みがあればと思い質問させていただきました。

  • EXCEL VBA

    1月から3月までの12シートからなる複数のファイルがあります。 そのファイルを上書き保存したときに書式と値だけをコピーした「ファイル名+シート名」で別ファイルに保存をかけたいのです。 (例) 営業課月次.xlsの4月シートに入力をして、上書き保存をかけた時点で月次4月.xlsにシート名=営業課月次4月で書式と値だけ保存する。 こんな都合のよいVBAがありましたら教えていただきたいと思います。宜しくお願いします。 (VBAに関しては入門編ぐらいの知識しかありません。)

  • excel vba 作成について教えて下さい。

    excel VBAを使ってあるブックのセル範囲を別のブック(日報.XLS)のシートへコピー貼り付けをしたいのですが、コピーする側のブックがランダムに取り込まれ(例 8時間ピッチにて自動的にブックが作成される)そのブックを日にちごとに集計し、一か月ごとにまとめるということをやらなければなりません。 例)8時間ごとにフォルダが作成されます。   000001.XLS 000002.XLS   00000F.XLS ・・・・・・・・16進数にて   上記ブックのSheet1のA2:A11までの数値を別のブック(日報月報集計)のに貼り付ける。 別のブック(日報月報集計)は項目ごとに10個のシートがあり 8時間ごとのファイルのセルA2は別ブックのSheet1の日付けに対応するセルへ貼り付け B2は       Sheet2 上記操作を8時間ごと(可変可能)に自動的にコピー貼り付けをやりたいのですが ブック間のコピー貼り付け等わからないことが(初心者です。)多々あり、いろいろ調べてはいるのですが、STOPした状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

  • VBA で EXCELファイルをインポート

    VBAに詳しい方お助けください。VBAを使用して、データベースをつかってインポート(データベースファイルを開かずにデータの取り込み)を行いたいのですが良く分かりません。データベースは一つはCSVファイル、一つはXLSファイルです。取り込み先のEXCELファイルのSHEET1にCSVファイルのデータベース(SHEET1)、取り込み先のEXCELファイルのSHEET2にXLSファイルファイルのデータベース(SHEET1)とインポートするにはどのようなVBAの記述が必要ですか?色々と調べているのですがうまく行きません。EXCELは2003を使用しています。

  • VBAでたくさんのファイルを一つにまとめる

    いつもお世話になっています。VBAでファイルを順番に起動、処理を行いたいと思っています。 集計001.xls~集計100.xlsというファイルがあります。1ファイルにそれぞれの支店と数値があって、それを総合.xlsファイルに支店シートを作って貼り付けます。 つまり、集計001.xlsには 東京 大阪 福岡 100 100  100 200 300  500 100 400  600 400 500  100 とあり他ファイルも同じように入っています。(数値は適当です) それを総合.xlsでは東京シートに 集計001 集計002 集計003 100   400   500  200   300   400 100   400   300 400   200   400 と各支店にシートを貼付します。他に大阪シートや福岡シートもできます。 今、「総合.xlsの各支店シート作成」と「集計001.xlsの支店数値→総合ファイル支店シート貼付」はできています。即興で作ったのでかなりいい加減ですが。 問題は「数あるファイルを順番に開いては閉じること」と「ファイル名を取得して各列の1行目にその名前を代入」です。 総合.xlsは常に起動していますが、集計ファイルは途中なかったりします。 そのために、いちいち手動で集計ファイルを起動して、コピペマクロを動かし、手動で集計ファイルを閉じています。 かなりわかりにくい説明だとは思いますが(やっている私もたまに勘違いしています)、ファイルを順番に動かすいい方法ってないでしょうか?できれば001 → 100の順番でいきたいんです。手動だとある時順番を間違えそうだし、ファイル名を1行目に入力するのも面倒なので。 すごくわかりにくいですよね。どうやったら文字列のファイル名をカウントする感じで動かしていくのかわからなくて・・・。どうかお知恵を貸してください。よろしくお願いします。

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

専門家に質問してみよう