Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6709 / 13644 ツリー ←次へ | 前へ→

【43523】特殊なコピーできますか? 無頼斎 06/10/18(水) 18:19 質問[未読]
【43525】Re:特殊なコピーできますか? Statis 06/10/18(水) 19:08 質問[未読]
【43563】Re:特殊なコピーできますか? 無頼斎 06/10/19(木) 11:30 発言[未読]
【43528】Re:特殊なコピーできますか? Kein 06/10/18(水) 19:26 回答[未読]
【43564】Re:特殊なコピーできますか? 無頼斎 06/10/19(木) 11:40 発言[未読]
【43569】Re:特殊なコピーできますか? Kein 06/10/19(木) 12:31 回答[未読]
【43570】Re:特殊なコピーできますか? Kein 06/10/19(木) 12:34 発言[未読]
【43594】Re:特殊なコピーできますか? 無頼斎 06/10/19(木) 16:31 発言[未読]
【43598】Re:特殊なコピーできますか? Kein 06/10/19(木) 20:58 発言[未読]
【43615】Re:特殊なコピーできますか? 無頼斎 06/10/20(金) 1:04 お礼[未読]

【43523】特殊なコピーできますか?
質問  無頼斎  - 06/10/18(水) 18:19 -

引用なし
パスワード
   よろしくお願いします。

Sheet1のX22からX列の下へ(不定)、人名と題名、そして空欄が連続(不規則に)して入力されています。このX22からのテキストデータを、Sheet2のE23から下へ空欄と題名を省いてコピーしたいのです。また、空欄に人名が後から入力されてもコピー先に反映されるようにできますか?どなたか、ご教示お願いいたします。

【43525】Re:特殊なコピーできますか?
質問  Statis  - 06/10/18(水) 19:08 -

引用なし
パスワード
   ▼無頼斎 さん:
こんにちは
>よろしくお願いします。
>
>Sheet1のX22からX列の下へ(不定)、人名と題名、そして空欄が連続(不規則に)して入力されています。このX22からのテキストデータを、Sheet2のE23から下へ空欄と題名を省いてコピーしたいのです。また、空欄に人名が後から入力されてもコピー先に反映されるようにできますか?どなたか、ご教示お願いいたします。

人名と題名の区分はどのようにしますか?
どのようなデータをどのようにコピーしたいのかレイアウトを記載して下さい。

【43528】Re:特殊なコピーできますか?
回答  Kein  - 06/10/18(水) 19:26 -

引用なし
パスワード
   "題名"と言うからには、その範囲の先頭のセルに入力されている
のでしょうね ? ということは、人名は X23 から入力されている
わけですね ? ならば・・

Sheets("Sheet1").Range("X23:X65536").SpecialCells(2) _
.Copy Sheets("Sheet2").Range("E23")

というコードで出来ます。
>空欄に人名が後から入力されてもコピー先に反映
つまりE列の最終入力行の下に、新しい人名を追加していく、
(既に転記済みなら中止)ということがしたいのなら、
Sheet1 のシートモジュールに、以下のイベントマクロを入れて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Mnm As String

  If Intersect(Target, Range("Z23:Z65536")) Is _
  Nothing Then Exit Sub
  With Target
   If .Count > 1 Then GoTo ELine
   If IsEmpty(.Value) Then Exit Sub
   If IsNumeric(.Value) Then GoTo ELine
   Mnm = .Value
  End With
  With Worksheets("Sheet2")
   If Not IsError(Application.Match(Mnm, .Range("E:E"), 0)) Then
     MsgBox "その名前は入力済みです", 48: GoTo ELine
   End If
   .Range("E65536").End(xlUp).Offset(1).Value = Mnm
  End With
  MsgBox Mnm & vbLf & "を転記しました", 64: Exit Sub
ELine:
  Application.EnableEvents = False
  Target.ClearContents
  Application.EnableEvents = True
End Sub

【43563】Re:特殊なコピーできますか?
発言  無頼斎  - 06/10/19(木) 11:30 -

引用なし
パスワード
   ▼Statis さん:
>▼無頼斎 さん:
>こんにちは
>>よろしくお願いします。
>>
>>Sheet1のX22からX列の下へ(不定)、人名と題名、そして空欄が連続(不規則に)して入力されています。このX22からのテキストデータを、Sheet2のE23から下へ空欄と題名を省いてコピーしたいのです。また、空欄に人名が後から入力されてもコピー先に反映されるようにできますか?どなたか、ご教示お願いいたします。
>
>人名と題名の区分はどのようにしますか?
>どのようなデータをどのようにコピーしたいのかレイアウトを記載して下さい。

ご返信ありがとうございます。

こんな感じです。

X23監督人
X24阿部
X25安藤
X26荒井
X27赤間
X28(空欄)

X29監督人
X30伊藤
X31井口
X32(空欄)

