VBAの「型が一致しません」の原因がわかりません

このQ&Aのポイント
  • Excel2013でVBAを動かすと「型が一致しません」と表示され、動作が中断されます。
  • 問題箇所を特定し、エラーを解決するために「on Error Resume Next」を使えますが、改善方法を知りたいです。
  • 「型が一致しません」というエラーメッセージの原因と解決策について教えてください。
回答を見る
  • ベストアンサー

VBAの「型が一致しません」の原因がわかりません

Excel2013でVBAを動かすと「型が一致しません」と表示され、 動作が中断されます。 解決方法がわからないので、教えてください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Dim i As Long, k As Long, MaxRow As Long MaxRow = Range("H" & Rows. Count).End(xlUp).Row k = 2 For i = 2 To MaxRow If Month(Range("H" & i)) <> Month(Range("H" & i + 1)) Then  ← ここで中断する Range(Cells(i, 8), Cells(i, 10)).Copy Cells(k, 1).PasteSpecial Paste:=xlPasteValues Else Range(Cells(i, 8), Cells(i, 10)).Copy Cells(k, 1).PasteSpecial Paste:=xlPasteValues k + 1 End if ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 「on Error Resume Next 」をエラー箇所の前に追加すると 最後まで動き、正しい結果になります。 しかし、こんな解決方法でいいのか不安なので、 別の解決方法がわかれば、教えてください。 よろしくお願いします。

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

  • ベストアンサー
回答No.5

>If Month(Range("H" & i)) <> Month(Range("H" & i + 1)) Then 後ろのRangeの引数だけど 最初は、i=2 なので「"H" & i」は「"H2"」になる。 それに「+ 1」するのだけれど、「"H2" + 1」はデータの型が違うので計算できないのでは? もし"H"に(i+1)を付け足したいなら Range("H" & (i + 1)) としないとだめです。 もっと厳密に言えば、数値変数を&演算子で付け足すのはデータ型を無視した書き方なので 以下のようにしてほしい。 If Month(Range("H" & CStr(i))) <> Month(Range("H" & CStr(i + 1))) Then

mimiko12345
質問者

お礼

ありがとうございます。 Range("H" & (i + 1)) に変更したら、エラーなく動作しました。 変更はCStr関数で記述しました。

その他の回答 (4)

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

処理データに起因するエラーではないか。コードばっかり目が行ってはだめ。データが不適当ならプログラムエラーなどすぐ起きる。 実情を知られたくないため、データを質問に載せない質問者がほとんどだが、問題のデータ行なり、要約して、質問にあげて回答を求めるべきだ。 ーー 日付かどうか、日付でない、可能性が多い。IsDate関数でも直前にかまして、チェックしてはどうか。それ以前に,シートのH列のデータを見れば、日付かどうか、わかりそうなものだ。 ーー 私製テストデータ H,I,J列 2015/8/28 a b 2015/8/29 a b 2015/8/30 a b 2015/8/31 a b 2015/9/1 a b 2015/9/2 a b 2015/9/3 a b 2015/9/4 a b 2015/9/5 a b 2015/9/6 a b 2015/9/7 a b 結果 A-B,C列 2015/8/28 2015/8/29 2015/8/30 2015/8/31 a b 2015/9/1 2015/9/2 2015/9/3 2015/9/4 2015/9/5 2015/9/6 2015/9/7 a b データ最終行にa、bが出るが,質問者の掲出したコードのロジックがまずいのではないのか。(質問には目的や処理概要だは書くこと。コードをコピペで済ますのは、楽だけれど適当でない) 質問のコードの通りだと、B-C列全行a,bが出てしまうので下記に(仮定)してみた。 --- コード Sub test01() Dim i As Long, k As Long, MaxRow As Long MaxRow = Range("H" & Rows.Count).End(xlUp).Row MsgBox MaxRow k = 2 For i = 2 To MaxRow If Month(Range("H" & i)) <> Month(Range("H" & (i + 1))) Then '← ここで中断する 次の行と比較. H列は日付 MsgBox Month(Range("H" & i)) & "=" & Month(Range("H" & (i + 1))) Range(Cells(i, 8), Cells(i, 10)).Copy 'H-J列コピー Cells(k, 1).PasteSpecial Paste:=xlPasteValues 'A-C列に貼り付け Else '月が次行で変われば MsgBox Month(Range("H" & i)) & "=" & Month(Range("H" & (i + 1))) ' MsgBox Format(Range("H" & i), "yyyy/mm/dd") Cells(i, 8).Copy 'H 列だけコピー  <==これで意図通りか Cells(k, 1).PasteSpecial Paste:=xlPasteValues 'A列だけに貼り付け End If k = k + 1 Next i End Sub Next iなどを質問のコードに入れて一応動く形にして質問のこと。

