解決済み

セルの値に応じてシート間をデータ移動させたい

  • 困ってます
  • 質問No.9590217
  • 閲覧数87
  • ありがとう数6
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 52% (33/63)

シート名が
「1」
「2」
「3」
「4」
「5」
という5つのシートがあります。

A2とA4にデータが入力されていて、
D4とI4に入力した値(シート名)に応じて、
マクロでシート間をデータ移動させたいのですが、
どなたかおわかりの方がいらっしゃいましたら教えて下さい。

(移動先にデータが存在する場合は上書きして問題ありません)

例)
D4に「1」 I4に「3」と入力して実行すると、
シート「1」からシート「3」にA2とA4の値が移動するマクロを作成したい。

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

  • 回答No.5

ベストアンサー率 48% (187/388)

Excel(エクセル) カテゴリマスター
すみません、移動でしたね。
  Sheets(InpSheet).[A2,A4].ClearContents

  Exit Sub
の上に入れて下さい。
質問はよく読むべきですね。
お礼コメント
rabbit78

お礼率 52% (33/63)

幾度もの補足にも迅速にお答えいただき恐縮です。
これで作業にかかる時間が大幅に短縮できます。
あらためましてありがとうございました。
投稿日時 - 2019-02-24 05:13:02

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 48% (187/388)

Excel(エクセル) カテゴリマスター
#1です。
すみません。
シートが「1」「2」「3」「4」「5」だけで、他のシートはないという設計をしてしまいました。
そんな訳ありませんよね。実際は画像のようなコントロールシートを別に設けますよね。
で、改造版です。
'
Option Explicit
'
Sub Macro1()
'
  Dim InpSheet As String
  Dim OutSheet As String
'
  InpSheet = [D4]
  OutSheet = [I4]
  On Error GoTo 100
  Sheets(OutSheet).[A2] = Sheets(InpSheet).[A2]
  Sheets(OutSheet).[A4] = Sheets(InpSheet).[A4]
  On Error GoTo 0
  Exit Sub
100 '
  If Err = 9 Then
    MsgBox "指定シートがありません", vbCritical
  Else
    Error Err
  End If
End Sub
補足コメント
rabbit78

お礼率 52% (33/63)

改造版ありがとうございます。
説明が稚拙で申し訳ありません。

データは移動したのですが、
移動元から移動先へコピーされていて、
移動元のデータが削除(クリア)されていないのです。

(「移動」という表現が良くなかったのかと思います)

移動元のデータを削除(クリア)する方法につきまして、
併せてご教授いただければ幸いです。
投稿日時 - 2019-02-23 22:17:05
  • 回答No.3

ベストアンサー率 28% (4468/15891)

Excel(エクセル) カテゴリマスター
・>A2とA4にデータが入力され
シートを明記してないのがわかりにくい。
・「移動」なんていう画像が見えるが、ボタンでも設けて、
クリックしたら、質問のことを実現したいのか。ー->そう解釈した。
質問者のレベルではそこまでしない方がよいと思うが。
・シート名を「1」・・と言っているが、
ー>シート名は「文字列」で指定しないとダメ、というのは知っているのかな。
こういうのは、イーと名に普通避けるのでは。
そこで、「1」「3」は全角数字の1、3とした。
ここが本件を難しくしていると思う。
ーー
シート1に図形の四角を設けて、そのクリックイベントにマクロを登録した。
ーー
Sub 正方形長方形1_Click()
test01
End Sub
ーー
test01 は、具体的には、標準モジュールに
Sub test01()
Dim s1 As String
Dim s2 As String
s1 = StrConv(Worksheets(1).Range("D4"), vbWide)
MsgBox s1
s2 = StrConv(Worksheets(1).Range("I4"), vbWide)
MsgBox s2
MsgBox Worksheets(s1).Range("A2")
MsgBox Worksheets(s1).Range("A4")
Worksheets(s2).Range("A2") = Worksheets(s1).Range("A2")
Worksheets(s2).Range("A4") = Worksheets(s1).Range("A4")
End Sub
MsgBoxの行は、テスト確認用なので、本番では省くこと。
ーーー
シート「1」のデータ例のイメージ
123<-A2この辺に「ボタンを貼り付け」

345<-A41<-D43<-I4
シート「3」のイメージは省略
勘違いしているようなら、すみません、無視して。
==
本件は、Excel関数でもできるのでは。
  • 回答No.2

ベストアンサー率 50% (234/468)

Excel(エクセル) カテゴリマスター
あくまでサンプルですのでエラー処理は入れていません
Sub sample()
  Sheets(Range("D4")).Range("A2").Cut Sheets(Range("I4")).Range("A2")
  Sheets(Range("D4")).Range("A4").Cut Sheets(Range("I4")).Range("A4")
End Sub
  • 回答No.1

ベストアンサー率 48% (187/388)

Excel(エクセル) カテゴリマスター
シート名を入れた後、ボタンを押すという設計です。
'
Sub Macro1()
'
  On Error GoTo 100
  Sheets([I4]).[A2] = Sheets([D4]).[A2]
  Sheets([I4]).[A4] = Sheets([D4]).[A4]
  On Error GoTo 0
  Exit Sub
100 '
  If Err = 9 Then
    MsgBox "指定シートがありません", vbCritical
  Else
    Error Err
  End If
End Sub
補足コメント
rabbit78

お礼率 52% (33/63)

早速のご回答ありがとうございます。

試してみたのですが、データが移動せず、
指定シートがありませんの表示が出ます。
指定セルやシート名を変更してみても同じでした。

もう少し検証してみたいと思うのですが、
次は明日の夜か明後日の朝になりそうです。
投稿日時 - 2019-02-22 06:50:58
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