過去ログ

                                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
 ───────────────────────────────────────  ■題名 : Re:シート間の切り取りの方法  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/11/24(日) 22:04  -------------------------------------------------------------------------
   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

こんな感じです。
ちょっといじりましたが、内容はほぼ同じです。
そんなに処理が遅いとは感じませんでしたが。
 ───────────────────────────────────────  ■題名 : Re:シート間の切り取りの方法  ■名前 : TK <wez@nifty.com>  ■日付 : 02/11/25(月) 10:51  -------------------------------------------------------------------------
   こんにちはTKです。

>こんな感じです。
>ちょっといじりましたが、内容はほぼ同じです。
>そんなに処理が遅いとは感じませんでしたが。

関数を使用した長い式が入っているので処理が遅かったようです。

参考にやってみましたところうまくできました。
ソースの書き方が全然違いましたね。勉強になりました。
大変ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 386