• 締切済み

関数をVBAで知りたい

300ぐらいのセルに関数で計算をしているのですが、時間がかかって仕方ありません。次の関数をVBAに直して頂けませんか 質問1:表示したいセルはRange("AD98")です =IF(AND(COUNT(OFFSET(AC98,1-AD$8,0):AC98)<>AD$8),"",IF(AND(COUNT(OFFSET(AC98,1-AD$8,0):AC98=AD$8,AD97=""),AVERAGE(OFFSET(AC98,1-AD$8,0):AC98),IF(COUNT(AD97=1),AD97+2/(AD$8+1)*(AC98-AD97)))) 質問2:表示したいセルはRange("AC98")です =IF(AND(COUNT(AA98)=1,COUNT(AB98)=1),AA98-AB98,"") よろしくお願いします

みんなの回答

  • wein1982
  • ベストアンサー率25% (1/4)
回答No.2

絶対参照というのはどのセルを選択していても決まったセルに対してマクロを実行するもので、例の場合は式を入力するセルが決まっているので絶対参照がいいかなと思いました。 AD98ではなく選択しているセルに同じ式を入れたいのでしたら、相対参照でOKです。ちなみにマクロの記録を始めにするときは絶対参照になっているので特に何もする必要はありません。 マクロ名:何でもいいです ショートキー:省略可。 マクロの保存先:個人用マクロブック(なかったら作ってください) こんな感じでいかがでしょうか。

saab8743
質問者

補足

ありがとうございます できました。ただ、式ではなく答えをセルに入れたんのですがそういったことできますか、といいますのはその答えを次のようにコピーしたいので Sheets("XXX").Range("V10:AD98").Copy Destination:=Sheets("XXX").Range("V9") AD98の答えを順番に上に上げていきます。 よろしくお願いします

  • wein1982
  • ベストアンサー率25% (1/4)
回答No.1

質問1の式を貼り付けたらエラーでしたけど式は合っていますか? あらかじめ式を記入し、"AD98"(1の場合)を選択した状態で ツール→マクロ→新しいマクロの記録 で絶対参照にして F2キー→Enterキー を押せば望みのVBA式が記録されると思います。

saab8743
質問者

補足

ありがとうございます。 絶対参照について教えてください。Windows XPですが同じですか ツール→マクロ→新しいマクロの記録で窓が出てきて絶対参照にするにはどうすればいいのでしょうか マクロ名: ショートキー: マクロの保存先: などが出てきます。 よろしくお願いします。

関連するQ&A

  • 関数をVBAで書き直す

    よろしくお願いします 下の関数をVBAで書き直す B5からB232までのセルに下記の関数を1つ1つ 書き込んでいるのですが、他にもC5:C232からS5:S232までの 17列のセルに書き込むのが大変な作業となってしまいますので なにとぞお知恵をお貸しください。 =IF(COUNT($AB$5:$AB$232)<1,"",VLOOKUP(SMALL($AB$5:$AB$232,1),$AB$5:$AG$232,6,6))   ~ IF(COUNT($AB$5:$AB$232)<233,"",VLOOKUP(SMALL($AB$5:$AB$232,232),$AB$5:$AG$232,6,6))

  • 【エクセルの関数について】

    エクセルの関数についてです エクセルで出勤簿を作っているのですが、関数の数式がわかりません。 結論から申しますと、退勤時間を24:00と書いても0:00←(24時のこと)と書いても同じ処理をしてほしいということです。 詳細を以下に記載していきます C9出勤:手入力 D9退勤:手入力  ←問題はココ 休憩セルには=AN9 AN9には「=SUM($AD9:$AM9)」 AD9には「=IF(OR(($C9=$D9),(設定!$A$4=設定!$C$4),COUNT($C9,$D9,設定!$A$4,設定!$C$4)<4),0, IF(AND(設定!$A$4<=$C9,$C9<=設定!$C$4,設定!$A$4<=$D9,$D9<=設定!$C$4),($D9-$C9), IF(AND(設定!$A$4>$C9,設定!$A$4<$D9,$D9<=設定!$C$4),($D9-設定!$A$4), IF(AND(設定!$A$4<=$C9,$C9<設定!$C$4,設定!$C$4<$D9),(設定!$C$4-$C9), IF(AND(設定!$A$4>$C9,設定!$C$4<$D9),(設定!$C$4-設定!$A$4),0)))))」 AM9には「=IF(OR(($C9=$D9),(設定!$A$14=設定!$C$14),COUNT($C9,$D9,設定!$A$14,設定!$C$14)<4),0, IF(AND(設定!$A$14<=$C9,$C9<=設定!$C$14,設定!$A$14<=$D9,$D9<=設定!$C$14),($D9-$C9), IF(AND(設定!$A$14>$C9,設定!$A$14<$D9,$D9<=設定!$C$14),($D9-設定!$A$14), IF(AND(設定!$A$14<=$C9,$C9<設定!$C$14,設定!$C$14<$D9),(設定!$C$14-$C9), IF(AND(設定!$A$14>$C9,設定!$C$14<$D9),(設定!$C$14-設定!$A$14),0)))))」 AD9~AN9までは同じようなことが書いてあります。 設定!$A$4には「12:00」 設定!$C$4には「13:00」 以上までが、休憩セルです H9拘束時間には、=AS9 AS9には、「=AC9」 AC9には、「=IF(COUNT($C9:$D9)<2,0,IF($AA9*24>$AB9*24,0,TEXT($AB9-$AA9,"[h]:mm")))」 AA9には、「=IF(COUNT($C9:$D9)<2,0,TEXT(CEILING($C9,"0:10"),"[h]:mm"))」 AB9には、「=IF(COUNT($C9:$D9)<2,0,TEXT(FLOOR($D9,"0:10"),"[h]:mm"))」 以上が拘束時間 I9普通残業セルには、=AT9 AT9には、「=IF(D9-設定!$C$2<0,"0:00",D9-設定!$C$2)」 設定!$C$2には、「18:00」 以上が普通残業時間 J9深夜残業時間セルには、「=AU9」 AU9には、「=AQ9」 AQ9には、「=SUM($AO9:$AO9)」 AO9には、「=IF( COUNT($C9:$D9)<2, 0, IF( AND(22<=$AA9*24,$AA9*24<29,22<$AB9*24,$AB9*24<=29), ($AB9-$AA9), IF( AND($AA9*24<=22,22<$AB9*24,$AB9*24<=29), ($AB9-"22:00"), IF( AND(22<=$AA9*24,$AA9*24<29,29<=$AB9*24), ("29:00"-$AA9), IF( AND($AA9*24<22,29<$AB9*24), ("29:00"-"22:00"), 0 )))))」 以上が深夜残業時間 ということで、分かる方ご教授願います。

  • エクセルNA関数の式について。。

    先輩から引き継いだエクセルにグラフを作成したのですが、空白になっているセルのグラフが0を表示してしまい困っています。 ネットでNA関数を使えば解消されると勉強し、他のセルは出来たのですが以下の式が入っているデータだけは#NA表示になりません。 どこの部分にNA()を記入するべきでしょうか? 私にはギブアップです。 詳しい方のお知恵を頂けるとありがたいです。。 エクセルは2007を使っています。 =IF(AND(COUNT(OFFSET(F3,1-K$2,0):F3)<>K$2),"",IF(AND(COUNT(OFFSET(F3,1-K$2,0):F3)=K$2,K2=""),AVERAGE(OFFSET(F3,1-K$2,0):F3),IF(COUNT(K2=1),K2+2/(K$2+1)*(F3-K2)))) よろしくおねがいします。

  • VBA 可視セルのみをoffsetで移動

    VBA 可視セルのみをoffsetで移動したいです。 AutoFilterで表示した"A列の"可視セルのみを、1セルずつoffsetで下方向に移動したいです。  AB 1○○ 2○✕ 3✕○ 4○✕ 5 ・ ・ ・ これにフィルタをかけ、 ○ のみを表示すると  ▼  AB 1○○ 2○✕ 4○✕ 5 ・ ・ ・ になりますが、 range("A1").offset(1,0).select で1セルずつ順に下へ降りていくと 非表示のA3も選択されてしまいます。 どうすればよいでしょうか?

  • エクセルの関数について

    下記のようなことが関数で出来ますか? A1セルに「AA AB AC AD AE」というデータがあったときに、 B1に、A1に「AB」か「AC」という文字列があればそれを取り出す。なければブランク(もしくは#N/A) かつ優先順位もつけたい。 (「AB」も「AC」もある場合は「AB」) 「AA」と「AB」の間など、文字間は必ず半角スペースがあいている状態です。 具体的な例は↓の画像のような感じです。 かなり高度だと思うんですが、関数で実現できますでしょうか? よろしくお願いします。

  • VBA セル内の関数の参照先

    あるExcel2000のファイル セル A1に20 A2に30 A3に50 A4に10 A5に60 セル B1に30 と表示されています B1の中は =Average(A2:A4) となっています 私はVBAでこのB1の中のAverage関数の参照先を取得したいのですがその方法が分かりません 例えば A=Cells(1,2)や A=Range(B1) としても変数Aは当然ですが30となってしまいます EXCELの関数でセルの中にある関数や参照先を抽出出来るものがないかと探して見ましたが私には見つける事が出来ませんでした。 セルの中にある関数、もしくはその関数の参照先を抽出する方法は無いのでしょうか よろしくお願いします。

  • VBAの事で・・。

    お世話になります。 VBAの初心者なのですが、どう記述したら良いのか分からなく、 自分であれこれ考えながら記述すると、エラーばかり出でしまいます。 どなたかお教え頂きたいのですが、内容は下記になります。 下記の様なデータがあり、種類事の合計値を右下にある種類名の下 に合計結果を貼付たく、実際は何千行とあり、種類の行数も一定では ない為、オートフィルタを使い、また合計はSUBTOTALで、 出し、それをコピーして右下の同種類の下へ貼付していたのですが、 何十回もする作業なので、VBAで出来ないかと思考錯誤しており ましたが私には高度すぎて出来ませんでした。 宜しくお願い申し上げます。 種類   数量 AA   225 AA    53 AA   677 AB    43 AB   680 AC    97 AC    65 AC    23 AC    55 AC  6778 AD    34 AD   656 AD   342 AE    98 AE 45627 AE  8078 AE    28           AA   AB   AC   AD   AE      

  • エクセル関数のエラーについて

    エクセルの関数で間違っている箇所と解決策を教えて下さい。 下記【1】、【2】関数は正しく動いています。 【1】 IF(OR(AB21="err",AC21="err",AD21="err",AE21="err",AF21="err"),"err",IF(AND((OR(H21="SC",H21="CR",H21="A",H21="R",H21="CH")),(OR(AND(AE21="○",AF21="○"),AND(AD21="○",AF21="○"),AND(AC21="○",AF21="○"),AND(AB21="○",AF21="○")))),"(1)",IF(AND(OR(H21="MS",H21="AS",H21="BX"),AE21="×",AF21="○"),"(2)",IF(AND((OR(H21="MS",H21="AS",H21="BX")),(OR(AND(AD21="×",AE21="○",AF21="○"),AND(AD21="×",AE21="-",AF21="○")))),"(3)",IF(AND((OR(H21="MS",H21="AS",H21="BX")),(OR(AND(AD21="○",AE21="○",AF21="○"),AND(AD21="○",AE21="-",AF21="○"),AND(AD21="-",AE21="○",AF21="○"),AND(AD21="-",AE21="-",AF21="○")))),"(4)",IF(AG16="","(5)","err")))))) 【2】 AND((OR(H21="SC",H21="CR",H21="A",H21="R",H21="CH")),(OR(AND(AE21="×",AF21="○"),AND(AD21="×",AF21="○"),AND(AC21="×",AF21="○"),AND(AB21="×",AF21="○")))) これを【1】関数の「AG16=""」箇所に【2】を入れたのが下記関数【3】ですが、これだとエラーになります。 【3】 IF(OR(AB21="err",AC21="err",AD21="err",AE21="err",AF21="err"),"err",IF(AND((OR(H21="SC",H21="CR",H21="A",H21="R",H21="CH")),(OR(AND(AE21="○",AF21="○"),AND(AD21="○",AF21="○"),AND(AC21="○",AF21="○"),AND(AB21="○",AF21="○")))),"(1)",IF(AND(OR(H21="MS",H21="AS",H21="BX"),AE21="×",AF21="○"),"(2)",IF(AND((OR(H21="MS",H21="AS",H21="BX")),(OR(AND(AD21="×",AE21="○",AF21="○"),AND(AD21="×",AE21="-",AF21="○")))),"(3)",IF(AND((OR(H21="MS",H21="AS",H21="BX")),(OR(AND(AD21="○",AE21="○",AF21="○"),AND(AD21="○",AE21="-",AF21="○"),AND(AD21="-",AE21="○",AF21="○"),AND(AD21="-",AE21="-",AF21="○")))),"(4)",IF(AND((OR(H21="SC",H21="CR",H21="A",H21="R",H21="CH")),(OR(AND(AE21="×",AF21="○"),AND(AD21="×",AF21="○"),AND(AC21="×",AF21="○"),AND(AB21="×",AF21="○")))) ,"(5)","err")))))) 原因と解決策(VBAは避けたいのですが・・・)を教えて頂けないでしょうか?

  • Excel2013>VBA>sendkeys動ず

    Excel2013のVBAを使って自動更新をしようと思っています。    A  B   C 1  あ  AA  0 2  い  AB  1 3  う  AC  0 4  え  AA  1 5  お  AA  0 上記のようにシート内にデータはあります。B列「AA」C列の「ゼロ」を更新してC列の値を「1」にしようとしたときに、ピボットテーブルを使ってみようと思いました。 ピボットテーブルにてB列の「AA」、C列の「ゼロ」を抽出表示しました。   A  B  C 1 あ  AA  0 5 お  AA  0 思っていたように1行目と5行目が抽出されました。 後はゼロを別の値(仮に「2」とします)に変更するときに、カーソルの移動がうまくいきませんでした。 Range("C1").End(xlDown).Select Do ActiveCell.Offset(0, 0) = "2" ActiveCell.Offset(-1, 0).Select If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop しかし、これではカーソルが「C4」に移動してしまいました。 ピボットテーブルでたたんでしまっても、カーソルは見えないセルに移動するようです。 そこで、下記のように変更しました。 Range("C1").End(xlDown).Select Do ActiveCell.Offset(0, 0) = "2" Application.SendKeys "{UP}" If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop これは、カーソルがまったく動かずに最初の地点にいたままでした。 そこで、次はTABで移動することにしました。 Range("C1").Select Selection.SpecialCells(xlCellTypeVisible).Select Do ActiveCell.Offset(0, 0) = "2" Application.SendKeys "{tab}" If Len(ActiveCell.Offset(0, 0)) = 0 Then Exit Do End If Loop これでもカーソルは動きませんでした。 どうにかしてsendkeysの動かし方、もしくは更新でもっとうまいやり方をご存知の方、是非教えてください。よろしくお願いいたします。

  • EXCEL VBA 比較方法

    こんばんは。 EXCEL VBAで、SUM関数で時間の合計を求めたセル(B15)と8:00 を比較して、8:00より大きければメッセージを表示するとしたいのですが、上手くいきません。また、メッセージ後「はい」の場合は、そのままElseの作業を続行。「いいえ」を押した場合は、セル(b2)を選択し、VBA画面が出てくるのを避けたいのです。 勉強途中でいろいろとお聞きし申し訳ありませんがよろしくお願い致します。 IF ~Then ~~~~ ElseIf Range("B15").Value > "8:00" Then MsgBox "8時間を越えています。" Else Range(Range("b65536").End(xlUp).Offset(0), "c22").Copy

専門家に質問してみよう