Page 386 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼シート間の切り取りの方法 TK 02/11/22(金) 21:55 ┗Re:シート間の切り取りの方法 りん 02/11/24(日) 22:04 ┗Re:シート間の切り取りの方法 TK 02/11/25(月) 10:51 ─────────────────────────────────────── ■題名 : シート間の切り取りの方法 ■名前 : TK <wez@nifty.com> ■日付 : 02/11/22(金) 21:55 -------------------------------------------------------------------------
はじめまして。VBAを初めていじってみました。 同じようなデータが各シートに並んでいるような時に、 シート間でデータ切り取りをすると、当たり前かもしれ ませんが、絶対参照しているセルは「sheet1!$A$1」みたいに シート名まで引き継いでしまいます。これがコピーだとシート名は引き継ぎません。 私がどうしたいのかというと、切り取りの場合でもシート名を 引き継がないようにしたいのです。これらデータはそれぞれ重複 することは避けたいので切り取りで処理したいと考えています。 それで、VBAソースを暗中模索で1つ作ってみました。 このソースはMacroというシートを作って、そこに一旦コピーします。 それから別マクロで挿入と元データの削除を行います。 これをボタンに割り当ててツータッチでできるようにしています。 このソースはあまりスマートではありませんので、実行に時間がかかりますし 1行づつにしか対応していません。複数行対応やソースの書き方等 どうぞ指摘して頂けませんか? よろしくお願いします。 ---------------------------------------------------------------- Sub LineCut() Dim CopyRowNumber As Integer Dim CopySheetName As String Dim MacroSheetName As String MacroSheetName = "Macro" 'マクロの保存してあるシート名 CopyRowNumber = 0 CopySheetName = ActiveSheet.Name CopyRowNumber = ActiveCell.Row ActiveCell.EntireRow.Copy Worksheets(MacroSheetName).Select Worksheets(MacroSheetName).Paste (Rows(5).EntireRow) Worksheets(MacroSheetName).Cells(3, 2).Value = CopySheetName Worksheets(MacroSheetName).Cells(3, 3).Value = CopyRowNumber Worksheets(CopySheetName).Select End Sub Sub LineInsert() Dim InsertRowNumber As Integer Dim InsertSheetName As String Dim MacroSheetName As String Dim MacroCopyRow As Integer Dim DeleteRowNumber As Integer Dim DeleteLineSheetName As String MacroCopyRow = 5 'マクロシートコピー行の番号 MacroSheetName = "Macro" 'マクロの保存してあるシート名 DeleteRowNumber = Worksheets(MacroSheetName).Cells(3, 3) 'コピー元の行番号記述セル DeleteLineSheetName = Worksheets(MacroSheetName).Cells(3, 2) 'コピー元のシート名記述セル InsertSheetName = ActiveSheet.Name InsertRowNumber = ActiveCell.Row Worksheets(DeleteLineSheetName).Rows(DeleteRowNumber).EntireRow.Delete Worksheets(MacroSheetName).Rows(MacroCopyRow).EntireRow.Copy Worksheets(InsertSheetName).Rows(InsertRowNumber).EntireRow.Insert End Sub |
TK さん、こんばんわ。 > 私がどうしたいのかというと、切り取りの場合でもシート名を >引き継がないようにしたいのです。これらデータはそれぞれ重複 >することは避けたいので切り取りで処理したいと考えています。 >それで、VBAソースを暗中模索で1つ作ってみました。 選択範囲を行単位でMacroシートの5行目にペーストします。 Sub LineCut() Dim wsM As Worksheet ' Set wsM = Worksheets("Macro") 'マクロの保存してあるシート名 '複数行対応 With Selection With .EntireRow 'CopyしてClearでCutと同じ動き .Copy Destination:=wsM.Rows(5) .Clear wsM.Cells(3, 3).Value = "Row: " & .Address(False, False) End With wsM.Cells(3, 2).Value = .Parent.Name End With ' Set wsM = Nothing End Sub こんな感じです。 ちょっといじりましたが、内容はほぼ同じです。 そんなに処理が遅いとは感じませんでしたが。 |
こんにちはTKです。 >こんな感じです。 >ちょっといじりましたが、内容はほぼ同じです。 >そんなに処理が遅いとは感じませんでしたが。 関数を使用した長い式が入っているので処理が遅かったようです。 参考にやってみましたところうまくできました。 ソースの書き方が全然違いましたね。勉強になりました。 大変ありがとうございました。 |