エクセルVBA ”型が一致しません”エラー

このQ&Aのポイント
  • エクセルVBAで月末の日付分の処理をしている際に、合計欄の表示で「型が一致しません」エラーが発生します。修正方法を教えてください。
  • エクセルVBAで合計欄の表示をする際に、「型が一致しません」というエラーが出ます。初心者ですので、具体的な修正方法を教えていただけませんか?
  • 月末の日付を処理するためにエクセルVBAを使用していますが、合計欄の表示で「型が一致しません」というエラーが出ます。修正方法を教えてください。
回答を見る
  • ベストアンサー

エクセルVBA ”型が一致しません”エラー

月末の日付分の処理をしており、月末の終わりに 合計欄の表示をしたいと思っております。(合計欄の表示と言っても関数の入っている枠組みだけです) Sub 練習() Dim X As Long Set S1 = Sheets("Sheet1") X = S1.Cells(3, 3).Value 'Xはday関数から求めた月末日が入っている Range("AA1:AF1").Select '合計欄の枠組みをコピー Selection.Copy Range(Cells("J", X)).Select '合計欄を表示させる箇所は列は固定J列行は変数X行 ActiveSheet.Paste End Sub 合計欄を表示させる箇所で”型が一致しません”となるのですが、どのような修正が必要でしょうか、初心者なので 出来ましたら、具体的な説明をよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • eipu
  • ベストアンサー率39% (25/64)
回答No.1

> Range(Cells("J", X)).Select '合計欄を表示させる箇所は列は固定J列行は変数X行 cells()の書式は cells(行,列) です。 ですから、 Range(Cells(X, "J")).Select とすべきでしょう。 もしくは、 Range("J" & X).select とすると良いと思われます。

merry9174
質問者

お礼

早々に解答いただきまして有り難うございます。早速、修正いたしましたら、正常に終了いたしました。助かりました。初心者なもので、Xの定義の仕方が悪いのか、Xの値がエラーを招くのかそんな事ばかりを考えていました。

