ExcelVBA シート間のコピー時に値の足し算

このQ&Aのポイント
  • Excel2003 VBAで異なるシート間でセルのコピーをしています。ある条件の時だけコピー先のセルに値を足し込みたいのですがうまくいきません。
  • コードを実行するとエラーにはならないのですが、値が足し込まれず最後のコピー値が上書きされる結果となります。
  • うまくいく方法を教えてください。
回答を見る
  • ベストアンサー

ExcelVBA シート間のコピー時に値の足し算

よろしくお願いします。 Excel2003 VBAで異なるシート間でセルのコピーをしています。 ある条件の時だけコピー先のセルに値を足し込みたいのですがうまくいきません。 以下、1部抜き出しで申し訳ありませんが問題のコードを記載します。 各配列にはコピー元シートのセル列数(C_Arr)とコピー先シートのセル行数(B_Arr)・列数(A_Arr)を指定してあります。 For y = 1 To UBound(B_Arr) For x = 1 To UBound(A_Arr) If A_Arr(x) = 22 Then Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)).PasteSpecial Paste:=xlValues, Operation:=xlAdd Application.CutCopyMode = False Else Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy _ Destination:=Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)) End If Next x Next y コードを実行するとエラーにはならないのですが、値が足し込まれず最後のコピー値が上書きされる 結果となります。 うまくいく方法を教えて下さい。

  • r_joe
  • お礼率100% (6/6)

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

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

