
閲覧いただきましてありがとうございます。いつも拝見させて勉強させていただいております。
表記の件なのですが、私の取り扱っておりますソフトウェアでは、大量のデータが吐き出されます。
それを、都合よくシートごとに切り分けたいと思ったのですが、構文が組めません。
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列まで)
という風に分割して管理したいのですが、うまく理解ができません。
どなたか構文とその解説をご教示願えませんでしょうか?
以上、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんばんは!
標準モジュールです。
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
tomo04様
変数の型など省略せず丁寧な構文を考えてくださりありがとうございます。
実際に一つ一つ頭の中で代入しながら翻訳してみて理解を深めることもできました。
また、構文自体も入力してみましたらそのまま使うことができまして助かりました。
ベストアンサーとさせていただきます。ありがとうございました。
No.3
- 回答日時:
シートの分割はやめて、こんなデータを作ってみてはいかがでしょうか。
シートを分割して後悔している質問者さんって、結構、多いと思いますよ。A列 B列 C列 D列
タイトルA データA データB データC
タイトルA データA' データB' データC'
・
・
タイトルB データA データB データC
タイトルB データA' データB' データC'
ママチャリ様
このデータを使用しまして帳票を作成する必要があり、またシートごとに帳票を吐き出せるようなマクロを作成しておりまして、
今回はこのような形にするのが最も効率がよく作業できる形となりました。
確かにシートの操作はどうしても面倒な部分が出てきてしまうかと思います。
おそらく、本来であればそこまで考えたうえでの一括のマクロ処理ができるほうがいいのでしょうね。ありがとうございます
No.1
- 回答日時:
「タイトルA」が入力されているセルを見つける。
「タイトルB」が入力されているセルを見つける。
(これでA群のデータの範囲を判断できます)
範囲を指定してコピー、貼り付け先を指定してペースト。
「タイトルC」が入力されているセルを見つける。
(これでB群のデータの範囲を判断できます)
範囲を指定してコピー、貼り付け先を指定してペースト。
・
・
・
「タイトルn」が入力されているセルを見つける。
(これでn-1群のデータの範囲を判断できます)
範囲を指定してコピー、貼り付け先を指定してペースト。
残りの範囲を指定してコピー、貼り付け先を指定してペースト。
ですよね。
紙の上で手作業する際の手順をそのまま再現すれば良いんです。
これを効率よく記述する方法(For~Nextなど)は、慣れてからでも十分ですよ。
銀鱗様
私はいつも構文を考える際、紙にストーリー立ててから翻訳しているのですが、翻訳作業がへたくそなので、なかなかうまくいきませんでした。
考え方が私の考えていた内容よりもシンプルでわかりやすかったです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
エクセルで時間の合計ができません
-
差し込み印刷で文字列が「0」と...
-
エクセルの関数で範囲のある数...
-
オブジェクトブラウザでデータ...
-
エクセルのマクロで他のシステ...
-
【エクセル】区切り文字が含ま...
-
Excelエクセルが勝手に10MBにな...
-
テキストデータのPDFをWordで開...
-
使用しているエクセルデータか...
-
斜めの貼り付け
-
エクセルで「データ」の「区切...
-
CSVをダウンロードするときに数...
-
SUMIFS関数の計算結果が違います
-
【Excel VBA】Worksheets().Act...
-
エクセルで円グラフに引き出し...
-
Excelで、空白を表示したい
-
エクセルで、時間 0:00を表示...
-
エクセルの主軸と第2軸の0を合...
-
DATEDIFでマイナス表示をさせたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
【エクセル】区切り文字が含ま...
-
テキストデータのPDFをWordで開...
-
エクセルで時間の合計ができません
-
エクセルの関数で範囲のある数...
-
オブジェクトブラウザでデータ...
-
差し込み印刷で文字列が「0」と...
-
SUMIFS関数の計算結果が違います
-
エクセルでプルダウン選択され...
-
0:00をカウントしない方法
-
マクロ 行挿入で数式も反映す...
-
スプレッドシート関数、右端の...
-
斜めの貼り付け
-
wordデータを、excelに自動で入...
-
DBで改行が入っているデータをE...
-
エクセルのマクロで他のシステ...
-
膨大なデーターの変更点のみ抽...
-
【マクロ】転記ツール。転記先...
-
Excel 条件付き書式で、別シー...
-
excelピボットテーブルの「行」...
おすすめ情報