[[20060308203451]] 『マクロについて』(shota) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロについて』(shota)
文字列の中の数値を合計したい
 Excel2002を使用しております。
 エクセルでおこずかい帳をつけていますが、セルの中に数字と文字を
 混合させたものを計算する事はできますか?			
 例えば			
 商品A100			
 商品B200			
 商品C300			
 といった形です。			
 ユーザー定義関数を作成します。			
 ALT+F11を押してください。			
 [挿入(I)]-[標準モジュール(M)] をクリックして、			
 以下のコードを貼り付けてください。			
 Function 合計(myRange As Range) As Long			
 Dim c As Range			
 '自動再計算に設定			
 Application.Volatile
 'セル数だけくり返す
 For Each c In myRange
 '数値変換関数にセル内容を渡して戻り値を合計
    合計 = 数値変換(c.Value) + 合計
 Next
 End Function
 Function 数値変換(c) As Long
 Dim i As Integer
 'セル内容を受け取り、文字数だけくり返す
 For i = 1 To Len(c)
 '文字が数値に変換できるものであれば
    If IsNumeric(Mid(c, i, 1)) Then
 'その数値だけ集めて連結し合計プロシージャに値を戻す
        数値変換 = CLng(数値変換 & Mid(c, i, 1))
    End If
 Next
 End Function
 ALT+F11を押してエクセルに戻ってください。

 こういったものを教えてもらったんですが、普通のマクロのように
 モジュール1に
 SUB()
 マクロ内容
 ENDSUB
 が無いから、マクロボタンも作れないし、実行の仕方もわかりません。
 どうか教えてください。
 宜しくお願いいたします。
 Excel2002  WindowsXP


 A1〜A3の範囲を合計をする場合
 =合計(A1:A3)
 とセルに式を入れます。
 ユーザー定義関数とは、その名の通り関数を自分(ユーザー)で作って(定義して)
 セルの中で関数として使おうというものです。
 ボタンから呼べないのは引数があるからで、他のマクロから呼び出すことはできます。
 (やっちん)

やっちんさん ありがとうございます。
 他のマクロから呼び出すことはできます。とありますがてんで見当も付きません。
 もう一度勉強して出直してきます。
 (shota)

 >合計 = 数値変換(c.Value) + 合計
 ここで呼び出してないですか?

 それと、Application.Volatile はいらないんじゃないでしょうか。 (アカギ)


 他のマクロから「合計」を呼び出すサンプルです。
 これもA1からA3の合計を出します。
 Sub Test()
    Dim n As Double
    n = 合計(Range("A1:A3"))
    MsgBox n
 End Sub
 (やっちん)

やっちんさんありがとうございました。
 質問の意味の取り違えがあったようです。
 合計云々ではないんです。
 Function 合計(myRange As Range) As Long			
 Dim c As Range			
 '自動再計算に設定			
 Application.Volatile
 'セル数だけくり返す
 For Each c In myRange
 '数値変換関数にセル内容を渡して戻り値を合計
    合計 = 数値変換(c.Value) + 合計
 Next
 End Function
 Function 数値変換(c) As Long
 Dim i As Integer
 'セル内容を受け取り、文字数だけくり返す
 For i = 1 To Len(c)
 '文字が数値に変換できるものであれば
    If IsNumeric(Mid(c, i, 1)) Then
 'その数値だけ集めて連結し合計プロシージャに値を戻す
        数値変換 = CLng(数値変換 & Mid(c, i, 1))
    End If
 Next
 End Function
 ALT+F11を押してエクセルに戻ってください。
 これで作ったマクロにはボタンが付けられないからマクロが実行できないのです。
 どうやってマクロを実行させるんでしょうか。
 このことが伺いたかったのです。
 普通に
 SUBTEST()
 マクロ内容
 ENDSUB
 これだとマクロボタンも作れるしそれをクリックすればマクロが実行できます。
 (shota)


 >質問の意味の取り違えがあったようです。
 質問の意味の取り違えでは無く、回答の意味がご理解できておられないような気がしますが・・・。

 ユーザー定義関数の使い方は、はじめにやっちんさんが説明されていますし、
 ボタンによる呼び出し方も、やっちんさんが回答されています。

 (川野鮎太郎)

実際に試してみました。
 私のマクロが悪いのかもしれませんが
 コンパイル エラー
 subまたはFunctionが定義されていません
 と出てエラーになります。
 それにしても
 Function 合計(myRange As Range) As Long
 省略
 End Function
 というマクロは面倒なマクロですね。
 普通にモジュー1に書くマクロと何か用途が違うのでしょうね。
 もっと勉強しなければと痛感しております。
 ありがとうございました。
 (shota)

 仰るように用途が違います。
 ユーザー定義関数と呼ぶものは、セルの中で関数として使うものです。
 引数と
 Sub,Functionの違いを勉強されるといいと思います。
 ボタンで動かすことに固執されていますが、そうするとユーザー定義関数の良さが消えてしまいますよ。
 特に、直接呼べるようにすると、もう関数とは言えません。
 (やっちん)

やっちんさんお返事ありがとうございます。
 本当にボタンをクリックしなくてもマクロが自動出来たらいいでしょうね。
 Sub,Functionの違いを勉強したいとも思いますが今はキリキさんの指示で、
 指示なんて言葉を使ったらまたしかられるかも。
 とにかく「配列数式」をマスターしなくてはならないんです。
 脳梗塞で無職の私が何でいまさらと思っておられるでしょうが、
 エクセルと向き合っていると夢中になって後遺症の痛みも薄れるような感じがするんです。
 「配列数式」の後には「ユーザーフォーム」の作成も待っています。


 いまさらなんて思ってませんよ(^^;
 じゃあ、今はこれだけ覚えておいてください。
 「マクロはボタンから実行できるものだけではありません。」
 ブックを開いたとき、閉じるとき、セルに何か入力したとき、
 セルをダブルクリックしたとき、他のシートを選択したとき、
 再計算が起こったとき、等など
 そのタイミングで動くマクロがあるんです。
 イベントと呼ばれるものです。
 ボタンを押すのもそうですが、何かをきっかけにしなければマクロは動きません。
 ボタンを押すことはそのうちの一つにすぎないのです。
 (やっちん)

やっちんさんありがとうございます。
 マクロにも色々とあるということだけでも良い勉強になりました。
 (shota)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.