• 締切済み

エクセルのマクロ 型が一致しません

bunjiiの回答

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

 BLD = 0.5 ^ Mid(ActiveCell, N, 1) * 100 >ここが黄色くなり、型が違うと出てしまいます。 回答No.5で説明が不十分のようですから補完します。 Mid(ActiveCell,N,1)はアクティブセルの値の先頭からN番目の1文字を指していますので数字(文字としての数字)でなければデータの型が違うので計算できません。 アクティブセルの模擬データを提示して頂ければ更に詳しく説明できます。 例えばA1セルがアクティブで値が文字列のA123であるときはN=1のときに次の計算でエラーになります。 Mid("A123",1,1) → "A" = 0.5 ^ "A" * 100 → "A"が数字では無いのでデータの型が違うというエラー しかし、A1セルの値が123Aのときは次のようになり、エラーが起らない。 Mid("123A",1,1) → "1" = 0.5 ^ "1" * 100 → "1"は数字なので暗黙の了解事項で数値化して計算できる。 ∴ = 0.5 ^ 1 * 100 → 0.5 * 100 → 50 Mid("123A",3,1) → "3"では同様に = 0.5 ^ 3 * 100 → 0.125 * 100 → 12.5 左からN番目の文字が数字でないときに起るエラーなのでエラー処理をどうするかによって対策が異なります。 尚、While ~ Wendのループは途中で抜け難いのでDo While ~ Loopを使われた方が良いでしょう。 下記のコードはNの値がActiveCellの文字列長の範囲でDoループを繰り返し、N番目が数字以外の文字のときループから抜け出すようにしてあります。 参考になれば幸いです。 Sub 血量計算() Dim N As Integer Dim TOTAL As Single Dim BLD As Single N = 1 TOTAL = 0 BLD = 0 Do While Len(ActiveCell.Value) >= N If Asc(Mid(ActiveCell, N, 1)) < 48 Or Asc(Mid(ActiveCell, N, 1)) > 57 Then Exit Do BLD = 0.5 ^ Mid(ActiveCell, N, 1) * 100 TOTAL = TOTAL + BLD N = N + 2 Loop MsgBox TOTAL & " %" End Sub

