Excel VBA質問箱 IV

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

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


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

【32286】検索して別シート挿入後コピー貼り付け eki 05/12/12(月) 10:43 質問[未読]
【32288】Re:検索して別シート挿入後コピー貼り付け Statis 05/12/12(月) 11:18 発言[未読]
【32290】Re:検索して別シート挿入後コピー貼り付け eki 05/12/12(月) 11:24 質問[未読]
【32293】Re:検索して別シート挿入後コピー貼り付け Statis 05/12/12(月) 12:00 回答[未読]
【32311】Re:検索して別シート挿入後コピー貼り付け eki 05/12/12(月) 17:15 お礼[未読]
【32346】Re:検索して別シート挿入後コピー貼り付け Statis 05/12/13(火) 8:45 回答[未読]
【32368】Re:検索して別シート挿入後コピー貼り付け eki 05/12/13(火) 12:44 お礼[未読]

【32286】検索して別シート挿入後コピー貼り付け
質問  eki  - 05/12/12(月) 10:43 -

引用なし
パスワード
   こんにちは。
いつも大変参考にさせていただいています。
自分でも勉強していますが、余り進歩が無く
今回も皆さまのお力をお借りできたら
大変助かります。

以下のようなデータが有り、各見出しごとに別シート
を挿入して貼り付けたいと思っております。
サンプルでは、規則正しく表記してありますが
実データでは、データ1の上下には空白があったりなかったり、
別データが混ざっていたりします。
以下のデータはそのまま取っておきたいので
コピーすることとなりますが、なかなか思うように
コードが書けません。

アドバイスいただけますか?

  A    B    C    D   E
1 データ1    データ2    データ3    データ4    Total
2 0    0    0    2672    2672
3 0    0    0    1632    1632
4 0    0    11704    0    11704
5 0    0    0    0    0
6 0    0    0    0    0
7 0    0    0    232    232
8 0    0    0    0    0
9 0    0    352    0    352
10 0    0    1032    0    1032
11 データ1    データ2    データ3    データ4    Total
12 0    0    0    2672    2672
13 0    0    0    1632    1632
14 0    0    11704    0    11704
15 0    0    0    0    0
16 0    0    0    0    0
17 0    0    0    232    232
18 0    0    0    0    0
19 0    0    352    0    352
20 0    0    1032    0    1032
21 Iデータ1    データ2    データ3    データ4    Total
22 0    0    0    2672    2672
23 0    0    0    1632    1632
24 0    0    11704    0    11704
25 0    0    0    0    0
26 0    0    0    0    0
27 0    0    0    232    232
28 0    0    0    0    0
29 0    0    352    0    352
30 0    0    1032    0    1032
---------------------------------------
---------------------------------------
---------------------------------------
10000行くらい続くデータが多い

よろしくお願い致します。

【32288】Re:検索して別シート挿入後コピー貼り付け
発言  Statis  - 05/12/12(月) 11:18 -

引用なし
パスワード
   こんにちは
>以下のようなデータが有り、各見出しごとに別シート
>を挿入して貼り付けたいと思っております。
見出しとは?
新しいシートを作ると言う事?

>サンプルでは、規則正しく表記してありますが
>実データでは、データ1の上下には空白があったりなかったり、
>別データが混ざっていたりします。
>以下のデータはそのまま取っておきたいので
>コピーすることとなりますが、なかなか思うように
>コードが書けません。

記載のデータがどのように転記したいのでしょうか?
データの区分はどこでするのでしょうか?

【32290】Re:検索して別シート挿入後コピー貼り付け
質問  eki  - 05/12/12(月) 11:24 -

引用なし
パスワード
   ▼Statis さん:

説明が足らず、申し訳ないです。

見出しというのは、
サンプルデータで言うと、
1行目、11行目などの
"1 データ1    データ2    データ3    データ4    Total"
という部分です。
サンプルでは、データ4までですが、もっと多い場合もありますし
少ない場合もあります。
例えばデータ10まであったりします。

>記載のデータがどのように転記したいのでしょうか?

出来れば値貼り付けできるとありがたいです。
(関数を使用しているので)

よろしくお願い致します。


>こんにちは
>>以下のようなデータが有り、各見出しごとに別シート
>>を挿入して貼り付けたいと思っております。
>見出しとは?
>新しいシートを作ると言う事?
>
>>サンプルでは、規則正しく表記してありますが
>>実データでは、データ1の上下には空白があったりなかったり、
>>別データが混ざっていたりします。
>>以下のデータはそのまま取っておきたいので
>>コピーすることとなりますが、なかなか思うように
>>コードが書けません。
>
>記載のデータがどのように転記したいのでしょうか?
>データの区分はどこでするのでしょうか?