mimiko12345
質問者

お礼

ありがとうございます。無事に解決しました。 Range("H" & (i + 1)) に変更したら、エラーなく動作しました。 質問の投稿に不慣れだったため、適切に質問できませんでした。 コードだけではなく、動作内容も説明に入れるべきでした。 勉強になりました。

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.3

全てのコードが記載されていないので何とも言えませんが、on Error Resume Next がこのコードでは必要な構文では無いと思いますが、本当に必要なのでしょうか? on Error Resume Next を冒頭に挿入してもエラー無く実行しました。 Range("H" & i).Valueとでもして確認下さい。特に問題になるような構文じゃないですよね。 If Month(Range("H" & i).Value) <> Month(Range("H" & i + 1).Value) Then 処理速度が遅くなるだけなのでコピーは出来るだけ使用しないほうが良いですよ。 値だけ必要なら下記コードで可能です。 Range(Cells(k, 1), Cells(k, 3)).Value = Range(Cells(i, 8), Cells(i, 10)).Value 書式を含むコピーをしたい場合は.Copy Destinationを使用すると高速化出来ます。 http://www.happy2-island.com/excelsmile/smile03/capter00507.shtml

mimiko12345
質問者

お礼

ありがとうございます。無事に解決しました。 コピー&ペーストは処理速度が遅くなるようですが、 変数を利用し、コピー&ペーストを使わない方法がわかりませんでした。 勉強になりました。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1の例で訂正です debug.Print month("平成27年9月") debug.Print month("27-9-1") ←訂正(「27-9」では「2015/09/27」として扱われます) debug.Print month("H27/9") debug.Print month("9/1") ←訂正(「9/1」のシリアル値は「42249」です) また結果は何れも2015/9/1として扱われるため、monthにより「9」が得られます。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

H列に入っている値が何か提示されてないので分かりませんが シリアル値として認識できていないかと。 たとえば日付と認識できない文字列を引数としてMonthに使うと「型が一致しません」と表記されます。 [ヘルプ引用]_________ Month(date) 引数 date は必ず指定します。引数 date には、日付を表すバリアント型 (Variant) の値、数式、文字列式、またはこれらを組み合わせた値を指定します。引数 date が有効な値を含まない場合は、Null 値を返します。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ たとえば debug.Print month("平成27年9月") debug.Print month("27-9") debug.Print month("H27/9") debug.Print month("9/2") などは2015/9/1のserial値「42248」として扱われます。 ですが以下の場合は「型が一致しません」とエラーになります。 指定された引数をシリアル値として認識できないため、Monthで月を取得できないためです。 debug.Print month("文字列") debug.Print month("へいせい27/9") 全てにエラーが出る場合でない場合、入力されたセルの値でエラーのでた際に変数「i」の値をデバック画面で確認して該当行のH列の値を確認してください。 エラー時の変数の中身は以下の方法の何れかで確認できます。 ・エラー時のデバック画面でiにカーソルを合わせると変数の内容が表示される ・VBEの表示→ローカルウィンドウを表示させる ・ループの先頭に「debug.print i」などでループごとの変数値を書出す  (最後に書出されたところがエラー時の「i」の値) ・「on error goto ラベル名」をコード冒頭に入れ、エラーラベルの箇所で「i」を書出す 該当のセルの内容が上記のようにシリアル値に変換可能な日付として認識できない値でないか確認して下さい。

