VBA内でExcelワークシート関数が使えるWorksheetFunctionの解説

Поделиться
HTML-код
  • Опубликовано: 11 сен 2024

Комментарии • 13

  • @adjun6631
    @adjun6631 3 года назад +2

    マクロちゃんねる様。いつも勉強させていただいきありがとうございます。"工事"シートのA列に工事名、B列に日数を入れています。
    工程表に工事名を入れたら、その下にその日数分のセルの背景色を塗るVBAをVLookupを使って作りましたが、ダメでした😓
    Sub baa()
    Dim r As Range, v , n as Long
    set r =Range("D4:T19")'←工程表
    For Each v In r
    If v . value〈〉" " then
    v. offset(1 , n). interior .color= RGB(255,0,0)
    end if
    next v
    end sub 
    ' offsetの()内のnについて、
    set n . value=worksheetfunction . vlookup(v , worksheets("工事").range("A1:B10"), 2 , False)としてみたのですがエラーが出ます😓
    お助けください!

    • @macro-chan
      @macro-chan  3 года назад +1

      set n.value=worksheetfunction.vlookup(v,worksheets("工事").range("A1:B10"), 2,False)
      これは文法的に誤りです。
      nに代入したいのはLong型ですのでsetとvalueが不要ですね。
      あとは、シートの構成がいまいちわからないのでなんとも言えないのですが、もしわからなかったらまた質問してください。

    • @adjun6631
      @adjun6631 3 года назад

      @@macro-chan
      ご返信ありがとうございます。
      n=worksheetfunction.vlookup(v,worksheets("工事").range("A1:B10"), 2,False)
      を挿入すると、「実行時エラー1004 WorksheetFunctionクラスのVlookupプロパティを取得できません」となりました 💦 シートの構成がうまくお伝えできないのがもどかしいです(*_*) とりあえず、実行してくれればよいのですが( ;∀;)

    • @adjun6631
      @adjun6631 3 года назад

      (動画を何度か見返して)on error resume nextを入れたら実行できました😆。前にもコメントでon error resume next のアドバイスいただいていました😅結構使えますね。ありがとうございました😆

  • @user-eo3hj3cx3f
    @user-eo3hj3cx3f 3 года назад +3

    勉強させていただいてます。ちょっと質問なんですがvlookup 関数の参照範囲は絶対参照じゃなくて問題ないのですか?

    • @macro-chan
      @macro-chan  3 года назад +2

      ご視聴ありがとうございます。
      相対参照や絶対参照を気にするのはセルに数式を入れた場合です。
      WorksheetFunction.VLookupではセルに数式を入れたのではなく計算結果を入れているので気にする必要はないです。

    • @user-li6yg8vh1r
      @user-li6yg8vh1r 3 года назад +1

      @@macro-chan 😲なるほど!!💡ってことは、そもそもVBAで絶対参照にする事はないんですよね??

    • @macro-chan
      @macro-chan  3 года назад +5

      動画冒頭でVLOOKUP関数をセル範囲に入れていますよね。こういった「数式」をセル範囲に代入するVBAの場合は普通にVBAを使わずにワークシートに数式を入れる場合と同じルールになるので何もしないとセル参照は相対的にずれていきます。なので絶対参照を使います。
      だけど、WorksheetFunctionではループ処理を使いセル1つ1つに計算の「結果」を代入しています。ですのでシート上ではどこもセル参照していません。相対的に参照元がずれるという概念がそもそもないというわけです。

    • @user-li6yg8vh1r
      @user-li6yg8vh1r 3 года назад

      @@macro-chan ありがとうございました💦Formulaプロパティの動画見させていただきました💦

  • @Kazuki_88888
    @Kazuki_88888 2 года назад

    何時も参考にさせていただき、勉強をすすめております。
    現在WorksheetFunctionを使用してCountif使用して、いくつ都道府県別のデータがあるかを転記する練習をしております。
    エクセル関数だと、集計表のB2セルに=COUNTIF(都道府県!C:C,集計表!A2)と書けば(オートフィルで47都道府県分を計算するとして)正常に表示がされますが、VBAで下記の関数を書いてみましたが、うまく数値が出ませんでした。
    Dim ws As Worksheet
    Dim hyo As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("都道府県")
    Set hyo = ThisWorkbook.Worksheets("集計表")

    '最終行までループする
    For i = 2 To ws.Cells(Rows.Count, "A").End(xlUp).Row
    With hyo.Cells(i, "B").Value = WorksheetFunction.CountIf(ws.Range("C:C"), hyo.Cells(i, "A"))
    End With
    Next i
    ws.Activate
    End sub
    もしかして別のシートでやる場合は、For Nextで回すことがそもそもできなかったりするのでしょうか。図々しいですが、アドバイスなどいただけますと幸甚です。

    • @macro-chan
      @macro-chan  2 года назад +1

      コード書いていただくととても回答しやすくて助かります。
      ループの部分がいくつか間違っているようですね。
      '最終行までループする
      For i = 2 To hyo.Cells(Rows.Count, "A").End(xlUp).Row
      hyo.Cells(i, "B").Value = WorksheetFunction.CountIf(ws.Range("C:C"), hyo.Cells(i, "A"))
      Next i

    • @Kazuki_88888
      @Kazuki_88888 2 года назад

      @@macro-chan
      ありがとうございます!
      いただいたコードを打ち直したところ、きちんとCOUNTIFが生きてくれました。そもそも表の方のカウントしたい都道県を指定していなかったからなんですね。また、余計なWithステートメントも必要ないのが理解できました。
      本当に助かりました!これからも学習させていただきます。

  • @user-ln9zg8fp4z
    @user-ln9zg8fp4z 3 года назад +1

    自分学習用 COUNTIF関数:引数[範囲]に指定したセル範囲で[検索条件]に一致するデータの数を求めます。
    =COUNTIF(範囲, 検索条件) 
    if worksheetfunction.countif(range("A:A"),s)=0 then←A列にinputboxの戻り値が0ならば最終行の1行下にSを代入する。
    else以下0でなければ”すでに存在します”とメッセージを出す。