関連するQ&A

  • VBA Excel

    分散が既知の場合の区間推定のプログラムを考えています。 次のマクロを実行するとエラーが出ます。 エラー:"1004" 引数の数の誤りがあります。 どこの行がエラーなのか分かりません。どこなのでしょうか? また、プログラムでおかしいところがあったら、教えてください。 Sub Calculate(DataRange As String, OutRange As String, a As Single) Dim RanData As Range Dim Ave As Single, n As Single, n1 As Integer, n2 As Integer Dim Std As Single, s As Single, p As Single, z As Single, aa As Single Dim b As Single, kukan As Single, Max As Single, Min As Single Set RanData = Range(DataRange) n1 = RanData.Rows.Count n2 = RanData.Columns.Count n = n1 + n2 Ave = Application.Average(RanData) Std = Application.StDev(RanData) s = Std * Std p = (1 + a) / 2 z = Application.NormInv(0, 1) b = Sqr(s / n) kukan = z * b Max = Ave + kukan Min = Ave - kukan aa = a * 100 Range(OutRange).Select Call output("信頼度", aa) Call output("標本数", n) Call output("平均", Ave) Call output("標準偏差", Std) Call output("分散", s) Call output("信頼区間", kukan) Call output("信頼上限", Max) Call output("信頼下限", Min) End Sub Private Sub output(name As String, x As Single) ActiveCell.Range("A1") = name ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.Range("A1") = x ActiveCell.Offset(1, -1).Range("A1").Select End Sub Sub Prob() UserForm1.Show End Sub

  • 型が一致しません

    下記はセルが0の時、行全体を表示しないにするようにするVBAですが、型が一致しませんとエラーになります、どこを直せばいいのですか。 Dim I As Integer Sub Macro4() For I = 4 To 76 If Cells(I, 8) = 0 Then Rows("I:I").Select Selection.EntireRow.Hidden = True End If Next I End Sub

  • マクロでの次の実行マクロへの記述

    下記のマクロを記述しました。 一つのマクロ処理を終わらせて、次のマクロ(例:test)を動かしたいのですが何処に 記述したら良いかわかりません。 教えてください。 Sub Macro1() Dim i As Integer Dim buff As String i = 2 While 1 If Range("B" & i).Value = "" Then End End If buff = Range("B" & i).Value Range("B" & i).Value = Left(buff, 7) + " " + Mid(buff, 8, 5) + " " + Right(buff, 6) i = i + 1 Wend   Call test →ここに仮に記述したのですが、testのマクロに行きません。 End Sub 以上

  • 階乗のマクロ

    階乗のマクロを作りたいのですが、全然できません。どこを変えたらいいのか教えて下さい。ちなみに今こうなっています。 ------------------------------------------------ Sub exam5() Dim intA As Integer Dim intB As Integer Dim intC As Integer intA = Application.InputBox("数値を入力してください。") intB = (intA - 1) intC = (intA) * (intB) MsgBox (intC) End Sub Function kaijou(intA As Integer, intB As Integer) As Integer kaijou = intA * intB End Function ------------------------------------------------ どうかお願いします。

  • エクセルマクロ セル内の値の抜き出しと入力の値との

    すみません、ハマっております。 下記マクロにて、A2セル内にある(例)「111-22222-5555-666-1」の中のと入力した5555とのマッチングのマクロを作っているのですが、どうしてもA2値がemptyになってしまいうまくマッチングできません。どうしたらよいでしょうか?お力お貸しください。 Private Sub CommandButton1_Click() Unload 番号入力 Dim OdrNum As String If TextBox1.Value = "" Then Exit Sub Else OdrNum = TextBox1.Value While Mid(A2, 11, 4) <> OdrNum '該当番号の欄になるまで不要行削除 If Mid(A2, 11, 4) = "" Then MsgBox "該当番号はありませんでした。" Exit Sub Else End If Rows("2:2").Select Selection.Delete Shift:=xlUp Wend MsgBox "処理終了" End If End Sub

  • エクセルのマクロについて

    下記は、A列3行の7文字目~10文字と B列5行~文字のある最後の行までの範囲の左から1文字目~4文字 に相違がある場合 MsgBox i & “行目” を出す。 というマクロなのですが、『B列5行~文字のある最後の行までの範囲』の中でも『空白のセルに関してはMsgBox不要』というふうに付加えたいのですがどのようにすればよいでしょうか。 Sub Macro1() Dim i As Long Dim sOrgText As String Dim ltotal As Long With ActiveSheet sOrgText = Mid(.Cells(3, 1), 7, 4) ltotal = .Cells(65536, 2).End(xlUp).Row For i = 5 To ltotal If Not Mid(.Cells(i, 2), 1, 4) = sOrgText Then MsgBox i & "行目" End If Next i End With End Sub

  • Excelのマクロについて

    文字列から数値だけを抽出するマクロを見つけたのですが、抽出するデータを選択してから実行しなければなりませんでした。 抽出するデータはAセル以下にしかないので、データを選択しないでも実行できるようにするにはどうしたら良いのでしょうか? 宜しくお願いします。 以下見つけたマクロです。  Sub test()  Dim mydata As String  Dim c As Range  Dim i As Integer  For Each c In Selection   mydata = ""  For i = 1 To Len(c)   If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then   mydata = mydata & Mid(c, i, 1)    End If   Next   c.Offset(0, 1) = mydata   Next  End Sub

  • エクセル マクロ 特定の文字の色を変更

    Private Sub CommandButton6_Click() MsgBox Mid(ActiveCell, InStrRev(ActiveCell, "⇒") + 1) End Sub このようなマクロがあり 選択しているセルの最後から⇒まで部分をMsgboxで表示してくれますが この文字の色を変更したい場合はどうすればいいでしょうか?

  • VBE Excelのマクロがわかりません(IF関数)

    エクセルのマクロがわかりません。教えてください 問題は5人の簿記の点数を入力し5人の合計点・最高点・最低点を表示するプログラムを作成する。というものです。 Sub test() Dim boki as integer Dim sum as integer Dim max as integer Dim min as integer For A = 1 to 5 boki = InputBoxx("簿記の点数入力") goukei = goukei + boki ?????? Next A Msgbox"5人の合計点は"&A Msgbox"5人の最高点は"&A Msgbox"5人の最低点は"&A End Sub IF関数を使って??の部分を作るようなのですが、いまいちよく分からないので教えてください。 bokiは簿記 sumは合計 maxは最高 minは最低のことを現してます。

  • エクセルマクロでEnd Subが見つからないとでる

    Excelのマクロ記述についての質問です.  以下のマクロはエクセルにない関数「IMMULT」をあらかじめ定義するためのものです.(技術計算のHPより入手し,コピーして貼り付けたものです)  これを実行すると「End Subがみつからない」と出てしまいます.End Subは記述しているのになぜでしょうか,どなたか解決策を教えて頂けませんか! Sub 関数定義() Public Function IMMULT(a As Range, b As Range) As Variant Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer Dim r As Integer, c As Integer Dim cr As Integer, cc As Integer Dim n As Integer Dim mm() As Variant r1 = a.Rows.Count r2 = b.Rows.Count c1 = a.Columns.Count c2 = b.Columns.Count If (c1 = r2) Then nn = c1 Else Exit Function End If cr = r1 cc = c2 ReDim mm(1 To cr, 1 To cc) For r = 1 To cr For c = 1 To cc mm(r, c) = 0 For n = 1 To nn mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c))) Next Next Next IMMULT = mm End Sub