ID非公開

2021/5/12 22:02

33回答

VBAのFunctionについて Functionプロシージャを勉強しています。 下記のコードをFunctionで書き直したらどうなるかという事を勉強しています。

Visual Basic | Excel41閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

1
画像

1人がナイス!しています

ThanksImg質問者からのお礼コメント

ご丁寧にありがとうございました。 画像まで、付けていただき、ありがとうございました。

お礼日時:5/13 21:23

その他の回答(2件)

0

これではできませんね。 Function内で全部数えようとしています。これでは総合計しか出ません。 行別の合計を出すには ①外側のループをメインルーチンにする。 ②行別に配列に入れる ③サブルーチンでセルに書き込む どれかの処理が必要になります。 また、色は関数の結果に入れているので、色を渡しても意味がありません。 せっかく関数にするのなら、範囲を渡した方がいいです。範囲を指定すると、色が返ってくる。この方が便利かと思います。 ①の例です。 Option Explicit ' Sub Macro1()     Dim RInp As Long     Dim Area As Range '     [J1:L1] = Array("赤", "黄色", "黒") '     For RInp = 2 To 6         Set Area = [B1:I1].Offset(RInp - 1)         [J1:L1].Offset(RInp - 1) = MyCol(Area)     Next RInp End Sub ' Function MyCol(Area As Range) As Variant     Dim Cell As Range     Dim ColorS(2) As Integer '     For Each Cell In Area         ColorS(0) = ColorS(0) - (Cell.Interior.ColorIndex = 3)         ColorS(1) = ColorS(1) - (Cell.Interior.ColorIndex = 6)         ColorS(2) = ColorS(2) - (Cell.Interior.ColorIndex = 1)     Next Cell     MyCol = ColorS End Function

前回答は、メインルーチンから呼び出す設計です。 ユーザー定期関数にして、セル上で使いたい場合 J2: =ColorIndexC(B2:I2,3) K2: =ColorIndexC(B2:I2,6) L2: =ColorIndexC(B2:I2,1) 下へコピペ。 ' Function ColorIndexC(Area As Range, ColorIndex As Integer) As Integer     Dim Cell As Range '     For Each Cell In Area         ColorIndexC = ColorIndexC - (Cell.Interior.ColorIndex = ColorIndex)     Next Cell End Function

0

こんにちは。 functionの特性でみたとき、 セル J2 = funcCountColor( "赤" , A2:C9) セル K2 = funcCountColor( "黄" , A2:C9) セル L2 = funcCountColor( "黒" , A2:C9) これが、シートの関数。 function funcCountColor( c1 , vRange) select case c1 case "赤" v1 = 3 case "黄" v1 = 6 case "黒" v1 = 1 case else funcCountColor = "色の指定を確認してください" exit function end select vcnt = 0 for each r1 in vRange mycolor = r1.Interior.ColorIndex if mycolor = v1 then vcnt = vcnt + 1 end if next funcCountColor = vcnt end function こんな感じで、個人関数を作成します。 セルには「答えが一つ」になるようなコードにすること。 シートが何回計算しても、正しく動作するように、最低限の引数にします

ID非公開

質問者2021/5/13 21:21

ご丁寧にありがとうございました。 Functionの特性を考えるという事のスキルがありませんでした。 本当にありがとうございました。