• ベストアンサー

アクセスからエクセルのa列に入力されているセルの個数を数えたい

アクセスvbaで エクセルのa列の個数を数えることは可能でしょうか? MsgBox GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").WorksheetFunction.Count(Columns("a")) だとコンパイルエラ-となってしまいます。 なので、 エクセル側でa1に集計セルを作って MsgBox GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").Range("a1").Value としていますが できればアクセスからダイレクトに個数を数えたいです。 できますでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

MsgBox GetObject(, "Excel.Application").WorksheetFunction.Count(GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").Columns("a"))

lkhjlkhjlk
質問者

お礼

できました! ご回答ありがとうございます。

その他の回答 (2)

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

テーブルのリンクではダメでしょうか。 リンクを張れば通常のテーブルと同じ扱いで件数がカウントできます。 ファイル→外部データの取り込み→テーブルのリンク

lkhjlkhjlk
質問者

お礼

アクセスのフィールド数とエクセルのフィールド数とが一致しない条件なんです。 汗 ご回答ありがとうございます。

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

ODBC設定のEXCELドライバーを介して、テーブルとしてリンクさせる。

lkhjlkhjlk
質問者

お礼

ODBC設定!?汗 難しそうなので勉強してみます!ご回答ありがとうございます。

関連するQ&A

  • エクセル 何故かシート間の値のコピーが出来ない

    いつもお世話になります。 開いているブックのシート「リスト1~3」に、Book1.xlsの「リスト1~3」の値をコピーする為に、下記のマクロを作成しました。 Dim SH1, SH2, SH3, SH4, SH5, SH6 As Worksheet Set SH1 = ThisWorkbook.Worksheets("リスト1") Set SH2 = ThisWorkbook.Worksheets("リスト2") Set SH3 = ThisWorkbook.Worksheets("リスト3") Set SH4 = Workbooks("Book1.xls").Worksheets("リスト1") Set SH5 = Workbooks("Book1.xls").Worksheets("リスト2") Set SH6 = Workbooks("Book1.xls").Worksheets("リスト3") 'リスト1をコピーする D = SH4.Range("A1").CurrentRegion.Rows.Count E = SH4.Range("A1").CurrentRegion.Columns.Count SH1.Range(Cells(1, 1), Cells(D, E)).Value = SH4.Range("A1").CurrentRegion.Value 'リスト2をコピーする F = SH5.Range("A1").CurrentRegion.Rows.Count G = SH5.Range("A1").CurrentRegion.Columns.Count SH2.Range(Cells(1, 1), Cells(F, G)).Value = SH5.Range("A1").CurrentRegion.Value 'リスト3をコピーする H = SH6.Range("A1").CurrentRegion.Rows.Count I = SH6.Range("A1").CurrentRegion.Columns.Count SH3.Range(Cells(1, 1), Cells(H, I)).Value = SH6.Range("A1").CurrentRegion.Value 以上を実行すると、「アプリケーション定義またはオブジェクト定義のエラーです」とエラーメッセージが出てしまいます。 それぞれのシートの処理の時に、 SH1.Select SH2.Select SH3.Select を入れて、シートを選択してから実行すると問題なく動くのですが、何故このようなことが起こるのでしょう?

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • accessでセルの個数を集計する方法を教えてください。

    accessでセルの個数を集計する場合、count関数を使うと 思いますが、セルの内容が混在していて(例えば、Aとか BとかCなどが混在している場合)、その中で、特定のセル 内容のみ(例えば、Aのみを)を集計するとき、どのような関数あるいは数式を使ったらいいでしょうか。 具体的には、いまリポートで人事考課の考課結果を成績別に集計しようとしています。 よろしくお願いします。

  • excelのファイルとセル値を書き出したい

    excel2003を利用しています。 とあるフォルダにある excelファイル名(自分自身のファイルを除く) を全て書き出して、 且つ A1セルの値をB列に書き出すことを、やろうとvbaを作ってみましたが。 最後のファイルのA1セルを書きだすところで、エラーになっていまい そこだけ空白になってしまいます。※写真参照 記述は以下の通りです。どのように修正すればよいか 教えていただけないでしょうか? また他にもっと優れた記述があれば、そちらも教えて欲しいです。 よろしくお願いします。 Sub test() Dim buf As String, cnt As Long Dim Path As String Path = ThisWorkbook.Path & "\" buf = Dir(Path & "*.xls") cnt = 2 Do While buf <> "" If buf <> ThisWorkbook.Name Then cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Workbooks.Open Filename:=Path & "\" & buf MsgBox Workbooks(buf).Worksheets(1).Range("A1").Value Cells(cnt, 2) = Workbooks(buf).Worksheets(1).Range("A1").Value Workbooks(buf).Close End If Loop End Sub

  • ★部分でインデックスが有効範囲にありません。とでます。

    ★部分でインデックスが有効範囲にありません。とでます。  集計依頼情報(2)から集計用依頼情報にコピーしたものを貼り付け  たいのですが、ここで上のエラーがでます。  何がおかしいのでしょうか? ちなみにエクセルVBAです。   Sub sample() Dim lngKns As Integer Dim lngRow As Long Workbooks.Open Filename:=ThisWorkbook.Path & "\集計用依頼情報(2).csv" Worksheets("集計用依頼情報(2)").Activate '受付日の数をカウントしてデータ数を取得 lngKns = WorksheetFunction.Count(Worksheets("集計用依頼情報(2)").Range("Z2:Z65536")) '集計用依頼情報(2)→集計用依頼情報にコピー Worksheets("集計用依頼情報(2)").Select Worksheets("集計用依頼情報(2)").Range("A2:CW" & 1 + lngKns).Copy Workbooks.Open Filename:=ThisWorkbook.Path & "\集計用依頼情報.csv" '受付日の数をカウントしてデータ数を取得 lngRow = WorksheetFunction.Count(Worksheets("集計用依頼情報").Range("Z2:Z65536")) ★ ThisWorkbook.Worksheets("集計用依頼情報").Activate '値貼り付け ThisWorkbook.Worksheets("集計用依頼情報").Range("A" & lngRow + 1 & _ ":CW" & lngRow + lngKns).Paste ActiveSheet.Paste Application.CutCopyMode = False End Sub

  • エクセル 特定のシートを異なるブックの指定したシートにコピーするマクロ

    エクセルの"貼り付け先.xls"の(シート名="集計")を開いている状態で、 別の異なるブックの"貼り付け元.xls"の(シート名="sheet1")の内容を全部コピーして "貼り付け先.xls"の(シート名="集計元データ")へ貼り付けるマクロは どのようになりますでしょうか? いろいろ調べて下記のように書きましたが、 インデックスが有効範囲にありませんというメッセージが出て、 デバッグを確認すると Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_の部分が黄色く表示されてきます。 (1) "貼り付け先.xls"と"貼り付け元.xls"は同じパソコンのマイドキュメントに保存されています。 (2)"貼り付け元.xls"の"Sheet1"はセルA1から入力されていて、 内容は毎日変わります。 (3)Range("A1")や("A1:IV65536")のセル番地をいろいろ変えたりしても同じでした。 Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ.xls").Range ("A1:IV65536") End Sub

  • エクセルマクロ if文を繰り返したい

    マクロ初心者です。 以下のようなマクロを作ったのですが、 これをE34まで繰り返しの処理をしたいです。 どこにどんな文章を挟んでいいのかわかりません。 Sub けいさん() If Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "B" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "D" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("C22") = "" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" Else Workbooks("日報.xls").Worksheets("お手本").Range("C22").Copy Workbooks("test.xls").Worksheets("II-1(1)").Range("E11").PasteSpecial End If End Sub

  • Access開いているブックのセル値参照

    AccessのVBAからExcelのブック(通常既に開いています)のセルの値を参照するものを作成 しているのですが、うまくいきません。ご教授頂けないでしょうか。 Set Set myXlsSheet = myXls.Worksheets("sheet1") の行がインデックスが有効範囲にあり ません。とエラーがでます。 ここで既に開いているExcelブック自体をWorkbooks.open を使用せずにオブジェクト自体をset して、各シート値を参照することができないでしょうか。 現状できているコード Dim myXls As Object Dim myXlsSheet As Object Set myXls = CreateObject("Excel.Application") Set myXlsSheet = CreateObject("Excel.Sheet") myXls.Visible = False ' Set myXlsSheet = myXls.Workbooks.Open("C:\test.xls", 1) 'これだとまた同じファイルを開いて処理するため処理が遅くなる。 Set myXls = myXls.Workbooks("test.xls") 'インデックスが有効範囲にありません。のエラーがここで出ます。 Set myXlsSheet = myXls.Worksheets("sheet1") Debug.Print myXls.WorksSheets("sheet1").Cells(1, 1).Value myXls.Close Set myXls = Nothing myXls.Quit Set myXlsSheet = Nothing MsgBox "完了"

  • .xlsにワイルドカードを使うには?

    あい20060925.xls  を下記のように記述してはいけないようですが、 ワイルドカードをどのように使用すればよろしいでしょうか? 以上 よろしくお願い致します。 -------------------- Sub tes1() '任意のブックの全シートを1つのブックにまとめる Workbooks("あい*.xls").Activate ActiveWorkbook.Worksheets. _ Copy after:=Workbooks("集計.xls").Sheets(Workbooks("集計.xls").Sheets.Count) End Sub --------------------

  • ACCESSからExcel操作

    アクセスのクエリーにて作成したデーターをエクセルにインポートをしてその後直接アクセス上から条件を入れてオートフィルターを掛け、条件にあったデーターのみセルに色をつけたいのですがオートフィルターで絞った後の処理がうまく出来ません。 Dim DB As DAO.Database Dim xlApp As Object Dim xlbook As Object Dim xlsheet As Object Dim strXlsS As String Dim strExSheet As String   インポート処理はOK   ここからアクセス上で操作をしたい。 strXlsS = "ファイル名フルパス" strExSheet = "シート名" Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True 'エクセル可視、不可視選択 Set xlbook = xlApp.workbooks.Open(strXlsS) Set xlsheet = xlbook.worksheets(strExSheet) xlsheet.Range("A1").Select xlsheet.Range("A1").AutoFilter xlsheet.Range("A1").AutoFilter Field:=8,Criteria1:="条件" ここまでは出来ました。 この後エクセル上では Range("A1:J37").Select と言う感じで選択するのですが、ここをどの様にやれば良いか教えて欲しいのです。 色々と検索をして SpecialCells を使う事までは解かり xlsheet.AutoFilter Range.Columns(1).SpecialCells(xlCellTypeVisible) とやってみたのですが 実行時エラー'424': オブジェクトが必要です。 とエラーになってしまいます。 参考先でもなんでも良いので宜しく御願いします。

専門家に質問してみよう