mimiko12345
質問者

お礼

ありがとうございます。無事に解決しました。 変数の中身の確認方法等、勉強になりました。

関連するQ&A

  • このVBAの処理を速くしたいのですが…

    お世話になります data.xlsmとBook1-Book25.xlsxの 合計26ファイルを開いた状態で 以下のマクロを実行しています 私が使っているマシンでは 10分くらいかかるのですが この時間を短くすることは 出来ますでしょうか? Sub copy() Application.ScreenUpdating = False Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1:D1048576").copy Workbooks("data.xlsm").Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues Range("G1:K1048576").Clear Range("A1:E1048576").copy Range("G1:K1048576").PasteSpecial Paste:=xlPasteValues Range("I2").ClearContents Range("I1048576").End(xlUp).ClearContents Range("A2:D1048576").Clear Range("O1:Q1").copy Range("S1048576").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues あとは上記をBook2,Book3と変えてBook25まで同じ式を記入 End Sub

  • Excelの三つのVBAを一つにまとめる。

     初めまして、よろしくお願いします。当方全くの素人でVBAの基礎もよくわからず、ネットから拾ってきていじった三つのVBAがあります。この三つ、一つ一つは個別に機能するのですが、VBAとして正しいのかさえよく解っていません。この三つを一つにまとめて、同時に機能するようにしたいと頭を抱えています。 Sub TEST() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Range("b10:b20").Insert shift:=xlShiftToRight Range("b10:b20").Value = Range("a10:a20").Value Application.OnTime TimeValue("09:00:00"), "TEST" Application.ScreenUpdating = True Application.EnableEvents = True ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST1() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c30:c40").Copy Range("d30:d40").PasteSpecial Paste:=xlPasteValues Range("b30:b40").Copy Range("c30:c40").PasteSpecial Paste:=xlPasteValues Range("a30:a40").Copy Range("b30:b40").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("01:00:00") Application.OnTime nextTime, "TEST1" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST2() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c50:c60").Copy Range("d50:d60").PasteSpecial Paste:=xlPasteValues Range("b50:b60").Copy Range("c50:c60").PasteSpecial Paste:=xlPasteValues Range("a50:a60").Copy Range("b50:b60").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("00:10:00") Application.OnTime nextTime, "TEST2" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________  解る方、よろしくお願いします。

  • Select Case の使い方について

    エクセルのバージョンは2003です。 Worksheets("様式2")のセルをコピーしてWorkbooks("件数.xls").Worksheets("件数")のセルに数値のみを張り付ける作業を Select Caseを使って組んでいるのですが数が多くて打ち切れません。 WS2からコピーするセルは変わらずWB1へ貼り付けする場所は列がずれて行きます。 myNoは1~30までで、1の場合はC列に数値を貼り付けし、2の場合はD列に数値を貼り付けし、3の場合はE列に数値を貼り付けし・・・ といった具合に列をずらして貼り付けを行いたいのです。 よろしくお願いします。 Dim myNo As Integer Set WS2 = Worksheets("様式2") Set WB1 = Workbooks("件数.xls").Worksheets("件数") myNo = Workbooks("件数.xls").Worksheets("一覧").Range("V7").Value Select Case myNo Case Is = 1 'Worksheets("様式2")からWorkbooks("件数.xls").Worksheets("件数")へ数値のみコピー WS2.Range("T7").Copy WB1.Range("C4").PasteSpecial Paste:=xlPasteValues WS2.Range("T8").Copy WB1.Range("C7").PasteSpecial Paste:=xlPasteValues WS2.Range("T10").Copy WB1.Range("C13").PasteSpecial Paste:=xlPasteValues WS2.Range("T11").Copy WB1.Range("C16").PasteSpecial Paste:=xlPasteValues WS2.Range("T13").Copy WB1.Range("C22").PasteSpecial Paste:=xlPasteValues WS2.Range("T14").Copy WB1.Range("C25").PasteSpecial Paste:=xlPasteValues WS2.Range("T16").Copy WB1.Range("C31").PasteSpecial Paste:=xlPasteValues WS2.Range("T17").Copy WB1.Range("C34").PasteSpecial Paste:=xlPasteValues WS2.Range("T18").Copy WB1.Range("C37").PasteSpecial Paste:=xlPasteValues WS2.Range("T69").Copy WB1.Range("C5").PasteSpecial Paste:=xlPasteValues WS2.Range("T70").Copy WB1.Range("C8").PasteSpecial Paste:=xlPasteValues WS2.Range("T72").Copy WB1.Range("C14").PasteSpecial Paste:=xlPasteValues WS2.Range("T73").Copy WB1.Range("C17").PasteSpecial Paste:=xlPasteValues WS2.Range("T75").Copy WB1.Range("C23").PasteSpecial Paste:=xlPasteValues WS2.Range("T76").Copy WB1.Range("C26").PasteSpecial Paste:=xlPasteValues WS2.Range("T78").Copy WB1.Range("C32").PasteSpecial Paste:=xlPasteValues WS2.Range("T79").Copy WB1.Range("C35").PasteSpecial Paste:=xlPasteValues WS2.Range("T80").Copy WB1.Range("C38").PasteSpecial Paste:=xlPasteValues

  • VBA 類似シート名 処理

    シート名が、「一覧 (2)」、「一覧 (3)」、・・・・・「一覧 (n)」、と連続する各シートの表データを「一覧」という名前のシートにまとめたいのですが、やり方が分かりません。 For Each を使えば出来るんじゃないかと調べましたが、見付けられませんでした。 シート処理以外は、   Dim CoR As Long, PaR As Long, PaR2 As Long CoR = Worksheets(???).Cells(Rows.Count, 1).End(xlUp).Row PaR = Worksheets("一覧").Range(Rows.Count, 1).End(xlUp).Row PaR2 = CoR + PaR + 1 Worksheets(???).Range(Cells(2, 1), Cells(CoR, 12)).Copy Worksheets("一覧").Range(Cells(PaR, 1), Cells(PaR2, 12)).PasteSpecial Paste:=xlPasteValues こんな感じで作っています。 作り方、もしくは参考になるサイトがありましたら、教えていただければありがたいです。 よろしくお願いします。

  • Excel2003のVBAで教えてください

    以下のようなコードのプログラムを書いています。 使用しているシートは、"data"と"入力"という2つのシートです。 "入力"シート上で入力したデータを"data"シート上に追加していく予定です。 しかし、どうしても、"入力"シート上にペーストされてしまい"data"シート上にペーストすることができません。 Range("A" & z + 1).PasteSpecial Paste:=xlPasteValues が問題だとおもうのですが、これを Range("data!A" & z + 1).PasteSpecial Paste:=xlPasteValues と変更すると、実行時エラー1004になってしまいます。 アドバイスお願いします Private Sub CommandButton1_Click() Dim n As Integer Dim z As Long n = WorksheetFunction.CountA(Range("b9:b23")) Range("b51:f" & 51 + n - 1).Copy Set data = Worksheets("data").Range("A1") z = data.Rows.Count Sheets("data").Select Range("A" & z + 1).PasteSpecial Paste:=xlPasteValues MsgBox "登録しました" End Sub

  • excel vbaのエラー原因について

    よろしくお願いします。初心者で勉強中です。以下のコードを作成してみましたがエラーが出ます。いろいろ調べてみましたが解決策がわからないので、教えて頂ければと思います。 ・シートは31シートあります(1番左のシート名は"初期設定"、2番目は 1日、3番目は2日と・・・、順に30日まであります。) 。 ・やりたい事。 ・2番目シートの(A1からA10)までをコピーし、1番目シートのA2にはりつける。3番目シートの(A1からA10)までをコピーし、1番目シートの先ほど貼り付けたデータの1つ下の行にはりつける・・・順に30日までのデータをすべて1番目シートに貼り付けたいと思っています。 ・"初期設定シート"の1行目には文字が入っているので、データの貼り付けは2行目からにする予定です ・作ったコード Sub 練習() Dim maxrow As Long Dim i As Long maxrow = Sheets(1).Range("a1").End(xlDown).Row For i = 2 To 31 Sheets(i).Select Sheets(i).Range("A1", "A10").Select Selection.Copy Worksheets(1).cells(maxrow+1,1) Next i End Sub ・F8で1文ずつ確認すると、Selection.Copy Worksheets(1).cells(maxrow+1,1) を実行したときに、「実行時エラーがでます」。 EXCEL2000を使用しています。 よろしくお願いします。

  • エクセルVBAの修正をお願いいたします。

    下記VBAをご教授受けて何とか作りましたが、一行指定で作成したのですが、その時によりデータ数にばらつきがありますので、現状データがあるセルだけを拾ってきてデータのあるなしを、JのセルとKのセルに2種類表示するように作成したつもりですが、データがないセルにも延々と Jのセルには 1040272 Kのセルには * が表示されますのでデータが現状ないセルには何も表示されないようにしたいと思います。 自分でいろいろ調べながらしてみるのですが埒が明かない状態になっておりますので、なにとぞお助け、ご教授をお願いいたします。 わかりにくい説明で申し訳ございませんがなにとぞよろしくお願いいたします。 Range("H2").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-5],RC[-4])" Selection.AutoFill Destination:=Range("H2:H10000") Range("H2:H10000").Select Columns("H:H").Select Selection.Copy Columns("I:I").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace what:="-", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace what:="_", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Sheets("登録商品リスト").Select Columns("C:C").Select Application.CutCopyMode = False Selection.Copy Columns("E:E").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Replace what:="_", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace what:="-", Replacement:="", lookat:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("F2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=UPPER(RC[-1])" Selection.AutoFill Destination:=Range("F2:F10000") Range("F:F").Select Columns("F:F").Select Selection.Copy Columns("G:G").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet2").Select Range("J2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=COUNTIFS(登録商品リスト!C[-3],C[-1])" Selection.AutoFill Destination:=Range("J2:J1500") Range("J:J").Select Dim i As Long, endRow As Long, str As String, c As Range, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("登録商品リスト") Set wS2 = Worksheets("Sheet2") endRow = wS2.Cells(Rows.Count, "K").End(xlUp).Row Application.ScreenUpdating = False If endRow > 1 Then Range(wS2.Cells(2, "K"), wS2.Cells(endRow, "K")).ClearContents End If For i = 2 To wS2.Cells(Rows.Count, "I").End(xlUp).Row str = Left(wS2.Cells(i, "I"), 5) Set c = wS1.Range("G:G").Find(what:=str, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then wS2.Cells(i, "K") = "*" End If Next i Application.ScreenUpdating = True End Sub

  • Excel VBA 連番印刷

    昨日以下の質問をさせていただいた者です。 http://okwave.jp/qa/q8349562.html こちらで教えていただいた以下のコードに、 J2のセルに連番を振るコードを付け足したいと思い、 同じくこちらのサイトの過去の履歴にあった以下コードを参考にとやってみているのですが、 Next で指定された変数の参照が無効です。と言われてしまいます… 印刷部数の指定はいらず、sheet印刷のJ2セルに1から始まる連番を振りたいのです。 どのように修正をしたらいいのかご教示願います。 Sub Sample4() Dim i As Long, endRow1 As Long, endRow2 As Long, myArea1 As Range, myArea2 As Range Dim wS1 As Worksheet, wS2 As Worksheet, wS3 As Worksheet Set wS1 = Worksheets("DB") Set wS2 = Worksheets("印刷") Set wS3 = Worksheets("Sheet3") endRow1 = wS1.Cells(Rows.Count, "A").End(xlUp).Row Range(wS1.Cells(1, "A"), wS1.Cells(endRow1, "A")).AdvancedFilter Action:=xlFilterInPlace, unique:=True wS1.Range("A:A").Copy wS3.Range("A1") wS1.ShowAllData For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row endRow2 = wS2.Cells(Rows.Count, "B").End(xlUp).Row If endRow2 > 9 Then Range(wS2.Cells(10, "B"), wS2.Cells(endRow2, "H")).ClearContents Range(wS2.Cells(10, "J"), wS2.Cells(endRow2, "J")).ClearContents End If wS1.Range("A1").AutoFilter field:=1, Criteria1:=wS3.Cells(i, "A") wS2.Range("B6") = wS3.Cells(i, "A") Set myArea1 = Range(wS1.Cells(2, "B"), wS1.Cells(endRow1, "H")).SpecialCells(xlCellTypeVisible) Set myArea2 = Range(wS1.Cells(2, "I"), wS1.Cells(endRow1, "I")).SpecialCells(xlCellTypeVisible) myArea1.Copy wS2.Activate ActiveSheet.Range("B10").Select Selection.PasteSpecial Paste:=xlPasteValues myArea2.Copy wS2.Activate ActiveSheet.Range("J10").Select Selection.PasteSpecial Paste:=xlPasteValues endRow2 = wS2.Cells(Rows.Count, "B").End(xlUp).Row 'Range(wS2.Cells(1, "A"), wS2.Cells(endRow2, "J")).PrintOut Next i wS1.AutoFilterMode = False wS3.Cells.Clear End Sub 連番印刷のコード Sub NumberPrint() Dim idx As Integer Dim res  res = Application.InputBox("印刷部数を入力してください", Type:=1)  If res > 0 Then   For idx = 1 To res    Range("AW3").Value = idx    ActiveSheet.PrintOut   Next idx  End If End Sub

  • 複数ファイルの特定のセルをコピーして1つにまとめる

    1つのフォルダ内の複数のファイル(Sheet1のみ)から、 特定のセルをコピーして、1つのファイルにまとめたいと 思っています。 変数  wkb 複数のファイル  myb 自分のファイル (1) wkb.Sheets("Sheet1").Range("A1:D5").Copy myb.Sheets("統合").Cells(i, "A").PasteSpecial Paste:=xlPasteValues このように書いた場合、うまくいくのですが (2) wkb.Sheets("Sheet1").Range(Cells(1, 1), Cells(5, 5)).Copy myb.Sheets("統合").Cells(i, "A").PasteSpecial Paste:=xlPasteValues このように書くと、1004でエラーとなります。 本来は、Sheet1の1行目から5行目までの中で、値がある行まで コピーしたいので、(つまり1~3行目のときもあれば、1行目だけの ときもある。)(2)の方法で実行したいのです。 なんとかいい方法はないでしょうか?

  • 簡単マクロ編集

    Sheets("Sheet1").Select  ←Range("A3:H8") Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet4").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 下方にこの操作を繰り返ししたいのですが Dim i As Long Worksheets("Sheet1").Select For i = 3 To 100 Step 6 If Cells(i, "A") = "" Then Exit Sub End If Cells(i, "A").Resize(6, 8).Copy Destination:=Worksheets("Sheet2").Range("A3:H8") Next i 貼付けは値で貼り付けたいと思います。 どう組み合わせればよいですか?

専門家に質問してみよう