こんにちは。 差し当たり、 > Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy この記述(2ヶ所)でのセル参照では、  Cells(y + 2, C_Arr(x - 1))  Cells(y + 2, C_Arr(x - 1) + 1) の親オブジェクト(シート)指定が漏れています。 シート[A]がアクティブな場合、または、シート[A]モジュールでの記述であった場合、 にだけ正しい参照を得られる記述ですし、 そうした特定の条件が担保されているという前提だとしても、少しおかしいです。  Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy で十分なケースだとすれば、Worksheets("A"). と敢えて書くこと の意味が読む人の理解を遠ざけてしまいます。 このような特定の条件下でないのなら、 普通の標準モジュールの記述として直訳すると、  Range(Worksheets("A").Cells(y + 2, C_Arr(x - 1)), Worksheets("A").Cells(y + 2, C_Arr(x - 1) + 1)).Copy のように書くことになります。 この場合、シート[A]へのアクセスを繰り返していて読み難いので、簡素に意訳して  Worksheets("A").Cells(y + 2, C_Arr(x - 1)).Resize(, 2).Copy のような書式で参照した方が、却ってミスが少なくなると思いますが、如何でしょう。 ただ、ここで指摘したことが問題になる場合は、結果として実行時エラーに繋がりますから、 今回ご質問の主題とは直接関わりません。 けれど、やりたいことの説明を端折って、うまく動いていないコードを部分提示するのは、 読む者にとってはパズルを解くような難題になってしまいます。 題意へのこちらの理解が至っていないようであれば、すみません。 問題解決へのステップとして、 一旦、ご提示の記述を整理してみます。 ' ' ///   For y = 1 To UBound(B_Arr)     For x = 1 To UBound(A_Arr)       Worksheets("A").Cells(y + 2, C_Arr(x - 1)).Resize(, 2).Copy       Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)).PasteSpecial _         Paste:=xlValues, _         Operation:=IIf(A_Arr(x) = 22, xlPasteSpecialOperationAdd, xlPasteSpecialOperationNone)     Next x   Next y   Application.CutCopyMode = 0 ' ' /// 細かい点で求める結果と異なる(書式をコピーする?処理後の選択範囲は重要?) 可能性がありますので、このスクリプトはそのまま使えるかは疑問ですが、 デバッグし易いようにという意図で書き換えたものです。 ご提示のコードから推察した前提として、  B_Arr(0 To yy) … シート[A]の行位置  A_Arr(0 To xx) … シート[A]の列位置  C_Arr(0 To xx) … シート[B]の列位置  何れの配列も、0 origin(最小の添え字が 0)の一次元配列、  何れの配列も、Excelシートの[行/列]を指す整数としての要件を満たす、  A_Arr(), C_Arr() は、同じサイズ(最大の添え字が共通)(?)の配列   または、C_Arr()のサイズがA_Arr()のサイズより小さいことは無い、  A_Arr()の各要素のうち、隣り合った要素は連続数ではない(差が2以上)、  コピー元のセル範囲は、単行2列、貼付け先も同様、 という条件で考えています。 注意して確認するべきポイントを挙げておきます。 1)カウンタのスタート値  > For y = 1 To  > For x = 1 To  スタート値はそれぞれ、1、です。? 2)コピー元の行位置  > y + 2  y の 2 行下 です。? 3)コピー元の列位置  > C_Arr(x - 1)  配列C_Arr() のインデックスは x - 1 です。? 4)ペースト先の行位置  > B_Arr(y - 1)  配列B_Arr() のインデックスは y - 1 です。? 5)ペースト先の列位置  > A_Arr(x - 1)  配列A_Arr() のインデックスは x - 1 です。? 6)[値貼付け/値加算貼付け]判別の比較対象  > A_Arr(x)  配列A_Arr() のインデックスは x   です。? 現物ブックの事情や作意を知らない者として、パッと見に違和感があるのは、  2)コピー元の行位置 だけが 配列とは無関係  6)判別の比較対象 だけが x 他2ヶ所では x - 1 あたりでしょうか。 勿論、配列のサイズや中身がどんなものか知らないので、  3)C_Arr(x - 1) ... 4) ... 5) ... おもむろにカウンタから1引いて C_Arr(0) を参照するのも 正しいのかどうかこちらには判りませんが、 ひとつ前の数値を見る、という意味なのかな、と思っています。 他に、  B_Arr(),A_Arr()に重複した貼付け先を参照する組合わせが在るせいで  または、  A_Arr()の隣り合った要素が連続数になっているせいで(単行2列に貼付けするので)  一旦加算貼付けした部分に、重ねて(非加算)貼付けしてしまっているケース 等、 状況・条件についても確認した方が良さそうです。 > ... エラーにはならないのですが、値が足し込まれず最後のコピー値が上書きされる ... メソッド(コピー、ペースト)部分が原因ということは考え難いので、 上記のように、  カウンタの扱いや、各種参照、配列の要素(取得/設定の仕方)、について、  意図した通りに書けているか まずは確認してみて下さい。 こちらで実際にサンプルシートとサンプル配列を作ってテストした限りでは、 コードに記された命令通りに処理されることは確認できています。 > うまくいく方法を教えて下さい。 どういう結果を得られれば「うまくいった」ことになるのか、 知っているのは今の処、質問者さんだけです。 今の所の直感では、方法というより、 状況・条件と方法が噛み合っていないのかな?というのが有力と思います。 尚解決に至らない場合は、 どの場合に期待通りの結果が得られないのか、そちらでも問題の切り分けに努めて貰って 3つの配列だけでも、具体例を挙げるなど、補足してみて下さい。 以上です。

r_joe
質問者

お礼

