• ベストアンサー

Excel2003でCountIFonDispを保存する方法

以前、こちらの質問で拝見した下記設定をエクセル2003で行いましたが、 1度ファイルを閉じて再度あけたときに再計算が不可でした。 調べましたところExcel2007だと保存の際に「バイナリ保存」を指定すると、再度ファイルを開けた際に下記設定内容が有効になるようですが・・2003にはそのような機能はないのでしょうか。初歩的な質問で恐縮ですが、周りにも分かる人がいないためご教授のほどお願い致します。 ***************************************************************** ワークシート画面でALT+F11 を押す VBE画面になるので、 メニューの挿入から標準モジュールを選ぶ 標準モジュールでのコード入力画面で下記をコピペ &ウィンドウの×ボタンを押してVBE画面を閉じる ワークシート画面で適当なセルで =COUNTIFonDISP(セル範囲, 条件)を設定 →ファイルを閉じるまでは数式が使用できますが1度閉じると 再計算不可になります。 ----------------------------------------------------- Public Function CountIFonDisp(r As Range, cond As String) As Long Dim count As Long Dim x As Range For Each x In r If x.EntireRow.Hidden = False Then count = count + Application.WorksheetFunction.CountIf(x, cond) End If Next CountIFonDisp = count End Function ----------------------------------------------------- *****************************************************************

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> ファイルを閉じるまでは数式が使用できますが1度閉じると > 再計算不可になります。 VBAによるユーザー定義関数ですからマクロが有効になっていないと使えません。開くときにマクロを有効にして下さい。 http://support.microsoft.com/kb/881335/ja

daisy823
質問者

お礼

ご指摘ありがとうございました! アドバイス頂いた方法にて解決しました! ありがとうございますm( _ _)m★

その他の回答 (1)

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

ただのユーザー定義関数に見えるのですが・・・? >→ファイルを閉じるまでは数式が使用できますが1度閉じると 再計算不可になります コードを入力した標準モジュールは、その式を利用するブックと同じか確認してください。

daisy823
質問者

補足

アドバイスを頂きありがとうございました。 コードは該当ブックについておりました。 回答者no.2のマクロのセキュリティレベルにて解決しました。 ありがとうございました。

