過去ログ

                                Page     653
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼特定セルを含む行の、シート間コピー  お助けを〜 03/1/30(木) 14:44
   ┗Re:特定セルを含む行の、シート間コピー  ポンタ 03/1/30(木) 16:35
      ┗Re:特定セルを含む行の、シート間コピー  お助けを〜 03/1/30(木) 21:52
         ┗Re:特定セルを含む行の、シート間コピー  ポンタ 03/1/30(木) 22:16
            ┗Re:特定セルを含む行の、シート間コピー  お助けを〜 03/1/31(金) 14:38
               ┗Re:特定セルを含む行の、シート間コピー  ポンタ 03/1/31(金) 15:52

 ───────────────────────────────────────
 ■題名 : 特定セルを含む行の、シート間コピー
 ■名前 : お助けを〜
 ■日付 : 03/1/30(木) 14:44
 -------------------------------------------------------------------------
   A列  B列  C列  D列…
X   A   XX   XXX
X   A   XX   XXX
X   A   XX   XXX
・   ・   ・    ・
・   ・   ・    ・
X   B   XX   XXX
X   B   XX   XXX
X   B   XX   XXX
・   ・   ・    ・
・   ・   ・    ・

というデータがワークシート(A)にあるとしまして…
この状態からB列の“不特定な文字(A、B)”をキーにして
別のワークシートに下記の状態を作りたいのですが…

※ワークシート(B)
A列  B列  C列  D列…
X   A   XX   XXX
X   A   XX   XXX
X   A   XX   XXX
・   ・   ・    ・
・   ・   ・    ・

※ワークシート(C)
A列  B列  C列  D列…
X   B   XX   XXX
X   B   XX   XXX
X   B   XX   XXX
・   ・   ・    ・
・   ・   ・    ・

といった感じにしたいのです。
ポイントとなるワークシート(A)の“B列の文字”は
二つ以上になる事はないのですが、
各文字のセルを含む行数は変化します。
その行数を変数として以後のマクロで使いたいとも考えています。
どうしたらいいのでしょうか?
 ───────────────────────────────────────  ■題名 : Re:特定セルを含む行の、シート間コピー  ■名前 : ポンタ  ■日付 : 03/1/30(木) 16:35  -------------------------------------------------------------------------
   こんな感じでしょうか?

Sub test()
  Dim WsB As Worksheet, WsC As Worksheet
  Dim i As Long
  Set WsB = Worksheets("B")
  Set WsC = Worksheets("C")
  For i = 1 To Range("B65536").End(xlUp).Row
    Select Case Cells(i, 2).Value
    Case "A"
      Call Rows(i).Copy(WsB.Range("A65536").End(xlUp).Offset(1, 0))
    Case "B"
      Call Rows(i).Copy(WsC.Range("A65536").End(xlUp).Offset(1, 0))
    End Select
  Next
End Sub
 ───────────────────────────────────────  ■題名 : Re:特定セルを含む行の、シート間コピー  ■名前 : お助けを〜  ■日付 : 03/1/30(木) 21:52  -------------------------------------------------------------------------
   ありがとうございますっ!
こんなに親切な方が世の中にいるなんて…感謝感激です!(⌒▽⌒〃)

