• ベストアンサー

マクロ  関数式の中にRangeでセルを参照するには

imogasiの回答

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルVBAで関数を使うには (1)Range("B2").Formula ="=関数"を使う (2)WorksheetFunctionを使う (3)繰り返しのロジックを使う(関数を使うに該当しませんが) (2)は Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d Cells(2, "B") = WorksheetFunction.CountIf(Range(Cells(2, "A"), Cells(d, "A")), Cells(1, "A")) End Sub (1)は Sub test02() d = Range("A65536").End(xlUp).Row MsgBox d x = "A" & d s = "=CountIf(A2:" & x & ",A1)" MsgBox s Cells(2, "B").Formula = s End Sub なんてのも出来ます。 (3)は Sub test03() d = Range("A65536").End(xlUp).Row MsgBox d c = 0 For i = 2 To d If Cells(i, "A") = Cells(1, "A") Then c = c + 1 End If Next i Cells(2, "B") = c End Sub のようなものです。

ennkai
質問者

お礼

遅くなって申し訳ありません 様々な角度からの回答ありがとうございます 同じ結果を出すにも いろいろ方法があるのですね まだ使い分けるまでいたりませんが 地道に勉強したいです

関連するQ&A

  • エクセルで式のセルを値で貼り付ける際(マクロを組んで)

    毎回お世話になっております。 よろしくお願いします。 1行目にタイトルがありまして A2セルから下にデータが入っています (A2から隙間無く詰まっています  毎回変わりますが おおよそ数百くらい) そのA行のデータを参照している数式が M行 N行セルに 入っています。 たとえば M2=A2*3 N2=A2+9 というふうに M2 N2の式をA行のデータがある最終部分まで Cells(2, 13).Copy Range(Cells(3, 13), Cells(Cells(65536, 1).End(xlUp).Row, 13)) Cells(2, 14).Copy Range(Cells(3, 14), Cells(Cells(65536, 1).End(xlUp).Row, 14)) この式でコピーしています。 そしてMN行全体を選択して「値」で貼り付けているのですが 動作が重くなってきます。 そこでMN行のデータがある部分を選択できる マクロでの方法はありませんでしょうか? もしくは 「考える方向がおかしい」などの 御指摘ありましたら よろしくお願い致します。

  • excel 空白のセルがある行を削除するマクロ

    A列に、みかん りんご バナナ 肉 などと入力されており、 B1に=if(countif(A1,"*みかん*")+countif(A1,"*りんご*")+countif(A1,"*バナナ*"),"fruit","") という感じで、fruit か 空白 を返す関数が入力されており、オートフィルでB列に数式をコピーするマクロを実行します。 その次に、B列で空白のセルがある場合、その行を削除するというマクロを下記のように入力しましたが、削除されません。 Dim lastRow As Long Dim i As Long lastRow =Range("B"&Rows.count).End(xlup).Row For i =lastRow To 5 Step -1 If Cells(i,"B").Value="" Then Rows(i).Delete XlShiftUp End If Next i 間違いをどなたか教えてください。 ちなみに、B列が関数では無く、ただの文字列の場合("fruit")ではマクロが実行できました。 関数の値からマクロを実行することは不可能なのでしょうか? 解答、宜しくお願い致します。

  • セルにワイルドカード*を含む式を書き込むには?

    下記コードはアクティブセルの右にアクティブセルと同じ値を書き込みますが、 ワイルドカード付きの値を書き込むにはどうすれば良いのでしょうか? n列  (n+1)列 あ     あ* い     い* う     え* ______________________________ Sub test1() Dim R As Range, R1 As Range Set R = ActiveCell Set R1 = Range(R, Cells(Rows.Count, R.Column).End(xlUp)) With R1.Offset(, 1) .Formula = "=" & R.Address(0, 0) End With Set R1 = Nothing: Set R = Nothing End Sub

  • エクセルのマクロ Range("A1").End(xlDown).rowで列を削除

    A列の一番下のデータの次の行から F列の一番下のデータの行まで削除したいのですが Rows(" & Range("A1").End(xlDown).row+1 & ":" & Range("F1").End(xlDown).Row & ").Delete Shift:=xlUp でうまくいきません どうすればいいのですか?

  • マクロでセルに関数を入れようしてもエラーになる

    Excel2007 windows7 使っています。以下のマクロを実行すると、アプリケーション定義やオブジエクト定義エラーになってしまします。どうしてでしょうか。ご教示お願いします。 sub test() If Not IsNumeric(Range("F17").Formula) Then Range("f17").Formula = "=IF(OR(R2=""新規用"",R2=""継続用""),"""",IF(COUNTIF(+D10,""*改定*""),78,39))" End If end sub

  • 指定するセルのRange書き込み変更

    Sub 移動と削除() Range("A1").Select Selection.Cut Destination:=Range("E1") Range("A1").Select Selection.Delete Shift:=xlUp End Sub 自動マクロで作った上記の記録があります。これをA1固定ではなくA列の指定するセルにし E1もA列で指定したセルと同じ行のE列にしたいのですが書き換える方法をおしえてください。

  • 関数の中で参照するセル範囲(変動する)の記述方法

    セルJ5に下記の数式を入力するマクロを組みたいのですが、記述方法が分かりません。   =SUMIF(セル範囲(1),B5,セル範囲(2))  ・セル範囲(1)にはB5:C列の最終データまで  ・セル範囲(2)にはC5:C列の最終データまで 自分なりに   ActiveCell.Formula = "=SUMIF(Range(Cells(5, 2), Cells(Range("b5").End(xlDown).Row, 3)),b5,Range(Cells(5, 2), Cells(Range("C5").End(xlDown).Row, 3)))" と書いてみたのですがダメでした。 どうかご教授お願い致します。

  • 最終セルまでデータを反映させるマクロ

    あるサイトからの利用コードです。 それをアレンジしようとしましたが、つまずきました。 マクロコードをご教示ください。 あるフォルダに複数のエクセルファイルがあります。 構成が同じシート(名前は同じ。仮に "各シート")を、 別ブック(仮に "まとめ")の一つのシートに纏めます。 その時、複数ファイルの D4のデータだけは "まとめ"ブックのL列に反映させたいのですが、 下記コードを使用すると、どこにどのようなコードを入れたら良いのでしょうか? 因みに複数ファイルの8行目からコピーされ、 複数ファイルのCからM列は まとめブックのAからK列に反映されるようになってます。 (まとめブックの1行目は見出し) Dim i As Integer Dim strPath As String Dim strFileName As String Dim WB1 As Workbook Dim WS1 As Worksheet Dim WS2 As Worksheet Dim lngRowCount As Long Set WS2 = Sheets("まとめ") strPath = ThisWorkbook.Path strFileName = Dir(strPath & "\*.xls*") Do While strFileName <> "" If strFileName <> ThisWorkbook.Name Then Set WB1 = Workbooks.Open(strPath & "\" & strFileName) Set WS1 = WB1.Sheets("各シート") With WS1.Range("C7") lngRowCount = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row - .Row If lngRowCount >= 1 Then With .Resize(lngRowCount, 11).Offset(1) .Copy WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1) End With End If End With _____ここで つまずく_____    With WS1.Range("D4")     .Copy WS2.Range("L" & WS2.Rows.Count).End(xlUp).Offset(1)     WS2.Range("L" & WS2.Rows.Count).End(xlUp).AutoFill Destination = Range("E1048576").End(xlUp).Row _____ここまで つまずく_____ WB1.Close False End If strFileName = Dir Loop End Sub エクセル2013です。 宜しくお願い致します。

  • VBAで関数式を入力させて行きたい。(ループ処理)

    すみません。誰か教えて頂けませんか。 D列の3行目以下に、B列の値に2を足す関数式を記述したいと 思っています。 B列に値が入っていれば、式を入れていきたいのですが、 ループ処理で式を入れていく方法があれば、ご教授頂けませんでしょうか。 宜しくお願いします。 Last_Row = Cells(Rows.Count, 2).Row for a = 3 to Last_Row if Cells(a,2).Value <> "" then 'D列に式代入 End if Next a [D3].Formula = "=R3C2+2" [D4].Formula = "=R4C2+2" [D5].Formula = "=R5C2+2" [D6].Formula = "=R6C2+2" [D7].Formula = "=R7C2+2"

  • VBAでセルのコピーをすると、エラーになる

    =IF(COUNTIF('5月'!B4:I13,E13)=0,"",COUNTIF('5月'!I:I,E13))というセルを コピーして、別のシートのセルに貼り付けたのですが、値が「0」の場合「””」が セルに張り付いてしまい、その後の計算ができません。 「””」を本当の空欄にするにはどうしたらいいのでしょうか? Sub 転記() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim SN As String SN = Month(Now()) Set sh1 = Sheets(SN) Set sh2 = Sheets("差出票") sh1.Range("A35").End(xlUp).Offset(1) = sh2.Range("B9") sh1.Range("A35").End(xlUp).Offset(0, 1) = sh2.Range("F13") sh1.Range("A35").End(xlUp).Offset(0, 2) = sh2.Range("F14") sh1.Range("A35").End(xlUp).Offset(0, 3) = sh2.Range("F15") sh1.Range("A35").End(xlUp).Offset(0, 4) = sh2.Range("F16") sh1.Range("A35").End(xlUp).Offset(0, 5) = sh2.Range("F17") sh1.Range("A35").End(xlUp).Offset(0, 6) = sh2.Range("F18") sh1.Range("A35").End(xlUp).Offset(0, 7) = sh2.Range("F19") End Sub