マクロちゃんねる様。いつも勉強させていただいきありがとうございます。"工事"シートの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)としてみたのですがエラーが出ます😓 お助けください!
何時も参考にさせていただき、勉強をすすめております。 現在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で回すことがそもそもできなかったりするのでしょうか。図々しいですが、アドバイスなどいただけますと幸甚です。
コード書いていただくととても回答しやすくて助かります。 ループの部分がいくつか間違っているようですね。 '最終行までループする 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
マクロちゃんねる様。いつも勉強させていただいきありがとうございます。"工事"シートの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)としてみたのですがエラーが出ます😓
お助けください!
set n.value=worksheetfunction.vlookup(v,worksheets("工事").range("A1:B10"), 2,False)
これは文法的に誤りです。
nに代入したいのはLong型ですのでsetとvalueが不要ですね。
あとは、シートの構成がいまいちわからないのでなんとも言えないのですが、もしわからなかったらまた質問してください。
@@macro-chan
ご返信ありがとうございます。
n=worksheetfunction.vlookup(v,worksheets("工事").range("A1:B10"), 2,False)
を挿入すると、「実行時エラー1004 WorksheetFunctionクラスのVlookupプロパティを取得できません」となりました 💦 シートの構成がうまくお伝えできないのがもどかしいです(*_*) とりあえず、実行してくれればよいのですが( ;∀;)
(動画を何度か見返して)on error resume nextを入れたら実行できました😆。前にもコメントでon error resume next のアドバイスいただいていました😅結構使えますね。ありがとうございました😆
勉強させていただいてます。ちょっと質問なんですがvlookup 関数の参照範囲は絶対参照じゃなくて問題ないのですか?
ご視聴ありがとうございます。
相対参照や絶対参照を気にするのはセルに数式を入れた場合です。
WorksheetFunction.VLookupではセルに数式を入れたのではなく計算結果を入れているので気にする必要はないです。
@@macro-chan 😲なるほど!!💡ってことは、そもそもVBAで絶対参照にする事はないんですよね??
動画冒頭でVLOOKUP関数をセル範囲に入れていますよね。こういった「数式」をセル範囲に代入するVBAの場合は普通にVBAを使わずにワークシートに数式を入れる場合と同じルールになるので何もしないとセル参照は相対的にずれていきます。なので絶対参照を使います。
だけど、WorksheetFunctionではループ処理を使いセル1つ1つに計算の「結果」を代入しています。ですのでシート上ではどこもセル参照していません。相対的に参照元がずれるという概念がそもそもないというわけです。
@@macro-chan ありがとうございました💦Formulaプロパティの動画見させていただきました💦
何時も参考にさせていただき、勉強をすすめております。
現在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で回すことがそもそもできなかったりするのでしょうか。図々しいですが、アドバイスなどいただけますと幸甚です。
コード書いていただくととても回答しやすくて助かります。
ループの部分がいくつか間違っているようですね。
'最終行までループする
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
@@macro-chan
ありがとうございます!
いただいたコードを打ち直したところ、きちんとCOUNTIFが生きてくれました。そもそも表の方のカウントしたい都道県を指定していなかったからなんですね。また、余計なWithステートメントも必要ないのが理解できました。
本当に助かりました!これからも学習させていただきます。
自分学習用 COUNTIF関数:引数[範囲]に指定したセル範囲で[検索条件]に一致するデータの数を求めます。
=COUNTIF(範囲, 検索条件)
if worksheetfunction.countif(range("A:A"),s)=0 then←A列にinputboxの戻り値が0ならば最終行の1行下にSを代入する。
else以下0でなければ”すでに存在します”とメッセージを出す。