関連するQ&A

  • Val関数をVBAで使うには?

    助けてください VBA初心者です Excel VBAでA列の4からj行目までの文字列(例:"12345678” 8桁固定)、k行目までの数字以外の文字列(例:AB12345678 9桁以上ある)のうち、j行目までの文字列をVal関数で数値に変換したいのですが、どうやっていいのか分かりません j+1行目からk行目までは数字以外の文字列が入っています 1セルだけの変換はできます(例:A4セルに"12345678”がある場合、Val(range("A4"))で12345678が出ます) ※仮にj=98と固定しました Sub Value_num() J = 98 'A列を値→数字に変換 Columns("A").Select 'Range("A4").Value = val(Range("A4")) これは動く Range(Cells(4, 1), Cells(J , 1)).Value = val(Range(Cells(4, 1), Cells(J, 1))) 'これが動かない End Sub

  • 連続するセルの比較をしたいのですが、(型が一致しません)のエラーが出ます。

     下記のどの部分でエラーになるのか、お教えください よろしくお願いします。  Sub CellsSamp() Sheets("sheet3").Select If Range(Cells(5, 1), Cells(5, 6)) = Range(Cells(5, 8), Cells(5, 25)).Value Then Range(Cells(6, 1), Cells(6, 6)) = Range(Cells(5, 1), Cells(5, 6)).Value End If End Sub

  • VBA 400エラー 1004エラー

    以下のVBAはセルのカット&ペーストをしたり、置換をするプログラムです。 しかし、EXCEL2003であれば通常に動作するのですが、 EXCEL2000だと400エラーや1004エラーが出てしまいます。 原因を探求するもよく分からなかったため、ご教示いただけば幸いです。 Sub 一ページ17名標準() Application.ScreenUpdating = False ActiveSheet.Unprotect Range("A1").Select Cells.Find(What:="No.2").Offset(-1, 36).Resize(3, 8).Insert Shift:=xlDown Cells.Find(What:="No.2").Offset(-1, 2).Resize(3, 1).EntireRow.Delete Rows("2:61").RowHeight = 21.75 '''行の幅 変更点 Cells.Find(What:="No.1").Offset(-1, 2).Resize(3, 1).EntireRow.Copy Range("38:38").Insert '''No2見出し挿入カ所 変更点 Range("A39").Replace What:="No.1", Replacement:="No.2" '''No1→No2置換カ所 変更点 Cells.Find(What:="No.2").Offset(-1, 36).Resize(3, 8).Delete Shift:=xlUp Cells.Find(What:="♯管理欄").Resize(3, 8).Activate ' ' '名字のエクセル関数の調整(全共通) Selection.Cut Range("AK63").Select Selection.Insert Shift:=xlDown Cells.Find(What:="♯管理欄").Resize(3, 8).Activate Selection.Cut Range("AK38:AS40").Select Selection.Insert Shift:=xlDown Range("A1").Select ActiveSheet.Protect Application.ScreenUpdating = True End Sub 宜しくお願いします。

  • エクセルVBAで平均を求める

    こんにちわ。 エクセルVBA初心者です。 質問1 VBAで平均を求めているのですが、セルに関数が入ってしまいます。 これを入らずに計算できるようにするには、どのようにすればよい でしょうか。 質問2 また、現状10000行まで計算できるようにしておりますが、本当は、 エクセルの限界まで(確か6万・・・行だったと思いますが)したい のですが、どうすればよいでしょうか。 【補足】 P、Q列に夫々、F列の5つ平均(P)、25つ平均(25)を表示させるVBEで作成しています。 ただ、P,Q列を見ていただけるとAverage関数が入っています。 できれば、これを入らないようにしたいのです。 【対象となっているコード】 ※ Module2に記載しています。 Const AVHI1 As Integer = 5 '移動平均日数1 可変にしなければ Const AVHI2 As Integer = 25 '移動平均日数2 可変にしなければ Sub 移動平均() Dim endrh As Integer '最終セル Application.ScreenUpdating = False Worksheets("date").Select 'セル表示形式 Columns("P").Select Selection.NumberFormatLocal = "0.0_ " Columns("Q").Select Selection.NumberFormatLocal = "0.0_ " Range("G1").Select '最終セル Cells(10000, 1).End(xlUp).Select endrh = ActiveCell.Row Range("A2").Select 'データチェック If endrh - AVHI2 < 4 Then MsgBox "移動平均" & AVHI2 & "日分のデータ不足で計算できません" Exit Sub End If 'AVHI1(5日)の終値平均 ------------------------------------------ avhi = AVHI1 + 1 Range(Cells(2, 16), Cells(endrh - AVHI1, 16)).Formula = _ "=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整 Range("G1").Select 'AVHI1(25日)の終値平均 ------------------------------------------ avhi = AVHI2 + 1 Range(Cells(2, 17), Cells(endrh - AVHI2, 17)).Formula = _ "=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整 Range("G1").Select Cells(1, 16) = AVHI1 & "_SMA" Cells(1, 17) = AVHI2 & "_SMA" Range("G1").Select End Sub

  • VBA「型が一致しません」とエラーが出ます

    下記記事の関連質問です。 Excel 文字列抜き出しについて https://okwave.jp/qa/q9979633.html 記事を参考に複数行にマッチするように下記のようにコードを考えましたが msplit(mRng, " ", iii)で「型が一致しません」とエラーが出ます。 なぜでしょうか? テスト用のA4セル 1 01 45124422 ミント 09/01~03/01 108 98 01/05~02/01 Option Explicit Sub test() Dim msplit As Variant Dim buf As String, i As Long, ii As Long, iii As Long, cnt As Long Dim mRng As Range For ii = 4 To Cells(Rows.Count, 1).End(xlUp).Row buf = Cells(ii, "A") For i = 1 To Len(Cells(ii, "A")) If Mid(buf, i, 1) = " " Then cnt = cnt + 1 Next For iii = 1 To cnt Set mRng = Cells(ii, "A") ’Stop Cells(iii + 1, ii) = msplit(mRng, " ", iii) Next Next Set mRng = Nothing End Sub Function msplit(ByRef mRng As Range, ByVal Spstr As String, ByVal num As Long) As Variant msplit = Split(mRng, Spstr)(num - 1) End Function

  • エクセルVBAで範囲内での位置取得(行&列)

    Sub test() Set Rng = Range("B2:E7") Rng.Cells(2, 2).Select End Sub これで、範囲Rng内では2行/2列目となるC3セルが選択されます。 では、C3セルが、範囲Rng内で何行/何列目であるかを取得するにはどのように記述すればよいのでしょうか? Rng.Cells(2, 2).Rowは、当たり前ですが、3になってしまいます。

  • excelで別シートのセルを選択(VBA)

    どなたか教えてください。 シートXのB1に行番号 シートXのB2に列番号 が記載されていたとして、 別シート(Y)の、上記で指定したセルを選択する(フォーカスを移動する方法)を教えてください。 シート(X)   A   B   C  1 行  25  2 列  2  シート(Y)   A   B   C  1 2   ::::::: 24 25   (ここ) 以下のように書いても、最後の行でエラーになってしまいます。  行番号 = Sheets("X").Cells(1, 2).Value  列番号 = Sheets("X").Cells(2, 2).Value  Sheets("Y").Select  Range(Cells(行番号, 列番号)).Select

  • ExcelのVBAで質問です。

    以下のようなシートがあります。 A列  B列  C列  D列  E列  F列  G列  H列 NO  名前  確認 日付1 日付2  確認 日付1 日付2 6行目からデータを入れる予定です。 C列には○印を入力します。 C列~E列までデータが入った行は、 F列~H列まで同じ処理をします。 (セルの背景色を変えます。) 以後同じことを列方向で繰り返します。 以下のようなVBAを組みましたが、 ○の個数を数える部分でエラーがでます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim staff As String Dim kakunin As String Dim date1 As Date Dim date2 As Date Dim i As Long Dim j As Long Dim cnt As Long '100件分ループ For i = 6 To 105 '○の数をカウント cnt = WorksheetFunction.CountIf(ActiveSheet.Range(Cells(i, 2), Cells(i, 256)), "○") 'jとは確認の列番号のこと j = 3 * cnt staff = Cells(i, 2) kakunin = Cells(i, j) date1 = Cells(i, j + 1) date2 = Cells(i, j + 2) 'スタッフ名が入力されたら If staff = "" Then Range(Cells(i, j), Cells(i, j + 50)).Interior.ColorIndex = 15 Else Cells(i, j).Interior.ColorIndex = xlNone '○が入力されたら If kakunin = "○" Then Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = xlNone Else Range(Cells(i, j + 1), Cells(i, j + 2)).Interior.ColorIndex = 15 End If If Cells(i, j + 1) <> "" And Cells(i, j + 2) <> "" Then Cells(i, j + 3).Interior.ColorIndex = xlNone End If End If Next i End Sub ご教授いただけたら、幸いです。 よろしくお願いいたします。

  • エクセルのグラフのマクロでエラーが出てしまう

    グラフのマクロで Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("個人名シート").Range(.Cells(i, 4), .Cells(i, j - 1)), PlotBy _ :=xlRows X列項目範囲 = Range(.Cells(5, 4), .Cells(5, j - 1)) ActiveChart.SeriesCollection(1).XValues = X列項目範囲 ですが、X列項目範囲が1列だけ(4と変数j-1が同じ)だと最終行で 「実行時エラー'1004'; Series クラスの XValues プロパティを設定出来ません。」と出て しまいます。どなたかご教授下さい

  • エクセルマクロで計算すると遅い

    エクセル2013です。 表に対して、いろいろな処理を行い 要求された結果になるようにマクロを作成し完成しました。 思ったように動作するのですが処理時間が長すぎます。 自分で調べて、以下の部分が処理を遅くしている原因とわかりました。 ただの計算ですが、シート内に計算式や関数は残したくなくて このようにしましたが、別の方法が浮かびません。 どのような方法が有りますでしょうか? よろしくお願いします。 表は600行、50列。 17列目から49列目までの10行目から595行目までにデータがあります。 50列目は合計値用の空欄です。8行目は項目欄です。 インプットボックスは18~48までしか入力できないようにしてあります。 17列目からインプットボックスで入力した列までの合計値を インプットボックスで指定した列のひとつ前の列に1行づつ処理して転記。 17列目からインプットボックスで指定した列の1列前までまとめて列削除 その後17列目から削除され残った最終列の1列前までの合計値を最終列に転記で 1行づつ処理です。 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 遅延合計欄列 = 選択列 - 1 'INPUT-BOXで選択した列の1列前の列番号を格納。この列に合計値を転記する為 遅延合計末列 = 選択列 - 2 'INPUT-BOXで選択した列の2列前を格納。ここまでの列を削除する為 Cells(8, 遅延合計欄列).Value = "遅延" 'INPUT-BOXで選択した列の1列前の列の8行目を「遅延」と転記しこの列に合計を転記する Cells(8, 遅延合計欄列).Font.Color = -16776961 Cells(8, 遅延合計欄列).Font.Size = 15 Range(Cells(10, 遅延合計欄列), Cells(最終行, 遅延合計欄列)).Interior.Color = 65535 For 計算行 = 10 To 最終行 '10行目から最終行まで繰り返す '17列目からINPUT-BOXで選択した列の1列前の列までの合計値を1列前の列に転記する。10行目から最終行まで Cells(計算行, 遅延合計欄列).Value = WorksheetFunction.Sum(Range(Cells(計算行, 17), Cells(計算行, 遅延合計欄列))) Next 計算行 Range(Columns(17), Columns(遅延合計末列)).Delete '17列目からINPUT-BOXで選択した列の2列前までを列削除 最終列2 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行2 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 For 合計行 = 10 To 最終行2 '10行目から最終行まで繰り返す '17列目から最終列の1列前までの合計数数を最終列に転記 Cells(合計行, 最終列2).Value = WorksheetFunction.Sum(Range(Cells(合計行, 17), Cells(合計行, 最終列2 - 1))) Next 合計行

専門家に質問してみよう