こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

VBAでエクセルの自動集計ができますか?

エクセルを利用してアンケートを作成しています。
具体的には、「コントロールツールボックス」の「チェックボックス」や「オプションボタン」などを利用して回答項目を作成し、
回収後に一括して集計・分析したいと考えています。
(回答対象者は100人程度ですので、集計を自動化したいと考えています)

そこで質問なのですが、
・複数のエクセルブックを対象に、上記のような回答の自動集計
 を行うためには、VBAで可能でしょうか。
 それともVBでないとできないでしょうか。

VBAとVBの違いもよく分かっていないので大変恐縮なのですが・・・
どうぞよろしくお願いします

投稿日時 - 2008-04-26 00:30:52

QNo.3976291

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

説明が前後しますが、VBAはExcelやAccessに搭載されている自動処理のためのプログラムのことです。開発環境を不要で、手軽な反面できる事が限られていますが、Excel上の処理で困ることはないでしょう。

VBはそれ自体独立したプログラムで、VisuakStudioなどの開発環境がないとプログラムは作れません。C#という兄弟的な言語があり、今はこちらの方が良く使いますが、VBはExcelとの相性がいいので手放せません。

VisuakStudio2008は3万ほどで購入でき、無料版もありますがやや制限されます。Webアプリの作成や、FLASH的なWPFも作れるので、持っていて損はないですよ。

ちなみに「ブックを開いたときにコンボボックスへ値をセット」とはクライアントが開いた時のことです。

投稿日時 - 2008-04-27 06:28:33

ANo.3

回答といいつつろくに回答してないものばかり・・。

ここでは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など勉強するのは悪くないですよ。

投稿日時 - 2008-04-27 06:07:49

ANo.2

エクセルVBAはエクセル向けの操作やオブジェクトのメソッド、プロパティが使えます。
エクセルでアンケート回答が出来上がる以上VBAで無いと出来ません。
ただし
(1)アンケートがエクセルでやる必要が絶対か。否。
質問のようなのはVBでフォーム上にオプションボタンなど貼り付けても出来る。回答結果はcsvファイルにでもつくり、それらを集計する。この後にエクセルを使うことも出来る。
(2)VBを使っても、エクセルのVBAの機能(オブジェクト)を使いますと宣言すれば、使えるので、実質VBでやりましたといっても、エクセルVBAの世界に入らないといけない(エクセルの機能を使わないといけない)
VBのステートメント・コード・関数だけで例えばエクセルの「セルの削除」などのプログラムを1から作れるわけが無い。
==
質問のようなのことをVBAでやろうとすると、良き指導者(教えてくれる人)が居ないと非常に難しい。
しかし世の中広くて、本を読んだだけで、今必要な機能だけだが、こなせる優れた人も居るようだ(他言語既習者などが多いのではと思うが)それと若さ(頭の柔軟性)でやってしまう人もあると思う。
しかし、旧い時代でもあったせいもあるが、数十年間で文系職場の私の周りにはVBA的なソフトをプログラムでいじくる人は出なかった。
好きでないとできない面がある。また独学では時間がかかり、知識など偏り、壁にぶつかる恐れも多い。
努力奮闘を強いられるとは思う。
==
>チェックボックス」や「オプションボタン」などを利用して
でも、正面のVBAを使わず、LinkedCell、FillListRangeなど使い、
セルと連動させ、エクセル関数を使って処理することは出来る。
その際のネックが100ブックのようなブックに分かれていることだ
。同じ表形式のシートを100個串刺し的集計する方法が無いか勉強したら。

投稿日時 - 2008-04-26 09:35:00

ANo.1

VBAで可能です。
頑張ってください。

投稿日時 - 2008-04-26 03:38:38

あなたにオススメの質問