X33監督人
X34五十嵐
X37(空欄)

X35監督人
X35井伏
X36宇崎
X37(空欄)

Sheet1の各空欄には人名が入力される可能性とその直下セルには人名
が挿入される可能性があります。
その監督人セルと空欄セルを除いてSheet2、E23へコピーしたいのです。
またSheet1のコピー元の変更が反映されるようにできるでしょうか?

【43564】Re:特殊なコピーできますか?
発言  無頼斎  - 06/10/19(木) 11:40 -

引用なし
パスワード
   Keinさん、また、お世話になります。

▼Kein さん:
>"題名"と言うからには、その範囲の先頭のセルに入力されている
>のでしょうね ? ということは、人名は X23 から入力されている
>わけですね ? ならば・・
>

題名の件ですが、「監督人」という題名が、X23を皮切りに、X列に不規則に
入力されているのです(つまり最初は、「監督人」セルがX23,X26,X32,X45,X62でも、
途中の空欄が人名で入力されると、、「監督人」セルも下へずれていくことになります)。

こんな感じです。

X23監督人
X24阿部
X25安藤
X26荒井
X27赤間
X28(空欄)

X29監督人
X30伊藤
X31井口
X32(空欄)

X33監督人
X34五十嵐
X37(空欄)

X35監督人
X35井伏
X36宇崎
X37(空欄)

Sheet1の各空欄には人名が入力される可能性とその直下セルには人名
が挿入される可能性があります。
その監督人セルと空欄セルを除いてSheet2、E23へコピーしたいのです。
またSheet1のコピー元の変更が反映されるようにできるでしょうか?

【43569】Re:特殊なコピーできますか?
回答  Kein  - 06/10/19(木) 12:31 -

引用なし
パスワード
   まず初めに・・

Sub Data_Copy()
  With Sheets("Sheet2")
   Sheets("Sheet1").Range("X24:X65536").SpecialCells(2) _
   .Copy .Range("E23")
   With .Range("E23", .Range("E65536").End(xlUp))
     .Replace "監督人", 1
     .SpecialCells(2, 1).Delete xlShiftUp
   End With
   .Activate
  End With
End Sub

↑これを"一回だけ"実行して下さい。
Sheet2のE23以下に、人名だけが並んでコピーされているのを確認し、
Sheet1 のシートモジュールに、以下のイベントマクロを入れて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Mnm As String

  If Intersect(Target, Range("Z23:Z65536")) Is _
  Nothing Then Exit Sub
  With Target
   If .Count > 1 Then GoTo ELine
   If IsEmpty(.Value) Then Exit Sub
   If IsNumeric(.Value) Then GoTo ELine
   If .Value = "監督人" Then Exit Sub '←追加
   Mnm = .Value
  End With
  With Worksheets("Sheet2")
   If Not IsError(Application.Match(Mnm, .Range("E:E"), 0)) Then
     MsgBox "その名前は入力済みです", 48: GoTo ELine
   End If
   .Range("E65536").End(xlUp).Offset(1).Value = Mnm
  End With
  MsgBox Mnm & vbLf & "を転記しました", 64: Exit Sub
ELine:
  Application.EnableEvents = False
  Target.ClearContents
  Application.EnableEvents = True
End Sub

【43570】Re:特殊なコピーできますか?
発言  Kein  - 06/10/19(木) 12:34 -

引用なし
パスワード
   ちょっと修正。イベントマクロのコードで
>If Intersect(Target, Range("Z23:Z65536")) Is _
  Nothing Then Exit Sub


If Intersect(Target, Range("X23:X65536")) Is _
  Nothing Then Exit Sub

と、して下さい。(Z → X)

【43594】Re:特殊なコピーできますか?
発言  無頼斎  - 06/10/19(木) 16:31 -

引用なし
パスワード
   ありがとうございます。

しかしながら、貼り付け先がSheet2のE列とありましたが、

Sheet2のE列からI列までの結合セルでした。その場合はどうでしょうか?

【43598】Re:特殊なコピーできますか?
発言  Kein  - 06/10/19(木) 20:58 -

引用なし
パスワード
   セル結合はマクロとの相性がとても悪く、安定した処理ができないと
考えて下さい。"見た目"の体裁のために結合しているなら、解除する
ことをお勧めします。
解除できない場合は、こちらも適切な回答はできません。

【43615】Re:特殊なコピーできますか?
お礼  無頼斎  - 06/10/20(金) 1:04 -

引用なし
パスワード
   ▼Kein さん:
>セル結合はマクロとの相性がとても悪く、安定した処理ができないと
>考えて下さい。"見た目"の体裁のために結合しているなら、解除する
>ことをお勧めします。
>解除できない場合は、こちらも適切な回答はできません。


できました。ありがとうございました。

セル結合解除いたします。

すこし、まだ教えていただきたいことがあるのですが。。。

6709 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free