- 締切済み
VBAでエクセルの自動集計ができますか?
エクセルを利用してアンケートを作成しています。 具体的には、「コントロールツールボックス」の「チェックボックス」や「オプションボタン」などを利用して回答項目を作成し、 回収後に一括して集計・分析したいと考えています。 (回答対象者は100人程度ですので、集計を自動化したいと考えています) そこで質問なのですが、 ・複数のエクセルブックを対象に、上記のような回答の自動集計 を行うためには、VBAで可能でしょうか。 それともVBでないとできないでしょうか。 VBAとVBの違いもよく分かっていないので大変恐縮なのですが・・・ どうぞよろしくお願いします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Quad66
- ベストアンサー率35% (7/20)
説明が前後しますが、VBAはExcelやAccessに搭載されている自動処理のためのプログラムのことです。開発環境を不要で、手軽な反面できる事が限られていますが、Excel上の処理で困ることはないでしょう。 VBはそれ自体独立したプログラムで、VisuakStudioなどの開発環境がないとプログラムは作れません。C#という兄弟的な言語があり、今はこちらの方が良く使いますが、VBはExcelとの相性がいいので手放せません。 VisuakStudio2008は3万ほどで購入でき、無料版もありますがやや制限されます。Webアプリの作成や、FLASH的なWPFも作れるので、持っていて損はないですよ。 ちなみに「ブックを開いたときにコンボボックスへ値をセット」とはクライアントが開いた時のことです。
- Quad66
- ベストアンサー率35% (7/20)
回答といいつつろくに回答してないものばかり・・。 ここではAccessVBAでExcelブックを開いてそこにあるコンボボックスの 値を取得する流れを説明します。コンボボックスへはブックを開いた 時アイテムを設定するとします。 ExcelブックのVBAを開き、 Private Sub Workbook_Open() Call Sheet1.setsru End Sub と書きます。そしてSheet1のcmb1という名を付けたコンボボックスには Public Sub setsru() cmb1.AddItem "テスト1" cmb1.AddItem "テスト2" End Sub とします。 ここからはAccseeのソースを張るので参考にしてください。調べれば わかると思いますよ。(レコードには最低1レコードあるとします) Accessのユーザーフォームにリストボックスを作り、そこに取り込むExcel一覧を表示させ、それらを1件1件開いて処理(テーブルに取り込んでゆく)していきます。 【テーブルに取り込むVBA】 Private Sub コマンド1_Click() On Err GoTo errTran Dim xlap As Excel.Application Dim xlSh As Excel.Worksheet Dim cn1 As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn1 = CurrentProject.Connection rs.Open "tbl1", cn1, adOpenKeyset, adLockOptimistic Dim cnt, cnt2 As Long Dim val1 As String cnt2 = DMax("key", "tbl1") + 1 Set xlap = CreateObject("Excel.Application") xlap.DisplayAlerts = False For cnt = 0 To list1.ListCount - 1 xlap.Workbooks.Open (list1.ItemData(cnt)) rs.AddNew Set xlSh = xlap.Workbooks(1).Worksheets(1) rs!Key = cnt2 val1 = xlSh.OLEObjects("cmb1").Object.Value rs!ank1 = val1 xlap.ActiveWorkbook.Close (False) Set xlSh = Nothing cnt2 = cnt2 + 1 Next rs.Update rs.Close cn1.Close xlap.DisplayAlerts = True xlap.Quit Set rs = Nothing Set cn1 = Nothing Set xlap = Nothing MsgBox "処理は終了でテーブルにデータ入れました", vbInformation, "" Exit Sub errTran: xlap.DisplayAlerts = True End Sub もちろんVBでもできますので、VB2008など勉強するのは悪くないですよ。
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルVBAはエクセル向けの操作やオブジェクトのメソッド、プロパティが使えます。 エクセルでアンケート回答が出来上がる以上VBAで無いと出来ません。 ただし (1)アンケートがエクセルでやる必要が絶対か。否。 質問のようなのはVBでフォーム上にオプションボタンなど貼り付けても出来る。回答結果はcsvファイルにでもつくり、それらを集計する。この後にエクセルを使うことも出来る。 (2)VBを使っても、エクセルのVBAの機能(オブジェクト)を使いますと宣言すれば、使えるので、実質VBでやりましたといっても、エクセルVBAの世界に入らないといけない(エクセルの機能を使わないといけない) VBのステートメント・コード・関数だけで例えばエクセルの「セルの削除」などのプログラムを1から作れるわけが無い。 == 質問のようなのことをVBAでやろうとすると、良き指導者(教えてくれる人)が居ないと非常に難しい。 しかし世の中広くて、本を読んだだけで、今必要な機能だけだが、こなせる優れた人も居るようだ(他言語既習者などが多いのではと思うが)それと若さ(頭の柔軟性)でやってしまう人もあると思う。 しかし、旧い時代でもあったせいもあるが、数十年間で文系職場の私の周りにはVBA的なソフトをプログラムでいじくる人は出なかった。 好きでないとできない面がある。また独学では時間がかかり、知識など偏り、壁にぶつかる恐れも多い。 努力奮闘を強いられるとは思う。 == >チェックボックス」や「オプションボタン」などを利用して でも、正面のVBAを使わず、LinkedCell、FillListRangeなど使い、 セルと連動させ、エクセル関数を使って処理することは出来る。 その際のネックが100ブックのようなブックに分かれていることだ 。同じ表形式のシートを100個串刺し的集計する方法が無いか勉強したら。
- higekuman
- ベストアンサー率19% (195/979)
VBAで可能です。 頑張ってください。