【32293】Re:検索して別シート挿入後コピー貼り付け
回答  Statis  - 05/12/12(月) 12:00 -

引用なし
パスワード
   こんにちは

シート名をどのようにするのか不明なのでそのままに
A列の「データ1」を検索して処理しています。
シートを挿入していますのでデータ数によってはErrが出る場合があります。
「シート数はメモリ依存ですので」
一応、お試しを(データシート=Sheet1としています)

Sub test()
Dim Fi As Range, Ro() As Long, Ad As String, Co As Long
Dim Ws As Worksheet, i As Long
Application.ScreenUpdating = False
With Worksheets("Sheet1")
   .Range("A65536").End(xlUp).Offset(1).Value = "データ1"
   Set Fi = .Columns(1).Find("データ1", , xlValues, xlWhole, , xlPrevious)
   If Not Fi Is Nothing Then
    Ad = Fi.Address: Co = 0
    Do
     ReDim Preserve Ro(Co)
     Set Fi = .Columns(1).FindNext(Fi)
     Ro(Co) = Fi.Row
     Co = Co + 1
    Loop Until Ad = Fi.Address
   End If
   For i = 0 To UBound(Ro) - 1
     Set Ws = Worksheets.Add(After:=Sheets(Sheets.Count))
     .Range(.Cells(Ro(i), 1), .Cells(Ro(i + 1) - 1, 1)).EntireRow.Copy Ws.Range("A1")
     Set Ws = Nothing
   Next i
   .Range("A65536").End(xlUp).ClearContents
End With
Application.ScreenUpdating = True
End Sub

【32311】Re:検索して別シート挿入後コピー貼り付け
お礼  eki  - 05/12/12(月) 17:15 -

引用なし
パスワード
   ▼Statis さん:

綺麗なプログラム、本当にありがとうございます。
早速今試してみました。
が、サンプルと違い、8列目(H列)に検索データ
が入っているので、以下のように書き換えましたが
"For i = 0 To UBound(Ro) - 1"のところで
エラーが出てしまいました。
配列のところまで理解できていないので、UBound
の指定が間違っているのだと思います。
何とか調べてみます。
(進歩出来なくて泣けてきます・・)

本当にありがとうございました。

Sub test()
Dim Fi As Range, Ro() As Long, Ad As String, Co As Long
Dim Ws As Worksheet, i As Long
Application.ScreenUpdating = False
With Worksheets("hadata_recv")
   .Range("H65536").End(xlUp).Offset(1).Value = "データ1"
   Set Fi = .Columns(1).Find("IF0d", , xlValues, xlWhole, , xlPrevious)
   If Not Fi Is Nothing Then
    Ad = Fi.Address: Co = 0
    Do
     ReDim Preserve Ro(Co)
     Set Fi = .Columns(8).FindNext(Fi)
     Ro(Co) = Fi.Row
     Co = Co + 1
    Loop Until Ad = Fi.Address
   End If
   For i = 0 To UBound(Ro) - 1
     Set Ws = Worksheets.Add(After:=Sheets(Sheets.Count))
     .Range(.Cells(Ro(i), 8), .Cells(Ro(i + 1) - 1, 8)).EntireRow.Copy Ws.Range("A1")
     Set Ws = Nothing
   Next i
   .Range("A65536").End(xlUp).ClearContents

【32346】Re:検索して別シート挿入後コピー貼り付け
回答  Statis  - 05/12/13(火) 8:45 -

引用なし
パスワード
   こんにちは

まず、検索値が変更されていますので。
>.Range("H65536").End(xlUp).Offset(1).Value = "データ1"
.Range("H65536").End(xlUp).Offset(1).Value = "IF0d"
としなければいけません。

もうひとつ

>Set Fi = .Columns(1).Find("IF0d", , xlValues, xlWhole, , xlPrevious)

Set Fi = .Columns(8).Find("IF0d", , xlValues, xlWhole, , xlPrevious)


では

 

【32368】Re:検索して別シート挿入後コピー貼り付け
お礼  eki  - 05/12/13(火) 12:44 -

引用なし
パスワード
   ▼Statis さん:

大変助かりました。
本当にありがとうございました。

理解力が足らず、お恥ずかしいです。
今後もよろしくお願い致します。

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