ポンタさんのご好意に甘え、早速現状のマクロに組み込もうと思ったのですが…
上司から更に難しい条件に対応させてくれとの命令が来てしまいました。(^^;

もう一度ご回答頂けたらと思い、返信させて頂く事をお許し下さいっ!

最初に質問させて頂きました内容にあります…
※ワークシート(A)
A列  B列  C列  D列…
X   A   XX   XXX
X   A   XX   XXX
X   A   XX   XXX
・   ・   ・    ・
・   ・   ・    ・
X   B   XX   XXX
X   B   XX   XXX
X   B   XX   XXX
・   ・   ・    ・
・   ・   ・    ・
これを“ワークブック1”のワークシート(A)としまして、
今度は別の“ワークブック2”内にある
ワークシート(B)、ワークシート(C)に展開したいのです。

しかも、キーとなるB列(ワークシートA)の文字は…
“AとB”であったり、“BとC”であったり…
“DとZ”であったりします。
一つのセルに“一文字の文字列である事”と、
B列に“2種類である事”に変化はありません。

コピー先となるワークブック内のワークシートB、Cは
二つとも特定の物にしようと考えていますが…
例えばB列の文字2種が“A、B”だった場合、
コピー先のワークシート二つに、どちらを割り振るカタチになっても
問題ありません。
(ワークシートBに“AかB”どちらの物がコピーされてもOK!)

以上のような内容を最初の質問に追加したいのですが…

すばらしい回答を再度、心よりお待ちしておりますっ!(^^ゞ
 ───────────────────────────────────────  ■題名 : Re:特定セルを含む行の、シート間コピー  ■名前 : ポンタ  ■日付 : 03/1/30(木) 22:16  -------------------------------------------------------------------------
   ワークブック2.xlsというブックをすでに開いていて、
そのブックには"B"、"C"という名前のシートがあるのなら、
以下のコードで動くと思います。

"A", "C", "D"の時はシートBヘ
"B", "Z"の時はシートCへコピーします。

ワークブック1の標準モジュールに貼り付け、
対象のシートをアクティブにしてから、実行してください。

Sub test()
  Dim WsB As Worksheet, WsC As Worksheet
  Dim i As Long
  Set WsB = Workbooks("ワークブック2.xls").Worksheets("B")
  Set WsC = Workbooks("ワークブック2.xls").Worksheets("C")
  For i = 1 To Range("B65536").End(xlUp).Row
    Select Case Cells(i, 2).Value
    Case "A", "C", "D"
      Call Rows(i).Copy(WsB.Range("A65536").End(xlUp).Offset(1, 0))
    Case "B", "Z"
      Call Rows(i).Copy(WsC.Range("A65536").End(xlUp).Offset(1, 0))
    End Select
  Next
End Sub
 ───────────────────────────────────────  ■題名 : Re:特定セルを含む行の、シート間コピー  ■名前 : お助けを〜  ■日付 : 03/1/31(金) 14:38  -------------------------------------------------------------------------
   ポンタさん、ホントにありがとうございますっ!
おかげさまで、完全に思い通りの処理が出来るようになりました!

御指示頂きました構文を理解する事から…
今後も日々、努力していきたいと思う今日この頃ですっ!

とりあえず、上司からの無謀な指示に答えられてよかった〜(笑)

ついでと言っては大変あつかましいのですが、
更に便利に活用したく…ご相談させて頂きますっ!(^O^;

ワークブックを開くのと同時に、メニューバーにそのブックのみで使いたい
追加メニュー(及びメニューアイテム)を出現させることなんてできるのでしょうか?
そのメニューアイテムより、既存のマクロを実行したいと考えております。

現状にも、ワークブックのオープン時処理を一つ組み込んでありますが…
(ThisWorkbookのWorkbook_Openプロシージャ内、開くと同時にあるディレクトリ内
のファイルを検索し、ActiveSheetにファイル名を書き出すもの)
その処理に影響が無ければ良いのですが…
これは自分が参考書を見ながら組んでみたものであるため、
あまり理解できておりません。(>_<")

追加メニューより実行したいマクロは、3つほどあります。
(標準モジュール内に3種類)
これを個別に実行したいと考えておりますが…

可能であれば、ベストアドバイスを頂ければ幸いですっ!
 ───────────────────────────────────────  ■題名 : Re:特定セルを含む行の、シート間コピー  ■名前 : ポンタ  ■日付 : 03/1/31(金) 15:52  -------------------------------------------------------------------------
   私はこんな風にしてます。

Private Sub Workbook_Activate()
  Call メニューの追加
End Sub

Private Sub Workbook_Deactivate()
  Call メニューの削除
End Sub

Sub メニューの追加()
  Dim メイン As CommandBarControl, サブ As CommandBarControl
  Dim i As Integer
  Dim メニュー(9) As String
  Call メニューの削除
  Set メイン = CommandBars("Worksheet Menu Bar").Controls.Add(msoControlPopup, , , 10, True)
  メイン.Caption = "マクロ(&M)"
  メニュー(0) = "シートの追加(&A)":    メニュー(1) = "シートの削除(&D)"
  メニュー(2) = "行の挿入(&R)":      メニュー(3) = "行の削除(&D)"
  For i = 0 To 3
    Set サブ = メイン.Controls.Add
    With サブ
      .Caption = メニュー(i)
      .OnAction = "メニュー→" & Mid(メニュー(i), 1, Len(メニュー(i)) - 4)
    End With
  Next
End Sub

Sub メニューの削除()
  Dim ctrl As CommandBarControl
  For Each ctrl In CommandBars("Worksheet Menu Bar").Controls
    If ctrl.Caption = "マクロ(&M)" Then
      ctrl.Delete
    End If
  Next
End Sub

PS.話題ががらっと変わるときは、新規に質問し直したほうが
  回答がもらいやすいですよ。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 653