関連するQ&A

  • EXCEL2010エラーVBA

    下記を実行するとエラーになりEXCEL2010が終了してしまいます。 fDebug:0 offset00009391 がエラーメッセージです。 何が原因でしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim rg As Range Dim r As Variant Dim c As Long Dim hanni1 As Range Dim atai As Range Set ws = Worksheets("あああ") Set rg = Worksheets("コード").Range("A1:B10") r = ws.Cells(Rows.Count, 1).End(xlUp).Row Set hanni1 = ws.Range(Cells(2, 2), Cells(r, 3)) Set atai = ws.Range(Cells(2, 3), Cells(r, 3)) atai = Application.VLookup(hanni1, rg, 2, False) End Sub

  • Excel2003で動作するものがExcel97で使用できません!

    Excel20031で動作している下記VBAがExcel97では動作しません。問題のところのみ記述します。 Private Sub CommandButton2_Click() Dim fStr As String, foundCell As Range Dim i As Long, j As Long Dim x As Range, y As Range fStr = TextBox1.Text Set iSheet = iBook.Sheets(1) Set foundCell = iSheet.Range("K:K").Find(fStr, lookat:=xlWhole) これで何をしているかというと、「判定フォーム」シートから別のシートを呼び出し、判定フォームに入力した値を検索して、その行に書かれている値を判定フォームに取り込むという動作をしています。Excel2003では動作するのですが、Excel97では Set foundCell = iSheet.Range("K:K").Find(fStr, lookat:=xlWhole) のところで「RangeクラスのFindプロパティを取得できません」というエラーが出てしまいます。2003と97で何か違うところがあるのでしょうか。わかる方ぜひ教えてください。よろしくお願いいたします!!!

  • Excel のアドイン

    Excel2003です。 xlaファイル内に次のような関数があった場合、  Function addinfunc(a As long, b As long) As long  Dim c As long  c = a + b  addinfunc = c  End Function シート上からは =addinfunc(B1,C1) という風に利用できますが、 xlsファイル内のプロシージャーから Debug.Print addinfunc(Sheets("Sheet1").Range("C1")), Sheets("Sheet1").Range("B1")) という風には使えません。 プロシージャー内で使うということはもともとできないのか、 何か設定があるのかどういうものでしょうか?

  • エクセルのマクロ

    下記のマクロを実行するといつも.Findのところでフリーズしてしまいます。 同じ方法で違うBookからの取込には不具合はないのですが、何故だかわかりません。 ちょっと長くなりますが、どなたか教えてください。 'Function fn_KAKUNIN_Update(strSheetName As String, strInBookName As String) '変数宣言 Dim wksInSheet As Worksheet '入力シート Dim wkbInBook As Workbook '入力ブック Dim wksUpSheet As Worksheet '更新するシート Dim lngKAKUNIN_MaxRow As Long Dim lngSYACHO_MaxRow As Long Dim intMsg As Integer Dim strGenbaNo As String Dim i As Long Dim j As Long Dim rngFind As Range Dim lngStrNo As Long Set wkbInBook = Workbooks(strInBookName) Set wksInSheet = wkbInBook.Worksheets Set wksUpSheet = Workbooks(pstrBookName).Worksheets(strSheetName) fn_KAKUNIN_Update = 1 lngKAKUNIN_MaxRow = wksInSheet.Range("C4").CurrentRegion.Rows.Count lngSYACHO_MaxRow = wksUpSheet.Range("H4").CurrentRegion.Rows.Count lngStrNo = 4 For i = lngStrNo To lngSYACHO_MaxRow strGenbaNo = wksUpSheet.Range("H" & i) With wksInSheet.Range("C4:C" & lngKAKUNIN_MaxRow) Set rngFind = .Find(strGenbaNo, LookIn:=xlValues, MatchCase:=False) If rngFind Is Nothing Then Else

  • VBEが閉じてしまいます。

    Sub Sample() Dim mdlName As String mdlName = "test" Debug.Print AllProcName(mdlName) End Sub Function AllProcName(ByVal strModuleName As String) As String Dim mdl As Module Dim lngDecCnt As Long '宣言セクションの行数 Dim strName As String 'プロシージャ名比較用 Dim strProcName As String '全プロシージャ名 Dim lngR As Long 'プロシージャの種類 Dim i As Long DoCmd.OpenModule strModuleName Application.VBE.MainWindow.Visible = False Set mdl = Modules(strModuleName) '宣言セクションの行数格納 lngDecCnt = mdl.CountOfDeclarationLines '最初のプロシージャ名格納 strName = mdl.ProcOfLine(lngDecCnt + 1, lngR) strProcName = strName & vbNewLine '宣言セクションの次行から最終行までループ For i = lngDecCnt + 1 To mdl.CountOfLines '新規プロシージャ名取得 If strName <> mdl.ProcOfLine(i, lngR) Then strName = mdl.ProcOfLine(i, lngR) 'プロシージャ名追加 strProcName = strProcName & strName & vbCrLf End If Next i Set mdl = Nothing AllProcName = strProcName End Function と言うコードをVBE画面でF5で実行すると、VBEが閉じてしまいます。 しかしF8でゆっくりやっていくとVBE画面は閉じません。 なぜ一気にやると閉じてしまうのでしょうか? Application.VBE.MainWindow.Visible = False をコメントアウトすると VBE画面は閉じませんが該当のモジュールが実行後にアクティブになります。 環境はwin8.1、アクセス2010です。

  • VBA? 色のついた文字のセルを数えたい

    色のついた文字の記載があるセルをカウントしたく 色々調べました。結局VBAで設定する方法にしたのですが 設定しテストをするとどうしてもカウント数が合いません。 全くの初心者の為何が間違っているのか全く分かりません。 どなたか教えて下さい。 VBAも全く知らない者でしたので 調べて以下のものをそのまま貼り付けました。 Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng   If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function Function GetIndx(Rng As Range) If Rng.Count > 1 Then   GetIndx = vbNullString   Exit Function End If GetIndx = Rng.Font.ColorIndex End Function 何が間違っているのでしょうか?

  • 【Excelマクロ】 セルの色取得

    古いファイルを加工することが多々あり、セルに塗られている色を調べる(セルの書式設定→塗りつぶし→その他の色→ユーザー設定)のが非常に面倒です。 RGB値をマクロで表示させる方法を見つけたものの、セルが指定(A1/A2/B1)されています。 <1つ右> Sub 色情報取得() Dim r As Long Dim g As Long Dim b As Long n = Range("A1").Interior.Color r = n \ 256 ^ 0 Mod 256 g = n \ 256 ^ 1 Mod 256 b = n \ 256 ^ 2 Mod 256 Range("A2") = r & "," & g & "," & b End Sub <1つ左> Sub 色情報取得() Dim r As Long Dim g As Long Dim b As Long n = Range("A1").Interior.Color r = n \ 256 ^ 0 Mod 256 g = n \ 256 ^ 1 Mod 256 b = n \ 256 ^ 2 Mod 256 Range("B1") = r & "," & g & "," & b End Sub 調べたいセルにカーソルを置いた状態で実行するマクロをご教示ください。 希望1.画像のように1つ右 or 1つ左、もしくはn個右 or n個下など、表示させたいセルを自由に設定したい 希望2.複数セルを一括で処理したい よろしくお願い致します。

  • エクセルマクロで変数を使ったセル範囲指定

    Dim x As Long Dim y As Long として x = Range("A1").End(xlDown).Row For y = 1 To x としました。 このときRange("A" & y)からRange("A" & x)を範囲指定したいときは どのように記述すればよいのでしょうか?

  • ExcelVBAで次のコードを説明して欲しい

    教えてください。下の表があります。 コード 数量 327 3 327 2 332 5 332 8 332 9 336 5 336 6 標準モジュールに次のようにコードが書いてあります。 Sub コード別集計とグループ化() Dim d As Long Dim s As String d = Cells(1, 1).CurrentRegion.Rows.Count s = "a1:b" & d Range(s).Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2) End Sub 他人が作ったものです。動作は支障ありません。VBAを勉強中なのですが、なぜ、このように記述するのか分かりません。できるだけ詳しく解説していただけないでしょうか。 特に分からないのが s = から始まるところと、Range(s).~のところです。賢者の皆様よろしくお願いします。

  • 【VBA】ユーザ定義関数が動かない

    【VBA】ユーザ定義関数が動かない 下記のようなプログラムをVBEの標準モジュールに記述して、 ワークシートの適当なセルに「=tc("aa","bb")」と入力してEnterを押した所 セルの表示が「=tc("aa","bb")」となってしまい狙った効果が得られません。 本当は、「aabb」と表示させたいのですが、なぜうまくいかないのでしょうか。 ご教授願います。 ◆関数の仕様  引数1と引数2に入力された文字列を連結して返り値として返す。 ◆コード Function tc(str1 As Range, str2 As Range) As String Dim Str As String Str = str1.Value & str2.Valuett tt = Str End Function

専門家に質問してみよう