realbeatinさま 回答ありがとうございました。 ご指摘頂いた違和感の部分 6)が原因でした。 解決に至りましたのでお礼させて頂きます。 >やりたいことの説明を端折って、うまく動いていないコードを部分提示するのは、読む者にとってはパズルを解くような難題になってしまいます。 すいませんでした。以後気をつけます。 蛇足になってしまいそうですが、以下にご指摘の部分も含めたコードを再掲します。コピー元シートの行位置は1行ずつ下がっていけば良いため配列に規定しませんでした。また、似たようなシートが何枚かあり、それぞれ行数・列数がバラバラのためこのようなコードにしました。 Private Sub シート間コピー() Dim A_Arr As Variant 'シートAの列位置 Dim B_Arr As Variant 'シートAの行位置 Dim C_Arr As Variant 'シートBの列位置 Dim x, y A_Arr = Array(2, 4, 6, 8, 10, 16, 12, 14, 18, 22, 22, 26, 29) C_Arr = Array(3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27) B_Arr = Array(4, 6, 8, 10, 12, 14, 16, 18, 20, 22, _ 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, _ 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, _ 66, 68, 68, 70, 72, 74, 78, 82, 84, 80, _ 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106) Sheets("A").Select For y = 1 To UBound(B_Arr) For x = 1 To UBound(A_Arr) If A_Arr(x) = 22 Then Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)).PasteSpecial Paste:=xlValues, Operation:=xlAdd Application.CutCopyMode = False Else Worksheets("A").Range(Cells(y + 2, C_Arr(x - 1)), Cells(y + 2, C_Arr(x - 1) + 1)).Copy _ Destination:=Worksheets("B").Cells(B_Arr(y - 1), A_Arr(x - 1)) End If Next x Next y End Sub ーーー if A_Arr(x-1) = 22 に修正したところ望み通りの結果が得られました。 ResizeプロパティやIIf関数などスマートなテクニックをご紹介頂きありがとうございました。疑問点として挙げて頂いたカウンタが1から始まる記述も必要ありませんので、そのあたりも取り入れてコードを書き直してみます。 realbeatinさま、本当に助かりました。 ありがとうございました。

