• 締切済み

VBAの簡略化について

Gattyonnの回答

  • Gattyonn
  • ベストアンサー率0% (0/0)
回答No.5

Option Explicit Sub Goose() Dim Co(0 To 10) Dim Poo As Integer Dim Boo As Integer 'データ範囲(例えばE列) Poo = 5 Co(0) = 0 For Boo = 0 To 9 Co(Boo + 1) = WorksheetFunction.CountIf(Columns(Poo), "<" & (Boo + 1)) Cells(Boo + 2, "B").Value = Co(Boo + 1) - Co(Boo) Cells(Boo + 2, "A").Value = Boo & "~" & Boo & ".999" Next Cells(12, "B").Value = WorksheetFunction.CountIf(Columns(Poo), ">=10") Cells(12, "A").Value = "10~" MsgBox ("Gattyonn!!") End Sub

関連するQ&A

  • エクセル VBA もっときれいな書き方?

    Sub test() Dim i As Integer, n As Integer n = 1 For i = 2 To 150 If Cells(i, 1) <> Cells(i - 1, 1) Then Cells(i - 1, 5) = i - n Cells(i - 1, 6) = Application.WorksheetFunction.Sum(Range("B" & n & ":" & "B" & i - 1)) n = i End If Next i End Sub 上記のマクロですが Application.WorksheetFunction.Sum(Range("B" & n & ":" & "B" & i - 1)) この部分、もっとスマートに書く方法を教えてください。 Range("B" & n & ":" & "B" & i - 1)って、ちゃんと動きますが、書き方が何か変なような気がするんです。 よくわかってもいないのにすみません。

  • VBAで文字列のカウントがうまくいかない・・・です

    Dim cnt As Long Dim i As Long Dim lastRow As Long For i = 1 to 20 step 2 lastRow = Cells(65536, i).End(xlUP).Row cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(10, i),Cells(lastRow, i), "お世話になっております")cnt = cnt + cnt Next Excelのセルを1列ずつ飛ばして列に「お世話になっております」が含まれたら件数をカウントしています。 そのカウント数が何故かリセットされてしまいます。 カウント数を足していきたいのですが・・・考え方自体が違うのでしょうか?

  • VBAのデータ型に関する質問です。 以下のような宣言と処理をしました。

    VBAのデータ型に関する質問です。 以下のような宣言と処理をしました。 Dim 数値1 As Integer Dim 数値2 As Integer Dim 数値3 As Long 数値1=Range("b5").Value 数値2=Range("c5").Value 数値3=数値1*数値2 この式では、数値3がLongの型ではなくIntegerになってしまいオーバーフローのエラーになってしまいます。(10000×5の場合等)Long型のまま代入する方法がありましたら教えてください。よろしくお願いいたします。

  • Excel VBA TREND関数について

    VBAにて6次近似の計算をするためのプログラムを組んでいるのですが【コンパイルエラー:不正な文字です】 と言われてしまいます。 6次近似の計算式の記載方法を教えて下さい。 よろしくお願い致します。 尚、現状は以下の通りです。 ============================== Dim i As Long Dim deg As Double Cells(i, 10).Value =Application.WorksheetFunction.Trend(Range(Cells(i, 1),Cells(i + 5, 1)), Range(Cells(i, 8), Cells(i + 5, 8)))^{1,2,3,4,5,6}, deg^{1,2,3,4,5,6}, 1) ===============================

  • 条件にあてはまるデータの数をカウントするエクセルVBA

    下記のようにA列に1~3のコードがありB~E列には測定値があります。 B列以降の測定値のカウント(+3の個数、+2の個数…)を列ごとにVBAでカウントしてます。 A列に関係なくカウントするコードは記述して実行できましたが A列の条件が1の時だけカウントするVBAが良くわかりません。 シート A    B    C  ・・・E 1    -1   +1  ・・・ 1    +2   0 2     0   0 3    -3   0 1    -1   +3 101行目以降 +3    カウント数 … +2      〃 +1      〃 0       〃 -1      〃 -2      〃 -3      〃   A列に関係なくカウントするコード sub カウント() Dim 行 As Long Dim 列 As Long For 列 = 2 To 5 For 行 = 101 To 107 Cells(行, 列).Value = Application.WorksheetFunction.CountIf(Range(Cells(2, 列), Cells(100, 列)), Cells(行, 1)) Next 行 Next 列 End Sub

  • VBA ワークシート関数のエラー

    シートに数式を入れていたものを、VBAで値のみ入力しようと考えています。 そこで、.Cells(1,1) = WorksheetFunction.数式といった形のメソッドを試しています。 しかし、複雑な数式を記述するとエラーが出てしまいます。 成功 (iferrorというワークシート関数が1つ) Debug.Print WorksheetFunction.IfError(1 / .Cells(1, 5) + 1 / .Cells(1, 6) + 1 / .Cells(1, 7) - 1, "P") 失敗(ワークシート関数のifとcountifなど複数のものが数式に混入) Debug.Print WorksheetFunction.If(CountIf(Range("C17:D49"), Range("C29")) > 5, Range("C29"), Range("D29")) Countifの場所でエラーになります。このcountifを使えるようにするためには、どうすればよいのでしょうか? WorksheetFunction.if(WorksheetFunction.Countif(、、、、という書き方はダメでした。 数式が汚くてすみません。 宜しくお願いいたします。

  • EXCEL VBA VLOOKUP 範囲を変数で

    Excel VBA で VLookup()の第2引数の範囲を行と列の数値の変数で指定したいのすが どのように記述すればよいでしょうか。 以下の式がエラーにならないように具体的に直していただけないでしょうか。 よろしくお願いします。 ----------------------------------- Dim d1 As String Dim d2 As String Dim r1 As Integer Dim r2 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer d1 = "愛知" r1 = 2 r2 = 782 c1 = 3 c2 = 5 c3 = 4 d2 = VLookup(d1, Worksheets("Sheet1").Range(Cells(r1, c1), Cells(r2, c2)), c3, False)

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • VBA VLOOKUP 別のファイルを参照

    VBA VLOOKUP 別のファイルを参照 いつもこちらでお世話になっている者です。 VBAの勉強をしております。 別のファイルからVLOOKUPで値を参照したいのですが、 範囲を指定してみましたが、 「worksheetFunctionクラスのVlookupプロパティを参照できません」 とのメッセージが出てしまいます。 なお、値は空白になる行もありますので、 if関数で回避してみましたがうまくいきません。 いろいろ試しましたが、何度やってもうまくいかないので こちらに質問させていただきました。 お詳しい方、ご伝授いただければ助かります。 よろしくお願い致します。 環境はExcel2007です。 Sub sample() Dim 範囲 As Range Dim wb As Workbook, wb2 As Workbook Dim r As Integer,intRow As Integer Workbooks.Open Filename:="***.xlsm" Set wb = ThisWorkbook Set wb2 = ActiveWorkbook Set 範囲 = wb2.Sheets("PvtSht2").Range("Database3") r = wb.Sheets("sheet1").Range("A28:N28").End(xlToRight).ColumnintRow = 3 With wb.Sheets("sheet1") Do Until .Cells(intRow, 1).Value = "" .Cells(intRow, (r + 1)) = Application.WorksheetFunction.If((Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) = 0, "", Application.WorksheetFunction.VLookup(Cells(intRow, 1), 範囲, 2, False)) intRow = intRow + 1 Loop End With End sub

  • マクロでCOUNTIFを使いたい

    マクロでCOUNTIFを使いたい COUNTIFを使いたく、下記のマクロを作成しました。 【転記元】A列の値が【転記先】A列には何回出てくるのか?を転記先C列に書き出す作業を したいのですが、提示したコードだと、★のC列全てに「1」が入ってしまいます。 ところが、★★の部分を下記のように書き替えると、正常にカウントされた値が入ります。 ent.Cells(i + 1, "C").Formula = Application.WorksheetFunction.CountIf(mst.Range("A2:A100"), ent.Cells(i + 1, "A")) なぜこうなるのか?原因が知りたくて頭を悩ませております。 お解りの方がいらっしゃればどうぞご指摘ください。 宜しくお願い致します。 ------------------------------------------------------------ 【転記元のシート】  A列  10    10  20  20  50 【転記先のシート】  A列  B列  C列 ←★このC列に結果を表示させたい  10      2  20      2  50      1 ------------------------------------------------------------ Sub カウントテスト() Dim ent As Worksheet, mst As Worksheet Dim i As Integer Dim lstcel As String Dim mstrange As Range Dim sach As Variant Set ent = Workbooks("転記先").ActiveSheet Set mst = Workbooks("転記元").ActiveSheet Set mstrange = mst.Range("A2:A100") i = 1 lstcel = mst.Cells(Rows.Count, "A").End(xlUp).Row sach = ent.Cells(i + 1, "A") For i = 1 To lstcel If mst.Cells(i + 1, "A") <> "" Then '↓★★ここの部分を書き替えるときちんとカウントされる ent.Cells(i + 1, "C").Formula = Application.WorksheetFunction.CountIf(mstrange, sach) End If Next i End Sub