重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

閲覧いただきましてありがとうございます。いつも拝見させて勉強させていただいております。

表記の件なのですが、私の取り扱っておりますソフトウェアでは、大量のデータが吐き出されます。
それを、都合よくシートごとに切り分けたいと思ったのですが、構文が組めません。

A列に、判別用のデータが出ていまして、判別というのは、
I01の時、そのひと固まりのデータのタイトルおよび基本情報が載っており、
I02以降、上のI01のタイトルの時の中身のデータの羅列が次のI01(タイトル)まで載っております。

Excelにてテキストデータを読み込ませて分割いたしますと下記のような形になります。

A列   B列    C列    D列
I01  タイトルA  基本情報  基本情報
I02  データA    データB   データC
I02  データA'   データB'  データC'



I01  タイトルB  基本情報  基本情報 
I02  データA    データB   データC
I02  データA'   データB'  データC'(上記のI01とは別のデータです)



と、このように、I01から、次のI01の1つ上のI02までが、タイトルの中身のデータという風になっております。

これを
シート1 元データ群
シート2 タイトルAのデータ群のみ記載(BからD列まで)
シート3 タイトルBのデータ群のみ記載(BからD列まで)
シートn タイトルnのデータ群のみ記載(BからD列まで)

という風に分割して管理したいのですが、うまく理解ができません。

どなたか構文とその解説をご教示願えませんでしょうか?
以上、よろしくお願いいたします。

A 回答 (3件)

こんばんは!



標準モジュールです。

Sub Sample1()
Dim i As Long, k As Long, cnt As Long, lastRow As Long
Dim wS As Worksheet, sN As String, myFlg As Boolean

With Worksheets(1)
For i = 1 To .Cells(Rows.Count, "B").End(xlUp).Row
If .Cells(i, "A") = "I01" Then
sN = .Cells(i, "B")
cnt = cnt + 1
For k = 2 To Worksheets.Count
If Worksheets(k).Name = sN Then
myFlg = True
Exit For
End If
Next k
If myFlg = False Then
Worksheets.Add after:=Worksheets(cnt)
Worksheets(cnt + 1).Name = sN
Set wS = Worksheets(sN)
wS.Range("A1").Resize(, 3).Value = .Cells(i, "B").Resize(, 3).Value
End If
Set wS = Worksheets(sN)
wS.Cells.ClearContents
wS.Range("A1").Resize(, 3).Value = .Cells(i, "B").Resize(, 3).Value
Else
Set wS = Worksheets(sN)
wS.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(, 3).Value = .Cells(i, "B").Resize(, 3).Value
End If
myFlg = False
Next i
End With
MsgBox "完了"
End Sub

※ じっくり考えればもっと簡単になるかもしれませんが、
まずはこの程度で・・・

※ 各シートのシート名はB列の「タイトル○」としています。m(_ _)m
    • good
    • 1
この回答へのお礼

tomo04様
変数の型など省略せず丁寧な構文を考えてくださりありがとうございます。

実際に一つ一つ頭の中で代入しながら翻訳してみて理解を深めることもできました。
また、構文自体も入力してみましたらそのまま使うことができまして助かりました。

ベストアンサーとさせていただきます。ありがとうございました。

お礼日時:2018/06/07 14:57

シートの分割はやめて、こんなデータを作ってみてはいかがでしょうか。

シートを分割して後悔している質問者さんって、結構、多いと思いますよ。

A列     B列     C列     D列
タイトルA  データA    データB   データC
タイトルA  データA'   データB'  データC'


タイトルB  データA    データB   データC
タイトルB  データA'   データB'  データC'
    • good
    • 0
この回答へのお礼

ママチャリ様
このデータを使用しまして帳票を作成する必要があり、またシートごとに帳票を吐き出せるようなマクロを作成しておりまして、
今回はこのような形にするのが最も効率がよく作業できる形となりました。
確かにシートの操作はどうしても面倒な部分が出てきてしまうかと思います。
おそらく、本来であればそこまで考えたうえでの一括のマクロ処理ができるほうがいいのでしょうね。ありがとうございます

お礼日時:2018/06/07 14:55

「タイトルA」が入力されているセルを見つける。


「タイトルB」が入力されているセルを見つける。
(これでA群のデータの範囲を判断できます)
範囲を指定してコピー、貼り付け先を指定してペースト。
「タイトルC」が入力されているセルを見つける。
(これでB群のデータの範囲を判断できます)
範囲を指定してコピー、貼り付け先を指定してペースト。



「タイトルn」が入力されているセルを見つける。
(これでn-1群のデータの範囲を判断できます)
範囲を指定してコピー、貼り付け先を指定してペースト。
残りの範囲を指定してコピー、貼り付け先を指定してペースト。

ですよね。
紙の上で手作業する際の手順をそのまま再現すれば良いんです。
これを効率よく記述する方法(For~Nextなど)は、慣れてからでも十分ですよ。
    • good
    • 1
この回答へのお礼

銀鱗様
私はいつも構文を考える際、紙にストーリー立ててから翻訳しているのですが、翻訳作業がへたくそなので、なかなかうまくいきませんでした。
考え方が私の考えていた内容よりもシンプルでわかりやすかったです。ありがとうございました。

お礼日時:2018/06/07 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!