関連するQ&A

  • ExcelVBAにて異なるシート間での値貼り付け

    Excel VBAの異なるシート間での値のコピーと貼り付けに関して質問をさせてください。 私はExcel2007を使って、Sheet1のセルの値をsheet2に貼り付けようとして以下のコード(1)を書きましたが、うまくいきません。動作確認のためsheet1内での値のコピペを行うコード(2)を作成し実行したところ、正常に動作しました。 コード(1)をコンパイルしたときに表示されるメッセージは、[実行時エラー'1004':アプリケーション定義またはオブジェクト定義のエラーです] です。 質問としては、 Q1:等号(=)を用いた値の貼り付けは、異なるシート間に対応していないのでしょうか。 Q2:コード(1)を改良する場合、どのように書き直せばよいでしょうか。 アドバイスいただけましたら幸いです。 コード(1) Worksheets("Sheet2").Range(Cells(1, 10), Cells(5, 10)).Value = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Value コード(2) Worksheets("Sheet1").Range(Cells(1, 10), Cells(5, 10)).Value = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Value

  • エクセル2000のマクロにおける、複数シート間のコピー&ペーストについて

    閲覧ありがとうございます。 現在、エクセル2000(OS、WIN2KPRO)を用いて、以下のような仕様のマクロを組もうとしています。 1.Sheet1のCommandButton1から実行する。 2.Sheet2のA1セルから、O?セルまでのデータの入っているセルをコピーし、Sheet1のB4セル以下にペーストする。 3.O?セルの?は1000以下の値で変化する。 4.Sheet2のF列には、ユニークキーが入力される為、必ず値が入力されている。 上記の仕様に従い、以下のようなマクロを組みましたが、 > Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Select のラインでエラーが発生します。 激しく独学の為、汚いソースですみません^^; **************************************** Private Sub CommandButton1_Click() Worksheets("Sheet2").Select Worksheets("Sheet2").Activate Dim Line_Num Line_Num = 1000 - WorksheetFunction.CountBlank(Range("F1:F1000")) Worksheets("Sheet2").Range("A1").Select Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Select Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Copy Worksheets("Sheet1").Select Worksheets("Sheet1").Activate Range("B4").Select ActiveSheet.Paste End Sub

  • 決まったシートだけコピーして一つのシートにまとめる

    お世話になります。 http://okwave.jp/qa/q8216220.html で質問させていただいたVBAをこねくり回してみたのですが、「インデックスが有効範囲にありません」というエラーがでて進まなくなってしまいました。 Sub 特定のシートだけコピーと貼り付け() Dim k As Long, endRow As Long, wS As Worksheet Dim P As Variant P = Array("全", , "A", "B", "C", "D", "E", "F", "G", "H", "I") '↑コピーしたいシート名一覧 Set wS = Worksheets("まとめ") endRow = wS.cells(Rows.Count, "B").End(xlUp).Row If endRow > 4 Then Range(wS.cells(5, "B"), wS.cells(endRow, "M")).ClearContents End If For k = LBound(P) To UBound(P) ☆If Worksheets(k).Name <> "まとめ" Then 'ワークシート名が"まとめ"のとき endRow = Worksheets(P).cells(Rows.Count, "B").End(xlUp).Row 'P=Arrayで指定しているシートのセルで If endRow > 4 Then '4行目より下を Range(Worksheets(P).cells(5, "B"), Worksheets(P).cells(endRow, "M")).Copy _ wS.cells(Rows.Count, "B").End(xlUp).Offset(1) 'B5からM列の任意のデータが入っているセルまでコピーして"まとめ"シートに貼り付け End If '繰り返す End If '繰り返す Next k '次のシートへ End Sub 自分で分かるようにコメントを付けています。 ☆のついているところで、「インデックスが有効範囲にありません」と出ます。 指定したシートに"まとめ"を追加してみてもやはり同じでした。 調べたところ、「インデックスが~」というのはVBA中の範囲にないものを指定しているからだ、ということなのですが・・・。 お知恵を貸して下さい。よろしくお願いします。

  • シート間のコピー時の列幅と行の高さ

    マクロ初心者です。下記はシート間のコピーですが、列幅と行の高さも一緒にコピーするにはどのように書いたらよいでしょうか。マクロは"sheet1"に入っています。よろしくお願いいたします。 Sub macro1() Worksheets("sheet2").Activate Cells.Clear Worksheets("sheet1").Activate Worksheets("sheet1").UsedRange.Copy ActiveSheet.Paste Destination:=Worksheets("sheet2").Range("A1") End Sub

  • 【VBA】シートのコピー ~ 値に直す

    大変お世話になります。 VBAのコードについてご教示いただけませんでしょうか。 ■やりたいこと -------------------------------------------------------------------------------- (1) 【原紙】Sheetを、同ブック内の新規シートへコピー (2) 新規シートのシート名を、[セル:B5]の値に変更 (3) 新規シートにコピーされてきた数式を値に変更 ■作成してみたコード -------------------------------------------------------------------------------- Sub SheetCopy1() Worksheets("【原紙】Sheet").Copy Before:=Worksheets("【原紙】Sheet") ActiveSheet.Name = Range("B5").Value Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub -------------------------------------------------------------------------------- 本日初めてVBAに触れた者が、見よう見まねで『■やりたいこと』を並べたコードのため、やはりエラーになってしまいます。 上記は、どこをどう直せばよろしいでしょうか。 もしくは、そもそも間違っておりますでしょうか。 ご教示いただきたく、何卒よろしくお願いいたします。 ◎もし可能でしたら、併せてご教示ください◎ ---------------------------------------------------------------------------- (1)の動作をさせるために、【原紙】Sheetの任意の場所に”ボタン”を設置するのですが、新規シートにもコピーされるため、そのコピー側のボタンを削除できたら…とも考えていますが、そういう動作も可能でしょうか。

  • VBAでの結合セルのコピー&ペースト

    こんにちは。 EXCELのVBAでマクロを作成しています。 セルの値のコピー&ペーストを行おうとしているのですが、結合されているセルのペーストのときに、「同じ結合セルが必要です」とエラーになってしまいます。 例えば、A1とA2が結合されたセル+A3をコピー Worksheets(x).Activate Range("A1:A3").Selection Range("A1:A3").Copy 別のシートで、B1とB2が結合されたセル+B3にペースト Worksheets(y).Activate Range("B1:B3").Paste セルの結合を解除すればうまくいきます・・・ セルを結合したままペーストしたいのですが、どうやら間違っているようです(ノ_・。) どなたか教えてください。 よろしくお願いします。

  • ExcelVBAの転記(1つのひな形へ複数シート)

    お世話になります。ExcelVBAを少し学んだ程度の者です。 1つのExcelファイルに複数存在する個別のシートから、1つのひな形シートへ転記する方法に頭を悩ませております。イメージとしては名簿管理のようなものとご理解してください。 複数存在するシート(約200シート)には、項目名に対するデータ(例えば、名前や住所などが定められたセルに入力されています)が揃っておりますが、書式の変更によりひな形のシートへ転記する必要があります。 200ほどのシートには、M10セルには名前が、B15セルには住所、C16セルには電話番号が……という具合に入力されています。これらのデータをひな形シートでは、N5セルに名前、C13セルに住所、D14セルには電話番号などを転記する必要があります(セル番地は適当です)。 ひな形シートは1枚で、マクロを実行する際にひな形シートをコピーして(Xとします)、200ほどの個別のシート(A、B、C……)を転記しようと思っております。A、B、C……に入力された複数の値は項目別にCells(i,j).Valueを、XへCells(x,y).Valueへ転記すれば良いと考えておりましたが、上手くいきません。ひな形をコピーしたXのシートへ上手く転記ができず、Aを転記したシートばかりが量産され、B、C以降のシートへ制御が移っていないようです。恐らく、Workwsheetオブジェクトのカウンタ変数に問題があると思われます。 VBAのコードとしては下記のように記述しております。 Sub SheetCopy() Application.ScreenUpdating = False Dim cnt As Long 'シート数カウント変数 Dim i As Long 'シート用のカウンタ変数 Dim wb As Workbook 'コピー元 Dim ws1 As Worksheet 'コピー元 Dim ws2 As Worksheet 'コピー先 '1がコピー元で2がコピー先 cnt = Worksheets.Count 'シート数をカウント i = 2 Set wb = Workbooks("転記用.xlsm") Set ws1 = wb.Worksheets(i) Set ws2 = wb.Worksheets("ひな形") For i = 1 To cnt ws2.Copy after:=Worksheets(i) Set ws2 = wb.Worksheets(i) ws2.Cells(2, 2).Value = ws1.Cells(2, 13).Value '名前 ws2.Cells(3, 2).Value = ws1.Cells(6, 10).Value '住所 以下、同様の転記処理を記述しています。 Next i End Sub 上記のコードを、パッと見たところ、コピーはしているものの、転記先がコピー元になっているのも原因だと思います(コピー先へ転記する方法が現時点でわかりかねます……ここがネックだと考えております)。 ご知見のある方々から、アドバイスをいただけると幸いです。 どうぞ、よろしくお願い申し上げます。

  • EXCEL VBA コピーしたシートへ値をコピペ

    選択対象シート数は4つで、シート名は、「101」「102」「103」「104」とします。 シート名「表紙」のA列のセルはA10:101 A11:102 A12:103 A13:104となっており、 使用者はとなりのB10~B14セルに「○」「×」を入力規則から選択します。 また、シート名「表紙」のB6セルには製造番号(例:AM01-130012)を入力しておきます。 「○」となっているシートのみ選択して、下記マクロにてコピーを作成します。 コピーしたシートすべてのB2セルに製造番号を入力します。 ここまではできていて、下記のプログラムを追加したいのですが、うまくいきません。 さらに、○を付けたのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、 使用者が文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。 文字列があれば、○を付けてコピーした対応するシートの中のH3~P3セルへ貼り付けたいのです。 D10、D11、D12、D13セルが空白のときは何も処理は行わないとします。 たとえば、下記のようにB12セルが○で、D12セルに文字列があれば、 D12~L12セルの値を、コピーで作成したシート103の中のH3~P3セルへ貼り付けたいのです。 B11セルも○ですが、D11セルに文字列がないのでシートのコピーだけ行います。 アドバイスいただけると助かります。 VBA初心者で申し訳ございませんが、よろしくお願いいたします。 <表紙のシート>    A     B     C    D     E     F    G    H     I     J     K      L 5 6    AM01-130012 7 8 9  10 101    × 11 102    ○ 12 103    ○       A1-1  A1-2  A1-3  A1-4  A1-5  A1-6  A1-7  A1-8   A1-9 13 104    × <プログラム> Sub TestSample() If Application.CountIf(Worksheets("表紙").Range("B10:B17"), "*○*") = 0 Then MsgBox "部品番号が選択されていません。" Exit Sub End If Dim 製造番号 As String 製造番号 = Range("B6").Value Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate On Error GoTo ErrOut_ For Each c In Worksheets("表紙").Range("B10:B13") If c.Value Like "○*" Then Worksheets(c.Offset(, -1).Text).Select flg flg = False End If Next c If Not flg Then ActiveWindow.SelectedSheets.Copy ' コピーしたすべてのシートに製造番号を書き込む For Each 各シート In Worksheets With 各シート .Activate Cells(1, 2) = 製造番号 End With Next Exit Sub ErrOut_: MsgBox """表紙""シートに記載されたシート名" & c.Offset(, -1).Text & "は存在しません。, vbInformation" End Sub

  • AファイルからBファイルへ1回でコピーする方法

    exce2010 AのファイルからBのファイルへコピーをします。 Aのファイルのsheet1 C2からN2までのセルをBファイルで、 Xという名前をC列で参照して、当てはまるセルへコピーします また、 O2からR2までのセルをBファイルで、 Yいう名前をC列で参照して、当てはまるセルへコピーします 下記のマクロでことたりているのですが、 Aのファイルのシートは1行にデータが登録されているのに対し、 Bのファイルは、シート2行にデータが登録されています。 下記イメージです Aファイル A B C D E F G H I J K L M N O P Q R     あ い う え お か き く け こ さ し す せ そ た Bファイルのコピー前(C列のどこかにX、Yが登録されている) A B C D E F G H I J K L M N     Y     X  XとYの行位置は変わる可能性あるのでC列を参照してコピーする コピー後 Bファイル A B C D E F G H I J K L M N O     Y す せ そ た     X あ い う え お か き く け こ さ し  という配置になるのです。 Aファイルの所定セルをコピー、Bのファイルを開いてセーブして閉じる 再度 Aファイルの所定セルをコピー、Bのファイルを開いてセーブして閉じる としてるのですが、これを、Bのファイルを2回開くのではなく、 1回だけ開いて所定の配置にコピーできないでしょうか? 下記がマクロ抜粋です(kはシート名称になります。セルの値で、日付を指定しています) 'コピー先のシートを開く Workbooks("A.xlsm").Worksheets("Sheet1").Activate Calculate Range(Cells(2, 3), Cells(2, 14)).Copy ' '集計用のファイルを開く Workbooks.Open "\\B.xls" 'シート指定 Worksheets(k).Activate 'コピー貼り付け。Xの配置行が変更されても大丈夫な対応 Range("C1:C200").Find("X").Select Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False On Error Resume Next ActiveWorkbook.Save If Err.Number > 0 Then MsgBox "保存されませんでした" ActiveWorkbook.Close 'コピー先のシートを開く Workbooks("A.xlsm").Worksheets("Sheet1").Activate Range(Cells(2, 15), Cells(2, 18)).Copy '集計用のファイルを開く Workbooks.Open "\\B.xls" 'シート指定 Worksheets(k).Activate 'コピー貼り付け。Yの配置行が変更されても大丈夫な対応 Range("C1:C200").Find("Y").Select Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False On Error Resume Next ActiveWorkbook.Save If Err.Number > 0 Then MsgBox "保存されませんでした" ActiveWorkbook.Close

  • Excelマクロについて(セルのコピー)

    今、マクロで自動的にセルのデータを別シートに貼り付けるというものを作っています。 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub これで、sheet1のA2からsheet2のA1にコピーできるのですが、 Private Sub コピー定義() Worksheets("sheet1").Activate 'sheet1をアクティブにする コピー元行 = 2 コピー先行 = 1 コピー元行 = 2 コピー先行 = 1 コピー元セル = "A" & コピー元行 コピー先セル = "A" & コピー先行 コピー元セル = "B" & コピー元行 コピー先セル = "B" & コピー先行 Worksheets("sheet1").Range(コピー元セル).Copy _ Destination:=Worksheets("sheet2").Range(コピー先セル) End Sub とすると、B2の項目しかコピーされません。複数のセルを一度にコピーするマクロの作り方をご存じの方、ご伝授下さい。